javascript for循环设法提高性能

2014-08-20  来源:本站原创  分类:javascript技巧  人气:6 

让你的for循环提升性能的写法,需要的朋友可以参考下。

一般在javascript里对数组进行遍历一般是使用for循环,像下面一样

var arr = [];
for(var i=0; i<arr.length; i++){
//loop
}

这种代码最大的问题,就在于每次循环时都要通过 .操作符获取 .length,增加了开销。那么我们可以这样改进。

复制代码 代码如下:

var arr = [];
for(var i=0, n=arr.length; i<n; i++){
//loop
}

这样子,先把 arr.length暂存到 n 变量中去。只在开始时获取一次。
但是这样就没问题了吗?貌似多定义了个无意义的变量 n 。好那继续改进

复制代码 代码如下:

var arr = [];
for(var i=arr.length-1; i > -1; i--){
//loop
}

好这样子,我们把这个循环顺序倒过来,就把那个n去掉了,而使用了一个常量-1。
如果应用场景,允许不使用 for 循环的话。我们可在使用 while代替
善于使用这两种循环语句,以提高javascript的效率。

复制代码 代码如下:

var arr = [];
var i=arr.length-1;
while(i--){
//loop arr[i]
}

或者

复制代码 代码如下:

var arr = [];
var i=arr.length-1;
do {
// loop arr[i]
}while(--i)

这样代码更简洁,效率更好,特别是如果允许先执行一次循环体的情况下,使用do while效果很明显。
唯一的问题是把 i 移到循环外了。

相关文章
  • javascript for循环设法提高性能 2014-08-20

    让你的for循环提升性能的写法,需要的朋友可以参考下. 一般在javascript里对数组进行遍历一般是使用for循环,像下面一样 var arr = []; for(var i=0; i<arr.length; i++){ //loop } 这种代码最大的问题,就在于每次循环时都要通过 .操作符获取 .length,增加了开销.那么我们可以这样改进. 复制代码 代码如下: var arr = []; for(var i=0, n=arr.length; i<n; i++){ //loop }

  • 修改Python的pyxmpp2中的主循环使其提高性能 2015-01-10

    这篇文章主要介绍了修改Python的pyxmpp2中的主循环使其提高性能,pyxmpp2是Python中使用需XMPP协议的一个常用工具,要的朋友可以参考下 引子 之前clubot使用的pyxmpp2的默认mainloop也就是一个poll的主循环,但是clubot上线后资源占用非常厉害,使用strace跟踪发现clubot在不停的poll,查看pyxmpp2代码发现pyxmpp2的poll在使用超时阻塞时使用最小超时时间,而最小超时时间一直是0,所以会变成一个没有超时的非阻塞poll很浪费资源

  • Javascript 加载和执行-性能提高篇 2014-04-01

    Javascript 在浏览器中的性能问题,可能是最重要的可用性问题;Js的阻塞性 浏览器用单一进程来处理UI进程和Js的执行;不管是内嵌的还是外链的,下载并立即执行 因为它有可能会修改页面 Js的阻塞性 Javascript 在浏览器中的性能问题,可能是最重要的可用性问题 Js的阻塞性 浏览器用单一进程来处理UI进程和Js的执行 不管是内嵌的还是外链的,下载并立即执行 因为它有可能会修改页面 页面生存周期的概念 瀑布图中看到了下载时间和executing time 在head中加入script

  • Java编程提高性能时需注意的地方 2015-03-26

    最近的机器内存又爆满了,出了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源和总结一些在java编程中尽可能做到的一些地方 - 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资源的并发访问 第二,控制实例的产生,以达到节约资源的目的 第三,

  • 如何用分表存储来提高性能 推荐 2014-03-28

    如何用分表存储来提高性能 ,需要的朋友可以参考下. 首先,童家旺介绍了他认为的什么是优化:第一.做任何事情最快的方法就是什么也不做. ▲支付宝资深数据库架构师童家旺 第二.不访问不必要的数据:使用B*Tree/hash等方法定位必要的数据.使用column Store或分表的方式将数据分开存储.使用Bloom filter算法排除空值查询. 第三.合理的利用硬件来提升访问效率:使用缓存消除对数据的重复访问.使用批量处理来减少磁盘的Seek操作.使用批量处理来减少网络的Round Trip.使用S

  • 你必须知道的JavaScript 中字符串连接的性能的一些问题 2014-05-22

    每种程序语言中都会涉及到字符窜连接,而这个小小的字符窜连接问题很可能会影响到系统的整体性能,本文主要探讨JavaScript中字符串连接的性能问题 而JavaScript的核心是ECMAScript .与其他语言类似,ECMAScript 的字符串是不可变的,即它们的值不能改变. 请考虑下面的代码: var str = "hello "; str += "world";实际上,这段代码在幕后执行的步骤如下: 1.创建存储 "hello " 的字符

  • 路由器CPU性能不容忽视提高性能第一位 2014-07-05

    路由器作为网络的接口设备,在整个架构中起着至关重要的作用,从结构上,路由器是一种专用的计算机系统,而路由器和PC机一样,有着中央处理单元CPU,而不同的路由器,其CPU一般也不相同,CPU也就是路由器的处理中心. 笔者发现到,以往不少路由器导购类文章中,不少地方强调CPU性能并不完全反映路由器性能,而是由路由器吞吐量.时延和路由计算能力等指标体现.因此,许多用户在选择及采购路由器时,都有意无意地忽略了路由器CPU性能,而注重产品的功能等方面的因素. 而事实上,在路由器,特别是新一代被普通应用的宽

  • 不断优化配置,逐步提高性能--我的一次性能测试经历 2012-03-09

    近日,合作伙伴想要针对我们的应用服务器做一个性能测试,测试的基础是伙伴原有的一个功能庞大而结构复杂的业务系统,目的是看应用服务器是否能够满足业务系统的需要,并对应用服务器做一个总体评价.由于硬件资源有限,硬件服务器的配置为:2颗四核的志强E5520,8G内存,250G硬盘,一台普通PC Server,操作系统使用的是Windows Server 2003 SP2. 在测试初期,客户端并发在100的时候,跑上不到1小时,服务器基本就没有反应了,此时查看应用服务器的JVM堆,都已经满满的了,而且非常

  • 为什么数据库读写分离可以提高性能 2014-02-26

    虽然知道处理大数据量时,数据库要做读写分离,但是为什么读写分离可以提高性能呢? 下面是搜来的一些解释,看看再说! 一 什么是读写分离 MySQL Proxy最强大的一项功能是实现"读写分离(Read/Write Splitting)".基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询.数据库复制被用来把事务性查询导致的变更同步到集群中 的从数据库. 当然,主服务器也可以提供查询服务.使用读写分离最大的作用无非是环境服务器压力.可以看下这张图: 二 读写分离的好处 1

  • Spread for Windows Forms高级主题(8)---通过暂停布局提高性能 2014-06-11

    一种改善控件性能的方法是,当需要对许多单元格进行变动时,可以先保持或挂起重画,直到所有的变动都完成时再进行.通过在对单元格修改和重算时保持重画(挂起布局),然后再恢复布局并重画所有单元格控件能够节省很多时间,并且仍然能为用户展现一个全新的界面. 布局对象 布局是一个对象,它保存了计算后的值(像单元格的宽度和高度,合并,以及视图),用来绘制控件的当前状态.这些值可能包括到底有多少视图,每一个视图左上方的单元格是什么,每一行及每一列有多大以及每一个视图有多少单元格是当前可见的,等等.使用布局对象的目

  • 循环写法的性能 2012-08-29

    循环作为程序语言的三大逻辑控制结构之一,在实际开发是经常会遇到的. 在JavaScript程序的循环结构使用上,我们经常会遇到这种应用.根据一个对象的长度进行循环并对对象每个元素进行处理 这个也是影响程序运行速度的其中之一 所以提高循环的性能 显得尤为重要 下面介绍一下大家 常常用到的循环的几种方式: 1:var a = [......] for(var i = 0 ; i < a.length; i ++){ alert(a[i]); }; 2:var a = [......] for(var

  • 再论Javascript下字符串连接的性能 2014-06-03

    这是个老话题了,之所以再拿出来说,是因为浏览器一直在进步,以前最好的方法现在不一定是最好的. 1 如何进行字符串连接? 首先让我们来回顾一下字符串连接的两种常用方法: 1.1 使用字符串连接运算符 常用的语言(如Java.C#.PHP等)都有字符串连接运算符,Javascript也不例外,代码示例: var str = ""; str = str + "a"; 1.2 使用数组 在常用的语言中,字符串连接运算的性能普遍不高,为此在C#中就专门提供了StringBui

  • JavaScript 解析Json字符串的性能比较分析代码 2014-11-28

    我们在使用AJAX来做服务器端和客户端交互的时候,一般的做法是让服务器端返回一段JSON字符串,然后在客户端把它解析成JavaScript对象. 解析时用到的方法一般是eval或者new function,而目前IE8和Firefox3.1又内置了原生的JSON对象(据说会有一定的性能提升).那我们在实际使用的时候怎样从这三种方法(因为性能问题,不考虑用javascript实现的解析)里面来选择呢?面对众多的浏览器,哪种方式的性能是最好的呢? 一.测试方法 1.首先指定测试次数及JSON字符串

  • JavaScript解析Json字符串的性能比较 2014-06-25

    我们在使用AJAX来做服务器端和客户端交互的时候,一般的做法是让服务器端返回一段JSON字符串,然后在客户端把它解析成JavaScript对象.解析时用到的方法一般是eval或者new function,而目前IE8和Firefox3.1又内置了原生的JSON对象(据说会有一定的性能提升).那我们在实际使用的时候怎样从这三种方法(因为性能问题,不考虑用javascript实现的解析)里面来选择呢?面对众多的浏览器,哪种方式的性能是最好的呢? 一.测试方法 1.首先指定测试次数及JSON字符串 1

  • 如何提升JavaScript运行速度(循环篇) 2013-04-16

    根据Nicholas的说法,有四种代码会拖慢脚本的运行,并最终导致脚本失控.分别是次数过多的同步循环.庞大的函数体.不恰当的递归和不合理的DOM调用.这篇着重讲第一个原因.最后给出了一个开发模式,替换传统的循环结构,可以完全避免脚本失控的状况发生. 在我 上一篇帖子(译文)中,谈到了各个浏览器究竟会在什么情况下弹出脚本失控提示,对于Internet Explorer来说,当浏览器执行了数量过多的语句时就会停止执行脚本,而其他的浏览器,则是持续执行脚本超过一定时间的时候就会给出提示.而我们要探 讨

  • javascript for循环从入门到偏门(效率优化+奇特用法) 2014-02-17

    for循环是非常基础的javascript知识,但由于JS太灵活了,所以可能出现一些让初学者崩溃的写法.我决定由浅入深的解释一下for循环,算是给比我还新手的新手解惑吧,少走弯路 一,for循环的基本写法 代码如下: //例一for(var i=1;i<=10;i++) { alert(i); } 这段代码太简单了,我都不好意思拿出手.代码的执行结果是依次弹出1到10,PS:在早期的IE如IE6中,你把10改成10000,就能让用户一直点确定什么也不能干了哈哈--不要说是我出的主意. 由于这是一

  • JavaScript For 循环 2014-09-04

    JavaScript中的循环用来将同一段代码执行指定的次数(或者当指定的条件为true时). JavaScript 循环 在编写代码时,你常常希望反复执行同一段代码.我们可以使用循环来完成这个功能,这样就用不着重复地写若干行相同的代码. JavaScript有两种不同种类的循环: for 将一段代码循环执行指定的次数 while 当指定的条件为true时循环执行代码 for 循环 在脚本的运行次数已确定的情况下使用for循环. 语法: for (var=开始值;var<=结束值;var=var+

  • JavaScript 数组循环引起的思考 2014-09-13

    Google array.js 程序中建议改进的代码.思考为什么i-- 到了 i为0时while循环结束了? 看代码,不说话: var i=arr.length; while(i--) { //写点啥? } 上面是Google array.js 程序中建议改进的代码.思考为什么i-- 到了 i为0时while循环结束了? 下面的代码与它等价: 复制代码 代码如下: var i=arr.length; for(;i--;) { //i--写在两个分号的中间,奇怪吗?不奇怪吗? } 震撼?没感觉?

  • JavaScript使用循环和分割来替换和删除元素实例 2014-10-26

    一个JavaScript实例,使用循环和分割来替换和删除元素,很简单,但很实用,建议初学者学习下 使用循环和分割来替换和删除元素,经测试很简单,但很实用,特别适合新手朋友 <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>使用循环和分割来替换和删除元素&l

  • ASP中使用FileSystemObject时提高性能的方法 2014-12-07

    在封装自己的FileSystemObject库的时候,测试的时候发现在文件夹或文件很多的时候,效率很低,显示一个文件夹需要2秒甚至更多,这让我很是奇怪,因为显示文件夹及文件信息的时候直接都是使用Folder及File对象的属性,这应该不会引起性能上的问题,但是事实却说明我的想法过于简单了. 按个测试了一下可能会是哪些属性引起的性能问题,在去掉Type也就是类型属性显示的时候,性能有了很大提高,之后的测试也证明了是Type属性的使用导致了性能问题. 仔细想了一下,Type引起性能低的原因应该是,引