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);
相关文章
|
28天前
|
JavaScript 前端开发 安全
JavaScript中的循环控制:while、do-while与for详解
【4月更文挑战第7天】本文探讨JavaScript的三种主要循环结构:while、do-while和for。while循环在满足条件时执行代码块,注意避免无限循环;do-while循环至少执行一次,适合先执行后判断的场景;for循环结合初始化、条件和迭代,适合遍历。理解每种循环的特点和适用场景,结合编程技巧,如使用break和continue,选择合适的循环方式,能提升代码效率和可读性。记得关注循环性能和避免不必要的计算。
19 0
|
1月前
|
JavaScript
在循环内错误使用函数定义(js的问题)
在循环内错误使用函数定义(js的问题)
11 0
|
1月前
|
JavaScript
JS使用循环求100内奇数之和
JS使用循环求100内奇数之和
16 1
|
1月前
|
JavaScript 前端开发
JS——while 循环和 do while 循环:究竟有什么区别?
JS——while 循环和 do while 循环:究竟有什么区别?
20 1
|
1天前
|
JavaScript 前端开发
JavaScript 循环方法详解
JavaScript 循环方法详解
15 1
|
1天前
|
JavaScript 前端开发 测试技术
在JS编程中常见的编程“套路”或习惯汇总
在当前技术圈快速迭代发展的时代,JavaScript是一种广泛应用于Web开发和移动应用开发的脚本语言,其重要性愈发凸显,尤其是随着技术的不断发展和应用场景的不断扩展,JS编程已经成为了许多开发者必备的技能之一。但是仅仅掌握JS语法和基本知识并不足够,为了写出高质量、可靠性和可维护性的代码,开发者需要掌握一些常见的编程"套路"或习惯,这些套路和习惯能够帮助开发者更好地组织和管理代码,提高开发效率,并减少潜在的错误和问题。在JS编程开发中,有一些常见的编程“套路”或习惯,可以帮助开发者编写高效、可维护且易于理解的代码。让我们来看看其中一些常见的编程“套路”或习惯。那么本文就来分享探讨在JS编程中
19 6
在JS编程中常见的编程“套路”或习惯汇总
|
4天前
|
JavaScript 前端开发 C语言
JavaScript编程语法练习
本篇文章是对于javaScript中if ,switch,while ,do-while,,for语法的作业练习.对于我来说也是对自己知识掌握的一种检验.是对js的基础语法进行的一次练习,通过有趣的示例进行练习,使得对于代码能够增加印象,对于知识的掌握更加透彻.
|
9天前
|
JavaScript 前端开发
JavaScript 条件循环语句(for 循环)
JavaScript 条件循环语句(for 循环)
|
12天前
|
前端开发 JavaScript 开发者
遍历指南:JavaScript 中的 for、for-in、for-of 和 forEach 循环详解
遍历指南:JavaScript 中的 for、for-in、for-of 和 forEach 循环详解
21 3
|
14天前
|
缓存 JavaScript 前端开发
Vue.js 路由时用于提高应用程序性能
Vue.js 路由时用于提高应用程序性能