PAGE / NUMPAGES

HTML 5 Web开发:防止浏览器假死的方法

在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了。

AD:

一个浏览器至少存在三个线程:js引擎线程(处理js)、GUI渲染线程(渲染页面)、浏览器事件触发线程(控制交互)。资料个人收集整理,勿做商业用途

JavaScript引擎是基于事件驱动单线程执行的,JS引擎一直等待着任务队列中任务的到来然后加以处理,浏览器无论再什么时候都只有一个JS线程在运行JS程序。资料个人收集整理,勿做商业用途

GUI 渲染线程负责渲染浏览器界面,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。但需要注意 GUI渲染线程与JS引擎是互斥的,当JS引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。资料个人收集整理,勿做商业用途

事件触发线程,当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可来自JavaScript引擎当前执行的代码块如setTimeOut、也可来自浏览器内核的其他线程如鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。资料个人收集整理,勿做商业用途

了解了浏览器的内核处理方式就不难理解浏览器为什么会进入假死状态了,当一段JS脚本长时间占用着处理机就会挂起浏览器的GUI更新,而后面的事件响应 也被排在队列中得不到处理,从而造成了浏览器被锁定进入假死状态。另外JS脚本中进行了DOM操作,一旦JS调用结束就会马上进行一次GUI渲染,然后 台湾高山茶 才 开始执行下一个任务,所以JS中大量的DOM操作也会导致事件响应缓慢甚至真正卡死浏览器,如在IE6下一次插入大量的HTML。而如果真的弹出了 脚本 运行时间过长 的提示框则说明你的JS脚本肯定有死循环或者进行过深的递归操作了。资料个人收集整理,勿做商业用途

现在如果遇到了这种情况,我们可以做的不仅仅是优化 代码,html5的webWorkers提供了js的后台处理线程的API,它允许将复杂耗时的单纯js逻辑处理放在浏览器后台线程中进行处理,让js线 程不阻塞UI线程的渲染。这个线程不能和页面进行交互,如获取元素、alert等。多个线程间也是可以通过相同的方法进行数据传递。资料个人收集整理,勿做商业用途

直接看代码:

例子:用户输入一个数字,进行加法运算(+=)

以前的做法:

!DOCTYPEHTML htmllang= en head metacharset= UTF-8 title webworkers--calculate title head body inputid= num name= num type= text buttonοnclick= calculate() 计算 button br divid= result >资料个人收集整理,勿做商业用途

使用webWorkers以后:

calculate.html

!DOCTYPEHTML htmllang= en head metacharset= UTF-8 title webworkers--calculate title head body inputid= num name= num type= text buttonοnclick= calculate() 计算 button br divid= result >资料个人收集整理,勿做商业用途

calculate.js

onmessage=function(event){ varnum=event.data; varresult=0; for(vari=0;i num;i++){ result+=i; } postMessage(result); };资料个人收集整理,勿做商业用途

webWorker需要将代码放入web 玛瑙 服务器中, 如果使用的是localhost请用高版本的chrome浏览器打开,firefox浏览器在处理localhost的时候会出现 Could not get domain! 的错误,关于这个可以参考:https:show_bug.cgi?id=682450 对比上面的两种实现方式,当计算值达到100亿的时候,普通做法耗时已经很长,且一般会卡死了。资料个人收集整理,勿做商业用途

webWorkers在Chrome15下的效果

更正:getTime()返回的应该是毫秒(ms),而不是秒(s)。

如下图所示:

普通方法在Chrome15下的效果

可见webWorkers在未来的w

html 防网页假死,htmlweb开发:防止浏览器假死的方法.doc相关推荐

  1. java 打开网页并运行脚本_各种浏览器开启JavaScript脚本方法

    1.单击右上角的齿轮图标.从出现的菜单中选择Internet 选项. 2.单击安全选项卡.单击窗口底部的自定义级别按钮,弹出安全设置对话框. 3.找到脚本目录.单击JAVA 小程序下的启用选项,选择此 ...

  2. 浏览器真的能“永不假死”?——六款主流浏览器防假死功能测试

    作者:一石来源:家用电脑 浏览器是大家上网必备的工具,而浏览器假死也是大家在上网时常常所遇到的问题,让人头疼.最近各款主流浏览器纷纷推出了最新版本,我们可以发现一个相同点就是他们都以"防假死 ...

  3. 转:优化js脚本设计,防止浏览器假死

    原链接打不开了,复制一份保存: 在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出"脚本运行时间过长"的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化 ...

  4. 《网页设计与前端开发 Dreamweaver+Flash+Photoshop+HTML+CSS+JavaScript 从入门到精通》—— 第1章 网页设计基础知识...

    本节书摘来异步社区<网页设计与前端开发 Dreamweaver+Flash+Photoshop+HTML+CSS+JavaScript 从入门到精通>一书中的第1章,作者: 何新起 , 任 ...

  5. 【Google】【内部样式表】【外部样式表:听力地点方向题】【设置字体间距】【多类、子元素选择器】【网页设计与网站开发HTML、CSS、JavaScript】【第 8 章】CSS基础——实验题1-6

    以下为本人大一选修课<网页设计与网站开发>的实验作业题,均为本人原创,分享给大家.如有不足之处欢迎指出. 目录 实验1 1.题目 2.代码 3.网页运行效果 实验2 1.题目 2.代码 3 ...

  6. 2016 server win 假死_Windows 7假死的几个常见情况以及解决方法

    大家都在使用Windows7,那么一定会遇到譬如Windows7假死的一些问题.偶尔失去响应也是很令人烦躁的一件事情,虽然不用重装系 统,但是时不时电脑卡上一段时间,性子急的肯定会很烦躁.那么因为什么 ...

  7. WEB网页设计前端(前台)开发的常用工具推荐

    WEB网页设计前端(前台)开发的常用工具推荐 最近我在搞网页设计,包括网站建设的前台界面设计和JS代码的编写,弄一个JS的时候把我给郁闷了,在寻找JS如何通过子节点操作父节点的时候找到了以下免费的网站 ...

  8. 【JavaScript编写计算工资小程序】【表格细边框设置】【网页设计与网站开发HTML、CSS、JavaScript实例教程】【第十章】JavaScript基础——【传智播客】实验作业题【实验5】

    以下为本人大一选修课<网页设计与网站开发>的实验作业题,均为本人原创,分享给大家.如有不足之处欢迎指出. 1.题目: 实验5.新建页面test5.html,利用JavaScript编写如下 ...

  9. 国际短信系统平台发送接口说明方法|网页短信平台开发搭建-移讯云短信系统

    国际短信系统平台发送接口说明方法|网页短信平台开发搭建-移讯云短信系统 此接口为发送接口可直接通过pos直接调用 直接发送,源码短信平台搭建平台时 包含此功能,在客户端中可查看API接口文档 接口名称 ...

  10. Win7系统只要一打开浏览器就死机 win7打开网页浏览器卡死怎么办

    Win7系统只要一打开浏览器就死机 win7打开网页浏览器卡死怎么办 我们在使用电脑的时候,总是会遇到很多的电脑难题.当我们在遇到了win7电脑中的浏览器一打开就卡死,那么我们应该怎么办呢?今天我们就 ...

最新文章

  1. Science审稿人谈中国首次实现量子优越性:「九章」到底打了谁的脸?
  2. HDU 2055 An easy problem
  3. mysql数据库、表、索引、触发器
  4. amp 调用链_调用链选型之Zipkin,Pinpoint,SkyWalking,CAT
  5. idea pom依赖失败_IDEA中Maven依赖下载失败的完美解决方案
  6. 【Java】计算二进制数中1的个数
  7. mongodb数据导入hbase,spark读取hbase数据分析
  8. Exchange 2007中批量修改用户邮箱配额
  9. Guthrie QA-CAD2019(CAD绘图修订管理工具)A.04中文版
  10. lighttpd 记录
  11. 漫步数理统计二十五——正态分布
  12. 【Blender-Python】蜡笔画圆球动画
  13. 淘宝flexible.js+rem适配pc端
  14. 【FNN回归预测】基于matlab粒子群优化前馈神经网络婚姻和离婚数据回归预测【含Matlab源码 2069期】
  15. 输入存款金额并选择存款种类,计算出利息(不计利息税)和本息合计
  16. 机器学习实操的7个步骤
  17. 计算机信息加工是指什么作用,什么是信息加工信息加工的方式
  18. APUE编程:134---进程间通信(命名域套接字:struct sockaddr_un)
  19. 22考研笔记-英1-语法长难句分析-简单句
  20. iText编辑Pdf模板

热门文章

  1. CAD中XCLIP命令的使用及图块和参照编辑
  2. python输入个人所得税计算_Python实现的个人所得税计算器示例
  3. Win 10.0.16299.15 禁用五笔输入法Shift切换中英文
  4. 无法远程连接到计算机 虚拟内存,远程桌面连接显示内存不足怎么破?
  5. Jupyter Notebook 自动生成目录(超级实用)
  6. Excel -- 行列数据移动(移动复制)
  7. 计算机二级c语言选择题资料,计算机二级C语言重点选择题笔试复习资料
  8. 偶然在github开源项目中发现了.travis.yml这货
  9. IDEA复制文件名快捷键设置
  10. C语言 四种不同方法来判断闰年