JavaScript의 for 루프 작성은 실행 효율성에 어떤 영향을 미치나요?

伊谢尔伦
풀어 주다: 2017-07-19 14:40:57
원래의
2428명이 탐색했습니다.

for 루프 작성이 효율성에 미치는 영향

일반적으로 for 루프를 작성하는 방법에는 두 가지가 있습니다:

  1. 변수 선언 없이 작성: for(var i = 0;i<arr .length; i++){}for(var i = 0;i<arr.length;i++){}

  2. 写声明变量的写法:for(var i = 0,len = arr.length;i < len;i++){}

除了for循环还有forEach() ,也有文章说forEach()效率最高,推荐用forEach()写法,那么到底哪个效率高呢?做个测试来看看吧。

测试方案

总的测试方案如下:

  1. 做一个容纳4千万的测试数组变量。

  2. 分别用两种写法的for循环和foreach对这个测试变量进行遍历。

  3. 在同一台稳定机器上,进行10次测试,最后取平均值。

  4. 测试环境:CPU:Inter(R) Core i5-3210M,RAM:12GM,system:win10(x64)

测试流程

制作测试变量

先用while循环做个测试变量出来,这个很简单,具体如下:


var testArrs = [],
 i = 0;
while(i<40000000){
 testArrs.push(i);
 i++;
}
로그인 후 복사

编写相应测试函数

测量和执行时间的代码,我用的是console.time()console.timeEnd()来进行测试。

针对这个三个for循环,先做出三个函数出来,他们分别是

foreach循环测试:


function testForeach(testArrs){
 console.time(&#39;foreach&#39;);
 var newArrs = [];
 testArrs.forEach(function(i){
 newArrs.push(i);
 });
 console.timeEnd(&#39;foreach&#39;);
}
로그인 후 복사

没有声明变量的for循环:


function testNoDeclare(testArrs){
 console.time(&#39;no declare&#39;);
 var newArrs = [];
 for(var i = 0;i<testArrs.length;i++){
 newArrs.push(i);
 }
 console.timeEnd(&#39;no declare&#39;);
}
로그인 후 복사

有变量声明的写法


function testUseDeclare(testArrs){
 console.time(&#39;use declare&#39;);
 var newArrs = [];
 for(var i = 0,len = testArrs.length;i<len;i++){
 newArrs.push(i);
 }
 console.timeEnd(&#39;use declare&#39;);
}
로그인 후 복사

执行测试函数

执行测试函数这里很简单啦,就是调用函数就可以了


testForeach(testArrs);
testNoDeclare(testArrs);
testUseDeclare(testArrs);
로그인 후 복사

测试结果

经过10次测试,得到了以下结果

foreach不写声明写声明
2372.891ms672.530ms743.974ms
2431.821ms710.275ms805.676ms
2422.448ms729.287ms741.014ms
2330.894ms730.200ms755.390ms
2423.186ms703.255ms769.674ms
2379.167ms689.811ms741.040ms
2372.944ms712.103ms710.524ms
2316.005ms726.518ms726.522ms
2535.289ms733.826ms747.427ms
2560.925ms793.680ms817.098ms
平均值平均值平均值
2414.56ms720.15ms755.83ms

不知道结果有没有让你出乎意料呢?没想到最平常的写法效率最高,为什么?我也没想明白,谁知道就告诉我吧,但我估计写声明的写法是没有意义的。因为len = arr.length这个arr.length

변수 선언 방법 작성: for(var i = 0,len = arr.length;i < len;i++){}

for 루프 외에 forEach()도 있는데, forEach()를 사용하는 것이 가장 효율적이라는 글도 있습니다. forEach() 작성 방법 중 어느 것이 더 효율적인가요? 테스트를 해보고 살펴보겠습니다.

    테스트 계획
  1. 전체 테스트 계획은 다음과 같습니다.
  2. 4천만개를 담는 테스트 배열 변수를 만듭니다.

  3. 이 테스트 변수를 탐색하려면 for 루프와 foreach의 두 가지 작성 방법을 사용하세요.

동일한 안정적인 머신에서 10번의 테스트를 수행하고 최종적으로 평균을 구합니다.


테스트 환경: CPU: Inter(R) Core i5-3210M, RAM: 12GM, 시스템: win10 (x64)


테스트 프로세스

테스트 변수 만들기

먼저 잠시 사용하세요 loop 테스트 변수를 만듭니다. 자세한 내용은 다음과 같습니다.


for (语句 1; 语句 2; 语句 3)
{
被执行的代码块
}
로그인 후 복사

해당 테스트 함수를 작성합니다.🎜🎜🎜시간을 측정하고 실행하는 코드입니다. /code> 및 console.timeEnd()를 테스트용으로 사용하세요. 🎜🎜이 3개의 for 루프에 대해 먼저 3개의 함수를 만듭니다. 🎜🎜foreach 루프 테스트:🎜🎜🎜🎜
for(var i=0;i<10;i++){
console.log(i);
}
로그인 후 복사
🎜for 루프(변수 선언 없음):🎜🎜🎜🎜
for(var i=10;i--;){
console.log(i);
}
로그인 후 복사
🎜변수 선언 작성 방법 🎜🎜🎜🎜
for (var i = 0, rule; rule = rules[i++];) {
 //do something
}
로그인 후 복사
🎜 🎜테스트 함수 실행🎜🎜🎜테스트 함수 실행은 매우 간단합니다. 함수만 호출하면 됩니다🎜🎜🎜🎜
for(var i = 0;i < rules.length;i++){
 var rule = rules[i]
}
로그인 후 복사
🎜🎜테스트 결과🎜🎜🎜10번의 테스트 결과 다음과 같은 결과가 나왔습니다🎜foreach 문을 작성하지 마세요 문을 작성하세요 2372.891ms 672.530ms 743.974ms 2431.821ms 710.275ms 805.676ms 2422.448ms 729.287ms 741.014ms 2330.894ms 730.200ms 755.390ms 2423.186ms703.255 ms769.674ms 2379.167ms 689.811ms 741.040ms tr> 2372.944ms 712.103ms 710.524ms 2316.005ms 726.518ms 726.522ms 2535.289ms 733.826ms 747.427ms 2560.925ms 793.680ms 817.098ms 평균평균평균 2414.56ms 720.15ms 755.83ms 🎜결과가 놀라웠나요? 가장 일반적인 글쓰기 방식이 가장 효율적이라고는 생각하지 못했습니다. 왜일까요? 아직 파악을 못했는데 아시는 분 계시면 알려주세요. 그런데 진술문을 쓰는 방식이 의미가 없는 것 같아요. len = arr.lengtharr.length가 캐시되었을 수 있으므로 저장을 위해 len 변수를 선언하는 것은 의미가 없습니다. 🎜🎜🎜for 루프를 작성하는 특별한 방법🎜🎜🎜for 루프의 기본 구문은 다음과 같습니다.🎜🎜🎜🎜rrreee🎜🎜🎜문 1: 루프(코드 블록)가 시작되기 전에 실행🎜🎜🎜🎜문 2: 실행 루프(코드 블록) 조건 정의 🎜🎜🎜🎜 명령문 3: 루프(코드 블록)가 실행된 후 실행됨 🎜🎜🎜🎜🎜 for 루프를 사용하여 1~10을 출력하면 다음과 같이 작성할 수 있습니다. 🎜🎜 🎜🎜rrreee🎜 그런데! 위의 문법적 지시에 따르면 이렇게도 쓸 수 있어요🎜🎜🎜🎜rrreee🎜처음 읽었을 때 헷갈렸는데, 어떻게 이렇게 쓸 수 있지? 명령문 2에는 루프 조건이 포함되어 있으며 i-는 판단 조건입니다. 실제로 명령문 2에서 true가 반환되면 루프가 계속 실행됩니다. js에서는 0,null,undefine,false,'',""를 조건부 판단으로 사용하면 결과가 false가 되는데, 이는 i-가 0에 도달하면 false가 되어 루프가 종료된다는 의미입니다. 🎜🎜글 시작 부분의 코드로 돌아갑니다🎜🎜🎜🎜rrreee🎜이 규칙 = rule[i++]이 정의되지 않으면 루프가 종료됩니다. 그래서 이 코드를 일반적인 방법으로 작성하면 다음과 같을 것입니다. 🎜🎜🎜🎜rrreee🎜실제로는 판단과 할당을 함께 두고, 루프를 돌면서 값을 할당하는 것뿐입니다. 아주 간단하지 않나요? 🎜

위 내용은 JavaScript의 for 루프 작성은 실행 효율성에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿