eval 및 new Function에 대해 어떤 것을 선택해야 합니까?
3394 단어 function
var aa = "{name:'cola',item:[{age:11},{age:22},{age:23},{age:23}]}";
var now = new Date().getTime();
for (var i = 0; i < 100000; i++) {
var a = eval("(" + aa + ")");
}
var now1 = new Date().getTime();
document.write("eval :" + (now1 - now) + "<br/>");
var now2 = new Date().getTime();
for (var i = 0; i < 100000; i++) {
var fn = new Function("return" + aa);
fn();
}
var now3 = new Date().getTime();
document.write("new Function :" + (now3 - now2) + "<br/>");
//테스트 결과 FF 효과는 다음과 같다//eval 시간: 979//new Function 시간: 1372
//테스트 결과 IE8 효과는 다음과 같다//eval 시간은:913//new Function 시간은:1037
//테스트 결과 Chrome 효과는 다음과 같다//eval 시간: 211//new Function 시간: 251
//테스트 결과 Opera//eval 시간: 384//new Function 시간: 1024
테스트 결과는 서로 다른 브라우저 테스트의 참고 데이터이다. 이상하게도 왜 모든 브라우저 테스트를 할 때eval이 빨리 해야 하는지 우리는 그를 채용해야 하지 않겠는가?
친, 우선 서두르지 말고 아래를 내려다보세요. 이런 의문을 가지고 호기심이 많은 저는 마침내 다른 테스트를 펼쳤습니다. 이때 저는 동적 함수로 eval과 new Function을 각각 집행하고 효과를 보도록 하겠습니다.
var testEval = function (obj) {
<SPAN style="COLOR: #ff0000"> return eval('0, ' + obj + '');</SPAN>
//return eval('( ' + obj + ')');
};
var testFun = function (obj) {
var fn = new Function("return " + obj);
fn();
};
var now = new Date().getTime();
for (var i = 0; i < 1000; i++) {
var fn = testEval("function test(){ document.write(' , .........'); }");
fn();
}
var now1 = new Date().getTime();
document.write("<br/>");
document.write("eval :" + (now1 - now) + "<br/>");
var now2 = new Date().getTime();
for (var i = 0; i < 1000; i++) {
testFun("document.write(' , .........');");
}
var now3 = new Date().getTime();
document.write("new Function :" + (now3 - now2) + "<br/>");
//테스트 결과 FF 효과는 다음과 같다//eval 시간:495//new Function 시간:50
//테스트 결과 IE8 효과는 다음과 같다//eval 시간: 34/new Function 시간: 20
//테스트 결과 Chrome 효과는 다음과 같습니다//eval 시간: 7//new Function 시간: 4
//테스트 결과 Opera//eval 시간: 7//new Function 시간: 18
상기 결과 테스트에서 만약에 동적 실행을 구축하여 eval이 FF에서 실행하도록 하는 것은 매우 느리고 다른 브라우저의 차이가 크지 않다면 우리는 리턴 eval('0,'+obj+')을 너무 많이 추궁할 필요가 없다.아마 여러분은 여기 0이 무슨 뜻이라고 생각하실 거예요. 0을 더하면 모든 브라우저를 겸용할 거예요. 안 넣으면 IE9 이하 버전이 틀릴 거예요. 그런데 진짜 0의 뜻을 어떻게 분석해야 할지 모르겠어요. 이걸 더하면 징그러운 IE가 겸용할 수 없다는 걸 알 뿐이에요. 위의 두 밤을 통해 JSON꼬치의 전환을 위해서라면 EVAl이 분명히 빠를 거예요.동적 함수 해석이라면 new Function이 빨라야 한다. 여기서 두 가지 우열을 말한다. 그리고 eval 호환성이 좋지 않다. 해석이 잘못되면 다른 JS 스크립트가 실행되지 않을 수도 있고 후자는 그렇지 않을 수도 있다. 그는 이 Function에 대해 내가 너무 번거로운 일을 좋아하지 않기 때문에 eval을 과감하게 포기하고 new Function으로 대체한다.이해가 잘 안 되는 부분이 있다면 지적해 주시고 벽돌을 두드리는 것을 환영합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.