웹 프론트엔드 JS 튜토리얼 eval_javascript 기술에 대한 두 가지 성능 테스트 데이터 세트

eval_javascript 기술에 대한 두 가지 성능 테스트 데이터 세트

May 16, 2016 pm 05:50 PM
eval 성능 테스트

@老赵의 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:
함수

코드 복사 에서 빈 eval("")을 인라인으로 호출합니다. 코드는 다음과 같습니다.

!function () {
var a = 1,
b = 2,
c =
function func() {
var d = 2 ;
e = !c;
eval("");
}
for (var i = 0; i < 2999999; i ) {
func(i, i 1, i 2);
}();

사용 사례 A2:
인라인 함수에서 eval("") 주석 처리

코드 복사 코드는 다음과 같습니다.
!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2;e = !c;
//eval(""); 🎜>for (var i = 0; i < 2999999 ; i ) {
func(i, i 1, i 2)
}
}(); >사용 사례 A3:
제외 eval("" ) 호출 자체의 영향으로 외부 함수에서 eval("")을 호출합니다.



코드 복사


코드는 다음과 같습니다.
!function() { var a = 1, b = 2, c = true ; function func() {
var d = 2;
e = !c
}
for (var i = 0; i < 2999999; i ) {
eval("");
func(i, i 1, i 2 ; >
코드 복사


코드는 다음과 같습니다.


함수 eval(){}
!function() {
var a = 1,
b = 2,
c = true
function func() {
var d = 2 ;
e = !c;
사용 사례 A5:

또한 eval이 아닌 함수 호출이며 또 다른 빈 함수입니다. >



코드 복사


코드는 다음과 같습니다.


function f(){}
!function () {
var a = 1,
b = 2,
c = true
function func() {
var d = 2
e; 🎜>f("");
}
for (var i = 0; i < 2999999; i ) { func(i, i 1, i 2) }; >}(); 사용 사례 A6: 다른 변수 f에 eval을 할당한 다음 f를 호출합니다.



코드 복사


코드는 다음과 같습니다.


var f = eval
!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2
e = !c
}
(var i = 0; i < 2999999; i ) {
func(i, i 1, i 2)
} }() 사용 사례 A7: eval.call을 사용하여



코드 복사


코드는 다음과 같습니다.


!function() {
var a = 1,
b = 2,
c = true
function func() {
var d = 2; >e = !c;
eval.call(null, '');
}
for (var i = 0; i < 2999999; i ) {
func(i, i 1 , i 2);
}
}();

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:
复制代码 代码如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval("");
}();
}();
}

用例B2:
复制代码 代码如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
//eval("");
}();
}();
}

用例B3:
复制代码 代码如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
}();
}();
eval("");
}

用例B4:
复制代码 代码如下:

var eval = function(){}
for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval("");
}();
}();
}

用例B5:
复制代码 代码如下:

var f = function(){}
for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
f("");
}();
}();
}

用例B6:
复制代码 代码如下:

var f = eval;
for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
f("");
}();
}();
}

用例B7:
复制代码 代码如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval.call(null, '');
}();
}();
}

B组测试结果:
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"에 대한 간략한 이야기 평가의 영향"

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

컨테이너 성능 테스트 및 스트레스 테스트에 Docker를 사용하는 방법 컨테이너 성능 테스트 및 스트레스 테스트에 Docker를 사용하는 방법 Nov 07, 2023 pm 04:53 PM

컨테이너의 성능 테스트 및 스트레스 테스트를 위해 Docker를 사용하려면 특정 코드 예제가 필요합니다. 소개 컨테이너 가상화 기술의 등장으로 애플리케이션의 배포 및 운영이 더욱 유연하고 효율적으로 이루어졌으며 가장 널리 사용되는 도구 중 하나는 Docker입니다. 경량 컨테이너화 플랫폼인 Docker는 애플리케이션을 패키징하고 배포하고 실행하는 편리한 방법을 제공하지만, 컨테이너의 성능, 특히 고부하 조건에서의 스트레스 테스트를 어떻게 테스트하고 평가하는지에 대해서는 많은 사람들이 우려하는 질문입니다. 이 글에서 소개할

파이썬에서 eval은 무엇을 의미합니까? 파이썬에서 eval은 무엇을 의미합니까? May 22, 2019 pm 03:18 PM

eval은 "평가"를 의미하며 문자열 표현식을 실행하고 표현식의 계산 결과를 반환하는 데 사용되는 Python의 내장 함수입니다. 즉, 변수를 할당할 때 등호 오른쪽의 표현은 다음과 같습니다. 문자열 형식으로 작성되며, 반환 값은 이 표현식의 결과입니다. 구문 "eval(표현식[, 전역[, 지역]])".

Go 언어의 성능 테스트와 단위 테스트의 차이점 Go 언어의 성능 테스트와 단위 테스트의 차이점 May 08, 2024 pm 03:09 PM

성능 테스트는 다양한 로드 하에서 애플리케이션의 성능을 평가하는 반면, 단위 테스트는 단일 코드 단위의 정확성을 확인합니다. 성능 테스트는 응답 시간과 처리량 측정에 중점을 두는 반면, 단위 테스트는 기능 출력 및 코드 적용 범위에 중점을 둡니다. 성능 테스트는 높은 로드 및 동시성으로 실제 환경을 시뮬레이션하는 반면, 단위 테스트는 낮은 로드 및 직렬 조건에서 실행됩니다. 성능 테스트의 목표는 성능 병목 현상을 식별하고 애플리케이션을 최적화하는 것이며, 단위 테스트의 목표는 코드 정확성과 견고성을 보장하는 것입니다.

Nginx 로드 밸런싱 성능 테스트 및 튜닝 실습 Nginx 로드 밸런싱 성능 테스트 및 튜닝 실습 Oct 15, 2023 pm 12:15 PM

Nginx 로드 밸런싱 성능 테스트 및 튜닝 사례 개요: 고성능 역방향 프록시 서버인 Nginx는 로드 밸런싱 애플리케이션 시나리오에서 자주 사용됩니다. 이 기사에서는 Nginx 로드 밸런싱의 성능 테스트를 수행하고 튜닝 사례를 통해 성능을 향상시키는 방법을 소개합니다. 성능 테스트 준비: 성능 테스트를 수행하기 전에 좋은 성능을 가진 하나 이상의 서버를 준비하고 Nginx를 설치하고 역방향 프록시 및 로드 밸런싱을 구성해야 합니다. 테스트 도구 선택: 실제 부하 조건을 시뮬레이션하기 위해 공통을 사용할 수 있습니다.

MySQL 기본 최적화 구현 방법: 성능 테스트 및 튜닝 도구의 고급 사용 및 분석 MySQL 기본 최적화 구현 방법: 성능 테스트 및 튜닝 도구의 고급 사용 및 분석 Nov 08, 2023 pm 03:27 PM

MySQL의 기본 최적화를 달성하는 방법: 성능 테스트 및 조정 도구의 고급 사용 및 분석 소개 MySQL은 다양한 웹 애플리케이션 및 대규모 소프트웨어 시스템에서 널리 사용되는 일반적으로 사용되는 관계형 데이터베이스 관리 시스템입니다. 시스템의 운영 효율성과 성능을 보장하려면 MySQL의 기본 최적화를 수행해야 합니다. 이 문서에서는 고급 사용 및 분석을 위해 성능 테스트 및 조정 도구를 사용하는 방법을 설명하고 특정 코드 예제를 제공합니다. 1. 성능 테스트 도구의 선택 및 사용 성능 테스트 도구는 시스템 성능과 병목 현상을 평가하는 데 중요합니다.

Red Magic 9 Pro 심층 성능 테스트: 성능 경쟁을 조기 종료 Red Magic 9 Pro 심층 성능 테스트: 성능 경쟁을 조기 종료 Feb 03, 2024 pm 04:35 PM

점점 균질화되는 휴대폰 시장에서 레드 매직은 참으로 독특하고 특이한 존재라고 할 수 있습니다. Qualcomm Snapdragon의 향상된 에너지 소비율로 인해 전체 게임용 휴대폰 카테고리가 어려움을 겪고 있는 동안 Red Devils는 항상 직선형 본체와 적극적인 열 방출을 통해 자체 제품 컨셉을 고수해 왔으며 그들이 원하는 것은 성능 출시뿐입니다. . 업계 전체의 주력 휴대폰이 이미징 모듈의 지속적인 축적으로 인해 점점 더 침체되고 있는 상황에서 Red Devils는 실제로 평면 후면 카메라 디자인을 제공합니다. 이는 과거 휴대폰 업계 전체에서 첫 번째 트렌드일 수도 있습니다. 시장에 나와 있는 유일한 제품입니다. (출처: Red Devils) 가장 중요한 것은 네티즌 의견의 대가로서 Red Devils가 여러 주요 제조업체의 주력 하위 브랜드를 약 3,000 위안에 판매하는 데 실제로 성공했다는 것입니다.

Win에서 PHP에서 평가를 비활성화하는 방법 Win에서 PHP에서 평가를 비활성화하는 방법 Oct 31, 2022 am 09:33 AM

win에서 PHP에서 평가를 비활성화하는 방법: 1. "PHP_diseval_extension"을 다운로드합니다. 2. 현재 서버에서 사용되는 PHP를 찾습니다. 3. PHP 구성 파일을 엽니다. 4. "extension=diseval.so" 코드를 추가합니다. 서비스를 다시 시작하십시오.

Vue 개발 조언: 성능 테스트 및 성능 튜닝을 수행하는 방법 Vue 개발 조언: 성능 테스트 및 성능 튜닝을 수행하는 방법 Nov 22, 2023 pm 12:01 PM

Vue 개발에서 성능은 매우 중요한 문제입니다. 뛰어난 성능을 갖춘 애플리케이션을 개발할 수 있다면 사용자 경험과 시장 경쟁력이 크게 향상될 것입니다. 이를 달성하려면 성능 테스트와 성능 튜닝을 수행해야 합니다. 이 문서에서는 성능 테스트 및 성능 튜닝을 수행하는 방법을 소개합니다. 1. 성능 테스트 성능 테스트는 애플리케이션 성능을 향상시키는 핵심입니다. 애플리케이션에서 성능 문제를 일으키는 요인을 탐지하고 최적화할 수 있습니다. 성능 테스트를 수행하기 위해 다음 방법을 채택할 수 있습니다. 1. 벤치마크 테스트 벤치마크 테스트는

See all articles