浏览器对JavaScript代码执行的限制
浏览器的用户界面和JavaScript代码共享同一个处理进程。无论是浏览器需要响应一个菜单的点击,还是渲染一个页面或者执行Ajax请求,每一个事件都会添加到一个队列中。当浏览器空闲的时候,就会继续执行队列中的任务。
浏览器的线程
实际上,在高端一些的浏览器中都不是只有一个线程。作为极端的例子,IE9和Chrome会为每一个tab生成一个系统的进程。然而,对于每一个页面来说,仍然只有一个事件处理的队列,也就意味着一次只能执行一个任务。这很必要,因为浏览器或者你的JS都可能会去更改HTML的内容。
不难理解,浏览器必须要限制你的JS执行的时间。如果执行时间很长,会锁死进程甚至导致系统崩溃。这就是你会看到这个“无响应的脚本”的对话框原因。
但是浏览器怎么来决定一个代码是不是执行的时间超长了呢?正如你所想的,5个流行的浏览器的处理方式都不一样。
IE
IE对JS代码的限制是500万条。
Firefox
FireFox使用时间来限制,最多是10秒。
Safari
Safari也是限制5秒。
Chrome
Chrome没有特别的限制,但是他会去检测浏览器是否崩溃或者没有响应。
Opera
Opera也没有限制。但是浏览器不会引起系统的崩溃,你在这个停止响应的时候还可以继续开Tab。
有的浏览器允许你自己配置限制的数额,但是不推荐这样改。这样有的人可能用这种办法来修复“不能响应”的页面。你可以搜一下,但是通过修改浏览器的配置来解决响应的问题不是最终的解决办法。
那么如何才能防止JavaScript抛出这样的错误呢?最佳的解决办法就是避免在客户端执行需要长时间运行的函数。理想情况下,所有的函数都应该在几十毫秒内解决问题。更多更复杂的计算应该交给后端然后通过刷新页面或者异步方法来处理。
然而,我们应该意识到减少客户端的压力在现在这种JS大型应用中不是最佳的办法。还有一些别的办法,我们后面会讲到。
建议继续学习:
- 浏览器的工作原理:新式网络浏览器幕后揭秘 (阅读:19512)
- 浅析http协议、cookies和session机制、浏览器缓存 (阅读:15757)
- 从输入 URL 到页面加载完成的过程中都发生了什么事情? (阅读:14460)
- 程序员眼里IE浏览器是什么样的 (阅读:6818)
- 浏览器的渲染原理简介 (阅读:6362)
- 各种浏览器审查、监听http头工具介绍 (阅读:6214)
- 图说浏览器战争:火狐、微软、谷歌那些事 (阅读:6048)
- 浏览器缓存机制 (阅读:5752)
- [译]Google Chrome中的高性能网络 (阅读:5094)
- 12款很棒的浏览器兼容性测试工具推荐 (阅读:4843)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:RockUX 来源: RockUX | WEB、前端、JavaScript、PHP
- 标签: 浏览器 限制
- 发布时间:2011-06-23 00:21:34
- [68] 如何拿下简短的域名
- [68] Go Reflect 性能
- [64] Oracle MTS模式下 进程地址与会话信
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [59] android 开发入门
- [54] 视觉调整-设计师 vs. 逻辑
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [47] 界面设计速成