`
jindw
  • 浏览: 508523 次
  • 性别: Icon_minigender_1
  • 来自: 初到北京
社区版块
存档分类
最新评论

javascript 性能测试系列:循环反转的效果

阅读更多
循环反转示例:
  for(var i = 0;i<data.length;i++){
    //.
  }
  //倒转后代码
  for(var i = data.length-1;i>=0;i--){
    //.
  }


这类优化的作用是明显的,但是具体有多大作用呢?

用一个长度为100 000 的数组测试一下:
515/313
500/313
516/312
516/328
516/328

可见,循环反转后,只需要原来3/5的时间.
但是,这种东西到底有多大价值?FF上200次循环仅需要1毫秒的时间.所以,个人认为,只要循环的内容不是太长,使用不算非常频繁,那么没有太大必要.
加入循环的长度需要通过函数取得,且不变,那么,反转的效率还是可观的,在IE上,函数调用消耗是普通操作的十多倍.

测试代码:
var incTime = 0;
var decTime = 0;
var inc = 0;
var data = new Array(10*10000);
//while(inc++<50)
{
  var t1 = new Date();
  for(var i = 0;i<data.length;i++){
  }
  var t2 = new Date();
  for(var i = data.length-1;i>=0;i--){
  }
  var t3 = new Date();
  incTime+=(t2-t1);
  decTime+=(t3-t2);
}

prompt("incTime/decTime",incTime +'/'+decTime)

分享到:
评论
1 楼 hax 2007-07-06  
我以前测试的结果是,反转是完全没有必要的。另外我也测过i--和--i和i-=1之类的差异。结论是都没有必要。

因为只要在循环体有几次函数调用,循环++和--的差异,马上可以忽略不计。

为此,我把我曾经辛辛苦苦改的所有--i都辛辛苦苦的改回了i++

至于说“加入循环的长度需要通过函数取得,且不变,那么,反转的效率还是可观的”,这个比较是不公平的,因为正向也可以记录length到变量里(for (var size=data.length, i=0; i<size; i++)...)。否则两者的语义发生了变化。例如考虑在childNodes里循环,然后删除每个子节点的例子(当然这个例子实际上无需用for来循环,应该直接while(parent.hasChildNode)...)。

相关推荐

    Javascript数组函数大全

    - **性能测试**:对于大规模数据处理,建议先进行性能测试,以确保选择最适合当前需求的数据结构。 综上所述,数组提供了丰富的操作方法,能够满足大部分开发需求。同时,在需要高效查找的情况下,考虑使用对象可能...

    Javascript常见面试题(1).pdf

    JavaScript是一种广泛使用的编程语言,尤其在前端开发中占据着核心地位。面试中,掌握JavaScript的基础概念和特性至关重要。以下是对给定题目中涉及的一些关键知识点的详细解释: 1. **堆和栈的理解**: - **栈...

    javascript-arrays:javascript数组及其功能的参考存储库,并带有示例

    JavaScript数组是编程中不可或缺的一部分,尤其在Web开发中,它被广泛用于处理和存储一系列数据。这个名为"javascript-arrays"的参考存储库是专为理解JavaScript数组及其各种功能而设计的,它提供了丰富的示例,帮助...

    CSS3 过滤器实现的背景视频颜色变换效果源码.zip

    可能需要测试并调整过滤器参数,或者在必要时采用其他技术,如JavaScript库或WebGL。 总的来说,这个压缩包中的源码示例展示了如何利用CSS3过滤器创造动态的背景视频颜色变换效果,为网页增添互动性和视觉吸引力。...

    js中三种遍历数组的效率.txt

    - **性能测试**:每种方法都被赋予了一个按钮,当点击对应的按钮时,会调用相应的函数,并显示该函数执行所需的时间。这种方式有助于直观地比较不同方法之间的性能差异。 - **实际应用场景**:在实际开发中,当处理...

    leetcode-solutions:用JavaScript实现的LeetCode问题的演练解决方案

    5. **字符串处理**:JavaScript字符串处理也是LeetCode中常见的考点,如反转字符串、检查回文、替换空格等。字符串的split、join、indexOf、substring等方法经常被用到。 6. **对象和映射**:JavaScript的对象可以...

    2022 Baidu 百度 后端-研发B卷笔试题

    - **应用场景**:在脚本编写或自动化测试中生成测试数据。 - **使用方法**:了解seq命令的基本用法及参数选项。 #### 3. 最小生成树 - **理论基础**:理解图论中的基本概念,如边、顶点、权重等。 - **算法实现**:...

    javascript-palindrome-number

    在项目"javascript-palindrome-number-master"中,可能包含了对该问题的进一步讨论、示例代码或者测试用例,帮助开发者更好地理解和应用回文数字的判断逻辑。通过深入研究该项目,你可以学习到更多关于JavaScript...

    java相关学习资料

    从给定的文件信息中,我们可以提炼出一系列与Java学习相关的深入知识点,这些知识点涵盖了从基础到高级的各个层面,适合不同阶段的学习者。以下是对这些知识点的详细解析: ### Java基础与进阶 #### 1. Java核心...

    面试经验总结-(附)面试题1

    在JavaScript前端面试中,一些常见的知识点常常被用来测试候选人的技术实力。以下是对这些知识点的详细解释: 1. **数组去重**: 在JavaScript中,数组去重可以通过多种方式实现,例如`Set`对象、`filter()`方法、...

    重构Javascript代码示例(重构前后对比)

    重构的目标通常是提高代码的可读性、可维护性和性能。JavaScript作为一种广泛使用的脚本语言,在前端开发中扮演着重要角色。随着Web应用的日益复杂,对JavaScript代码进行重构成为了提高开发效率和项目质量的必要...

    Java 亚信上海 面试题

    - 抽象工厂模式更进一步,提供创建一系列相关或依赖对象的接口。 - 主要用于避免创建对象时的条件判断。 --- ##### 4. 问答题 **熟悉框架及其详细介绍:** - **Spring框架**: - 基于Java的企业级应用开发...

    东南融通面试题 内部

    - JavaScript是前端开发的核心语言之一,用于实现网页的动态效果。 - 前端框架如React、Vue等大量使用JavaScript。 6. **Struts 2.0与Hibernate框架的关系:** - Struts 2.0是一个MVC框架,用于处理HTTP请求,...

    java面试题综合

    58. 软件开发过程:需求分析、设计、编码、测试、维护。 59. J2EE开发模式:MVC、三层架构、微服务等,看法因项目需求而异。 60. PKI系统:公钥基础设施,包括证书、CA、密钥管理等。 61. s:url与s:action的区别...

    Java框架面试题总结

    IoC即Inversion of Control,控制反转,是一种设计思想,使得对象的创建过程从对象本身转移到外部容器上。Spring框架通过IoC容器管理对象的生命周期和依赖关系。 **2. 依赖注入的三种实现形式** - **构造器注入**...

    java学习体系

    12. 性能优化和事务管理:了解SQL优化、Java应用性能调优、异常处理、依赖注入、控制反转以及事务管理等相关知识,是成为一名专业Java开发者的重要环节。 13. 前端技术:虽然Java主要用于后端开发,但对于全栈开发...

    c#100例+

    依赖注入和控制反转原则能帮助提高代码的灵活性和可测试性。 "MVC"(Model-View-Controller)是Web应用开发中常见的设计模式,用于分离业务逻辑、数据模型和用户界面。在C#中,ASP.NET MVC框架提供了一种高效的方式...

    JAVA进阶架构思维导图.rar

    13. **性能优化与监控**: 学习如何进行性能测试(如JMeter),理解系统瓶颈,掌握日志分析、监控工具(如Prometheus、Grafana)。 14. **安全性**: 学习网络安全、身份验证、授权、加密算法等,了解Spring Security...

    syn-leetcode:leetcode的积累

    在编程领域,LeetCode是一个备受推崇的在线平台,它提供了一系列的算法题目,旨在帮助程序员提升编程技能、算法理解和问题解决能力。"syn-leetcode"项目是针对LeetCode平台的一个个人学习与积累项目,其目标是同步并...

    solve-hackerrank

    1. **JavaScript 基础**:包括变量、数据类型(如字符串、数字、布尔、对象、数组)、运算符、流程控制(条件语句、循环)、函数等。 2. **数组操作**:在 HackerRank 中,数组操作是常见的问题,如数组遍历、查找...

Global site tag (gtag.js) - Google Analytics