浅析javascript执行引擎的执行顺序和时序模式

浅析javascript执行引擎的执行顺序和时序模式

执行顺序

在同一个执行环境里面的javascript是按照时间顺序执行的。当javascript代码还在运行的时候,外部事件无法中断代码的运行,同时也不支持线程对任何共享内存的修改。

当执行引擎在忙的时候,事件处理、定时器、页面浏览的请求等动作都会往后延迟。在大多数情况下,整个浏览器里至少HTML渲染器部分基本处于不响应状态。只有在代码执行结束后,脚本引擎恢复空闲状态,才会重启对排队事件的处理。此时才有可能重新执行javascript代码。

案例:

更进一步说:javascript本身是没有sleep()和pause()这样的暂停功能来临时释放CPU,或在暂停结束后从同一位置重新开始执行。javascript的做法是:如果程序员希望推延某个脚本的执行,需要注册一个定时器,以便在延迟一段时间后能启动一个新的执行流。只有在触发了特定的处理器函数后,才开始这个执行流。

案例:

PS:在这套同步执行模式里面可能会存在一些漏洞,就是在调用类似alert()或者showModalDialog()函数的时候,吐过它们处于临时挂起的状态,系统其实仍然有可能执行其他的js代码。

案例:

时序模式

繁忙的javascript循环可能会引起浏览器被挂死这样的破坏性后果,所以在浏览器里面需要有一些能减缓此类问题影响的处理。实际上:任何死循环都能被中断推出,后果等价于一个未处理的异常。循环推出,引擎恢复到闲置状态,引起问题的代码也仍然可以被调用,所有的计时器和事件句柄也会保持原样。

由于CPU占用率特别高的代码执行能被中断,所以存在一个问题:那就是如果被攻击者刻意的去这样做,就能导致程序推出,使应用处于完全不确定状态,而非开发者原先预想的那样成功执行完成。



转载于:https://my.oschina.net/bosscheng/blog/312645

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值