@老赵의 Weibo 게시물 "eval로 생성된 코드가 정말 비효율적인가요? http://t.cn/zWTUBEo 인신 공격이 포함되어 있습니다. 마음에 들지 않으면 입력하지 마세요.
최근 트리거되었습니다." 평가에 대한 열띤 토론 토론 중에 리더 @Franky와 Hui Da @otakustay도 훌륭한 데이터 분석을 제공했습니다.
저도 비슷한 테스트를 해본 적이 있어서 따라해서 재미있게 참여했고, 참고용으로 두 세트의 데이터를 제공했습니다.
업데이트 1: @otakustay의 지침 덕분에 eval('') 호출 자체가 결과에 미치는 영향을 제거하기 위해 새로운 데이터 세트 A3 및 B3이 추가되었습니다. 그리고 모든 이전 데이터를 다시 테스트하십시오.
업데이트 2: 강력한 Paizhuan에 대한 Mo Da @貘吃荍香 덕분에 1) A4, B4, B5 평가 2)의 테스트 데이터가 추가되었습니다. A7,B7 평가.호출.
테스트 환경:
a. 머신: Intel(R) Corei7-2720 2.2Ghz(4코어 8스레드), 메모리 8GB
b OS: Windows 7 Enterprise SP1 64비트
c. 브라우저:
b.1 Google Chrome 21.0.1180.79m
b.2 Firefox 14.0.1
b.3 IE9.0.8112.16421
d 테스트 방법
d. 1 각 사용 사례는 5번 테스트되며 최소 시간이 소요됩니다.
d.2 테스트 중에 Firebug 또는 Chrome 콘솔이 켜지지 않았습니다. 이러한 도구를 켜면 시간이 두 배로 늘어나 유효 시간 내에 이 사용 사례의 결과를 얻기가 어렵습니다.
사용 사례 A1:
함수
A组测试结果:
A1 | A2 | A3 | A4 | A5 | A6 | A7 | A1 : A2 | A1 : A3 | A1 : A4 | A4 : A5 | |
Chrome | 1612ms | 8ms | 1244ms | 897ms | 7ms | 718ms | 680ms | 201.5 | 1.3 | 1.8 | 128.1 |
Firefox | 2468ms | 69ms | 732ms | 2928ms | 134ms | 5033ms | 4984ms | 35.8 | 3.4 | 0.8 | 21.9 |
IE | 1207ms | 23ms | 233ms | 1147ms | 37ms | 148ms | 224ms | 52.5 | 5.2 | 1.0 | 31.0 |
B1 | B2 | B3 | B4 | B5 | B6 | B7 | B1 : B3 | B1 : B2 | B1 : B4 | B4 : B5 | |
Chrome | 1569ms | 134ms | 1093ms | 1022ms | 173ms | 830ms | 916ms | 11.7 | 1.4 | 1.5 | 5.9 |
Firefox | 5334ms | 1017ms | 5503ms | 5280ms | 1171ms | 6797ms | 6883ms | 5.2 | 1.0 | 1.0 | 4.5 |
IE | 3933ms | 560ms | 680ms | 4118ms | 583ms | 745ms | 854ms | 7.0 | 5.8 | 1.0 | 111.3 |
결론(본문 중 은 CASE에 한함):
1. eval 자체에 대한 반복 호출은 시간이 많이 걸리며 심지어 빈 eval("")도 마찬가지입니다.
2. eval은 특정 환경과 코드에 따라 인라인 함수의 실행 효율성에 영향을 미칩니다.
3. 어떤 브라우저든 A그룹이든 B그룹이든 2번과 5번이 속도가 더 좋은 것을 알 수 있습니다. 이는 예제에서 인라인 함수의 eval이 어떻게 호출되든(빈 함수가 eval을 덮어쓰더라도) 여전히 운영 효율성에 큰 영향을 미친다는 것을 보여줍니다. 추론은 eval이 인라인 함수에서 발견되는 한, eval이 재정의된 빈 함수이더라도 외부에서 정의된 모든 변수 및 기타 콘텐츠가 Scope에서 초기화된다는 것입니다(블랙 박스 추론, 신뢰할 수 없음, 아마도 단지 추측). 현재 범위에 대한 변수입니다. 마찬가지로 eval은 인라인 기능에 대한 런타임 시 JS 엔진의 최적화 기능에 더 큰 영향을 미치고 실행 효율성을 감소시킵니다.
4. 여담으로 말하자면, IE10은 사용하지 않고 IE9을 사용하고 있지만 평가 처리 성능은 매우 좋습니다. IE는 항상 개발자들로부터 비난을 받아왔지만, 그 빠른 성장은 인정받을 가치가 있습니다.
이유에 대한 더 자세한 분석은 다음 기사의 설명이 매우 자세하므로 다시 반복하지 않습니다. 어서오세요 :) 특히 모다...
@老赵의 《eval로 생성된 코드는 정말 비효율적인가요? 》
@Franky의 "Popular Science on Eval"
@otakustay의 "에 대한 간략한 이야기 평가의 영향"