改善JavaScript程序的188个建议21-30.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
建议21:推荐提高循环性能的策略(1) 每次运行循环体时都会产生性能开销,增加总的运行时间,即使是循环体中最快的代码,累计迭代上千次,也将带来不小的负担。因此,减少循环的迭代次数可获得显著的性能提升。例如: var?iterations?=?Math.floor(items.length?/?8),?startAt?=?items.length?%?8,?i?=?0; ? do?{ ? ????switch(startAt)?{ ? ????????case?0: ? ????????????process(items[i++]); ? ????????case?7: ? ????????????process(items[i++]); ? ????????case?6: ? ????????????process(items[i++]); ? ????????case?5: ? ????????????process(items[i++]); ? ????????case?4: ? ????????????process(items[i++]); ? ????????case?3: ? ????????????process(items[i++]); ? ????????case?2: ? ????????????process(items[i++]); ? ????????case?1: ? ????????????process(items[i++]); ? ????} ? ????startAt?=?0; ? }?while?(--iterations);? 在上面代码中,每次循环最多可调用process()函数8次。循环迭代次数为元素总数除以8。因为总数不一定是8的整数倍,所以startAt变量存放余数,指明第一次循环中应当执行多少次process()。如果现在有12个元素,那么第一次循环将调用process() 4次,第二次循环调用process() 8次,用两次循环代替了12 次循环。在下面的代码中取消switch 表达式,将余数处理与主循环分开。 var?i?=?items.length?%?8; ? while(i)?{ ? ????process(items[i--]); ? } ? i?=?Math.floor(items.length?/?8); ? while(i)?{ ? ????process(items[i--]); ? ????process(items[i--]); ? ????process(items[i--]); ? ????process(items[i--]); ? ????process(items[i--]); ? ????process(items[i--]); ? ????process(items[i--]); ? ????process(items[i--]); ? }? 虽然上面代码使用两个循环替代了先前的一个循环,但是在循环体中去掉了switch 表达式,速度更快。如果循环的迭代次数少于1000次,减少迭代次数的循环与普通循环相比可能只有微不足道的性能提升。如果迭代次数超过1000 次,比如在500 000 次迭代中,合理地减少循环的迭代次数可以使运行时间减少到普通循环的70%。 有两个因素影响到循环的性能: 每次迭代干什么。 迭代的次数。 通过减少这两者中的一个或全部(的执行时间),可以提高循环的整体性能。如果一次循环需要较长时间来执行,那么多次循环将需要更长时间。限制在循环体内进行耗时操作的数量是一个加快循环的好方法。一个典型的数组处理循环可采用3种循环的任何一种。最常用的代码如下: //方法1 ? for?(var?i=0;?i??items.length;?i++){ ? ????process(items[i]); ? } ? //方法2 ? var?j=0; ? while?(j??items.length){ ? ????process(items[j++]); ? } ? //方法3 ? var?k=0; ? do?{ ? ????process(items[k++]); ? }?while?(k??items.length);? 建议21:推荐提高循环性能的策略(2) 在每个循环中,每次运行循环体都要发生如下操作: 第1步,在控制条件中读一次属性(items.length)。 第2步,在控制条件中执行一次比较(i items.length)。 第3步,比较操作,观察条件控制体的运算结果是不是true(i items.length == true)。 第4步,一次自加操作(i++)。 第5步,一次数组查找(items[i])。 第6步,一次函数

文档评论(0)

beoes + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档