JS编程建议——21:推荐提高循环性能的策略(1)

简介: 21:推荐提高循环性能的策略(1)

建议21:推荐提高循环性能的策略(1)
每次运行循环体时都会产生性能开销,增加总的运行时间,即使是循环体中最快的代码,累计迭代上千次,也将带来不小的负担。因此,减少循环的迭代次数可获得显著的性能提升。例如:

  1. var iterations = Math.floor(items.length / 8), startAt = items.length % 8, i = 0;
  2. do {
  3. switch(startAt) {
  4. case 0:
  5. process(items[i++]);
  6. case 7:
  7. process(items[i++]);
  8. case 6:
  9. process(items[i++]);
  10. case 5:
  11. process(items[i++]);
  12. case 4:
  13. process(items[i++]);
  14. case 3:
  15. process(items[i++]);
  16. case 2:
  17. process(items[i++]);
  18. case 1:
  19. process(items[i++]);
  20. }
  21. startAt = 0;
  22. } while (--iterations);
    在上面代码中,每次循环最多可调用process()函数8次。循环迭代次数为元素总数除以8。因为总数不一定是8的整数倍,所以startAt变量存放余数,指明第一次循环中应当执行多少次process()。如果现在有12个元素,那么第一次循环将调用process() 4次,第二次循环调用process() 8次,用两次循环代替了12 次循环。在下面的代码中取消switch 表达式,将余数处理与主循环分开。
  23. var i = items.length % 8;
  24. while(i) {
  25. process(items[i--]);
  26. }
  27. i = Math.floor(items.length / 8);
  28. while(i) {
  29. process(items[i--]);
  30. process(items[i--]);
  31. process(items[i--]);
  32. process(items[i--]);
  33. process(items[i--]);
  34. process(items[i--]);
  35. process(items[i--]);
  36. process(items[i--]);
  37. }
    虽然上面代码使用两个循环替代了先前的一个循环,但是在循环体中去掉了switch 表达式,速度更快。如果循环的迭代次数少于1000次,减少迭代次数的循环与普通循环相比可能只有微不足道的性能提升。如果迭代次数超过1000 次,比如在500 000 次迭代中,合理地减少循环的迭代次数可以使运行时间减少到普通循环的70%。

有两个因素影响到循环的性能:
每次迭代干什么。
迭代的次数。
通过减少这两者中的一个或全部(的执行时间),可以提高循环的整体性能。如果一次循环需要较长时间来执行,那么多次循环将需要更长时间。限制在循环体内进行耗时操作的数量是一个加快循环的好方法。一个典型的数组处理循环可采用3种循环的任何一种。最常用的代码如下:

  1. //方法1
  2. for (var i=0; i < items.length; i++){
  3. process(items[i]);
  4. }
  5. //方法2
  6. var j=0;
  7. while (j < items.length){
  8. process(items[j++]);
  9. }
  10. //方法3
  11. var k=0;
  12. do {
  13. process(items[k++]);
  14. } while (k < items.length);
相关文章
|
JavaScript 前端开发 Java
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
496 24
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
|
前端开发 JavaScript Java
JavaScript闭包深入剖析:性能剖析与优化技巧
JavaScript 闭包是强大而灵活的特性,广泛应用于数据封装、函数柯里化和事件处理等场景。闭包通过保存外部作用域的变量,实现了私有变量和方法的创建,提升了代码的安全性和可维护性。然而,闭包也可能带来性能问题,如内存泄漏和执行效率下降。为优化闭包性能,建议采取以下策略:及时解除对不再使用的闭包变量的引用,减少闭包的创建次数,使用 WeakMap 管理弱引用,以及优化闭包结构以减少作用域链查找的开销。在实际开发中,无论是 Web 前端还是 Node.js 后端,这些优化措施都能显著提升程序的性能和稳定性。
432 70
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
375 3
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发
Node.js 中实现多任务下载的并发控制策略
Node.js 中实现多任务下载的并发控制策略
630 15
|
JavaScript 前端开发 Java
深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
Array.find() 是 JavaScript 数组方法中一个非常实用和强大的工具。它不仅提供了简洁的查找操作,还具有性能上的独特优势:返回的引用能够直接影响原数组的数据内容,使得数据更新更加高效。通过各种场景的展示,我们可以看到 Array.find() 在更新、条件查找和嵌套结构查找等场景中的广泛应用。 在实际开发中,掌握 Array.find() 的特性和使用技巧,可以让代码更加简洁高效,特别是在需要直接修改原数据内容的情形。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
前端开发 JavaScript 大数据
关于JavaScript性能问题的误解
JavaScript 是单线程语言,代码逐行执行,遇到大数据量计算可能影响性能。前端同事担心遍历大量数据会导致性能问题,但实际上,即使遍历1000、10000条数据,耗时也较少。测试代码执行时间有三种方法:Date.now、console.time 和 performance.now,其中 performance.now 精度最高。开发中不必过度担忧遍历带来的性能损耗,保持代码清晰更重要。

热门文章

最新文章