Speed up your JavaScrip 1[]

本文探讨了脚本失控的四个主要原因之一:循环中的过多操作,并提供了评估和优化循环的有效方法,以防止脚本运行过长,避免浏览器响应迟缓。通过识别并解决循环体内的操作数量及循环次数问题,可以显著提升脚本执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<div class="blog_content">根据nicholas的说法,有四种代码会拖慢脚本的运行,并最终导致脚本失控。分别是次数过多的同步循环、庞大的函数体、不恰当的递归和不合理的dom调用。这篇着重讲第一个原因。最后给出了一个开发模式,替换传统的循环结构,可以完全避免脚本失控的状况发生。
原文标题:[url=http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/]<span style="color: #108ac6;">speed up your javascript, part 1</span>[/url]<br>原文作者:[url=http://www.nczonline.net/about/]<span style="color: #108ac6;">nicholas c. zakas</span>[/url]
在我 [url=http://www.nczonline.net/blog/2009/01/05/what-determines-that-a-script-is-long-running/]<span style="color: #108ac6;">上一篇帖子</span>[/url]([url=http://www.blueidea.com/tech/web/2009/6435.asp]<span style="color: #108ac6;">译文</span>[/url])中,谈到了各个浏览器究竟会在什么情况下弹出脚本失控提示,对于internet explorer来说,当浏览器执行了数量过多的语句时就会停止执行脚本,而其他的浏览器,则是持续执行脚本超过一定时间的时候就会给出提示。而我们要探讨的核心问题,不是这些浏览器如果探测失控的脚本,而是我们如何才可以让脚本运行的更快一些,从而避免这些警告。
脚本失控基本上有以下四个方面的原因:
[list=1][*]在循环中执行了太多的操作。
[*]臃肿的函数体
[*]过多的递归
[*]过多的dom调用
[/list]在这篇帖子中,我将会把重点放到第一条上:循环中的过多操作。循环的操作是同步进行的,所以执行一个循环所花费的时间完全取决于循环的次数。因此有两种情况会导致循环执行的时间过长,并直接导致锁定浏览器。一是循环体中包含了太多的操作,二是循环的次数过多。这两种情况都能直接导致锁定浏览器,并显示脚本失控的提示。
解决这个问题的诀窍就是用下面这两个问题来评估每个循环:
[list=1][*]这个循环必须要同步执行么?
[*]循环里面的数据,必须要按顺序执行么?
[/list]如果两个问题的答案都是否定的话,你就可以选择将循环里的操作进行分解。关键是要根据代码的具体环境确定上面两个问题的答案。一个典型的循环可能像下面这个样子:
 
<span class="code">
for(var i=0; i < items.length; i++){   process(items[i]);}
 
乍一看这个循环并没有太大的问题,是不是会运行很长时间完全取决于循环的次数。如果紧接循环后没有其他代码在执行的时候需要依赖于循环的结果,那么对于第一个问题的答案就是“不”。你还可以发现,循环每次只处理一个数值,而且不依赖于上一次循环的结果,所以对于第二个问题的答案同样也是否定的。这就意味着,循环可以通过某种方式进行拆解,不会导致锁定浏览器而显示脚本失控的提示。
在《[url=http://www.amazon.com/gp/product/047022780x?ie=utf8&tag=nczonline-20&linkcode=as2&camp=1789&creative=390957&creativeasin=047022780x]<span style="color: #108ac6;">professional javascript, second edition</span>[/url]》这本书中,对于那些执行次数非常巨大的虚幻,我推荐使用下面的方式来处理:
<span class="code"><div class="dp-highlighter"><br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值