您的位置: 首页 > 技术文档 > 网页制作 > 解读javascript的计时器 II
认识Javascript数组 回到列表 Data URI 和 MHTML
 解读javascript的计时器 II

作者:dishuipiaoxiang 时间: 2009-08-19 文档类型:原创 来自:Denis'Blog

第 1 页 昂贵计算的处理
第 2 页 中央计时器控件
第 3 页 异步测试
第 4 页 总结

上一篇:解读javascript的计时器 I

未经授权禁止转载

1、昂贵计算的处理

在复杂Javascript应用程序开发中,最复杂的可能是用户界面的单线程特性。而Javascript在处理用户交互时最好的状况是反应迟钝,最糟糕的情况是无响应而导致浏览器挂起(在Javascript执行时,页面中所有的更新操作暂停)。源于这一事实,将所有复杂操作(任何多于100ms的计算)减小到可管理的程度就势在必行。另外,如果运行了至少5秒钟还没有停止,一些浏览器(如Firefox 、Opera)将产生一个提示框警告用户脚本无相应。

这显然是不可取的,产生一个无响应的界面并不好。但是,几乎可以肯定的是,当你需要处理大量数据时就会出现这种情况(如处理数以千计的DOM元素会导致这种情况出现)。

此时,计时器就显得尤为有用。由于计时器能有效的暂停Javascript代码的执行,它也能阻止浏览器将执行的代码挂起(只要个别代码还不足以使浏览器挂起)。想到这一点,我们可以将正常的、密集的、循环计算纳入到非阻塞的计算之中,让我们看看下面这个例子,这种类型的计算是必需的。

一个长时运行的任务:

<table><tbody></tbody></table>
// Normal, intensive, operation
var table = document.getElementsByTagName("tbody");
for ( var i = 0; i < 2000; i++ ) {
 var tr = document.createElement("tr");
 for ( var t = 0; t < 6; t++ ){
  var td = document.createElement("td");
   td.appendChild( document.createTextNode("" + t));
   tr.appendChild( td );
  }
 table.appendChild( tr );
 }
}

在这个例子中,我们创建了总数为26000个DOM节点,并将数字填入表中,这太昂贵了,很有可能将浏览器挂起以阻止用户正常的交互。我们可以将计时器引入其中,从而得到与众不同,也许更好的结果。

用计时器将耗时较长的任务拆分开来:

<table><tbody></tbody></table>
var table = document.getElementsByTagName("tbody");
var i = 0, max = 1999;
setTimeout(function(){
 for ( var step = i + 500; i < step; i++ ) {
   var tr = document.createElement("tr");
   for ( var t = 0; t < 6; t++ ){
     var td = document.createElement("td");
     td.appendChild( document.createTextNode("" + t));
     tr.appendChild( td );
   }
}
table.appendChild( tr );
}
if ( i < max )
 setTimeout( arguments.callee, 0 );
}, 0);

在我们修改的例子中,我们将密集的计算分成四部分,每个创建6500个节点。这些计算不太可能中断浏览器正常的流。最糟糕的情况也只是这些数字可能随时调整(例如,使其在250-500之间变化,这样我们的每一个单元将产生3500DOM个节点)。但是,给人印象最深的是我们如何改变我们的代码以适应新的异步系统。我们需要做更多的工作以确保元素的数字正确生成(该循环不会永无休止)。这些代码与我们初始的很相似。注意,我们使用闭包维持代码片段间的迭代状态,毫无疑问,不使用闭包,此代码将更为复杂。

与原来的技术相比,使用该技术有一个明显的变化。浏览器的长时挂起被4个视觉化的页面更新替代。虽然浏览器尝试着尽可能快得去执行这些代码片段,它也在计时器的每一步操作之后渲染DOM变化(就好像大量的更新)。大多数情况下,用户觉察不到此种类型的更新,但记住它们曾经发生过很重要。

有一种情况会使该技术能专门为我服务--我构建的计算大学生日程排列的应用程序。起初,该应用程序是典型的CGI(客户与服务器交流,服务器计算出日程表之后将其返回)。但我对它作了改变,讲所有的日程计算放到客户端,这是日程计算的视图:

这些计算的代价相当昂贵(需要遍历数以千计的排列以找到正确的答案)。将日程计算分割成实实在在的单元使这一问题得到了解决(用已经完成的那部分更新用户界面)。最后,用户提交的是快速、反应灵敏、可用性较高的用户界面。

如此有用的技术常常令人惊奇。你会发现它经常被用于长时运行的程序之中,就像测试箱(我们在这章末尾讨论它)。更为重要的是,这种技术向我们显示了解决浏览器环境的限制是多么的轻而易举,同时也为用户提供了丰富的经验。

出处:Denis'Blog
责任编辑:bluehearts

上一页 下一页 中央计时器控件

◎进入论坛网页制作WEB标准化版块参加讨论,我还想发表评论

作者文章
解读javascript的计时器 I
使用jQuery改进文件上传控件
自适应css布局——流动布局新时代
图像替换新技术:状态域方法
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
悟道web标准:前端性能优化
纯中文域名".中国"今日提交申请
世界之窗3.0皮肤设计大赛结果公布
使用jQuery制作滑动动画效果的层
如何设计网页横幅
Plump 图标设计
Subrat Nayak图标设计
百度知道推出文档分享服务
CSS Sprites(CSS雪碧):要还是不要?
UIRSS三周年纪念日推出V2公测版
栏目最新 栏目最新列表
Firefox的Jetpack扩展案例分析
阿里妈妈UED谈CSS Sprites技术
Photoshop中设计绿色时尚Web网站
操作Dom节点实现间歇滚动新闻
浏览器15年历史回顾
如何创建Firefox的Jetpack扩展
全透视:CSS Z-index 属性
用PS 3D工具绘制甜麦圈包装袋
悟道Web标准:让W3C标准兼容终端
悟道WEB标准:统一思想,遵循标准
>> 分页 首页 前页 后页 尾页 页次:1/41个记录/页 转到 页 共4个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

本文现有 1 条评论 暂时没有人参与评分


zehee Publish at 2009-8-20 10:28:35
把引用代码里面尖括号的转义字符改回来吧。
您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
《Web标准设计》
闪魂-FlashCS4完美入门与案例精粹
Waver_h's华丽世界
Illustrator CS3质感绘画表现技法
《Flash短片轻松学》
《用户体验要素》
《JavaScript语言精粹》
作品集 更多内容

发现王国2009版 米修系列月历壁纸 整套房产设计稿 我的学习 一条鱼 珠江钢琴等几个黑色首 南宁威尔森