eval_javascript 기술에 대한 두 가지 성능 테스트 데이터 세트
@老赵의 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:
함수
!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);
}();
인라인 함수에서 eval("") 주석 처리
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("")을 호출합니다.
코드는 다음과 같습니다.
}
for (var i = 0; i < 2999999; i ) {
eval("");
func(i, i 1, i 2 ; >
코드 복사
코드는 다음과 같습니다.
함수 eval(){}
!function() {
var a = 1,
b = 2,
function func() {
var d = 2 ;
e = !c;
또한 eval이 아닌 함수 호출이며 또 다른 빈 함수입니다. >
코드 복사
코드는 다음과 같습니다.
function f(){}
!function () {
var a = 1,
b = 2,
function func() {
var d = 2
e; 🎜>f("");
}
코드 복사
코드는 다음과 같습니다.
var f = eval
!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2
}
(var i = 0; i < 2999999; i ) {
func(i, i 1, i 2)
코드 복사
코드는 다음과 같습니다.
!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 |
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의 "에 대한 간략한 이야기 평가의 영향"

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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

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