> 웹 프론트엔드 > JS 튜토리얼 > eval과 new Function 중 무엇을 선택해야 할까요?_기초지식

eval과 new Function 중 무엇을 선택해야 할까요?_기초지식

WBOY
풀어 주다: 2016-05-16 17:36:53
원래의
1095명이 탐색했습니다.

고민할 필요 없이 바로 테스트 코드로 넘어가겠습니다

코드 복사 코드는 다음과 같습니다:

var aa = "{이름:'콜라',항목:[{나이:11},{나이:22},{나이:23},{나이:23}] }";
var now = new Date().getTime();
for (var i = 0; i < 100000; i ) {
var a = eval("(" aa ") ");

}
var now1 = new Date().getTime();
document.write("평가 시간:" (now1 - now) "
");


var now2 = new Date().getTime();
for (var i = 0; i < 100000; i ) {
var fn = new 함수 ("return" aa) ;
                     fn() />");


//테스트 후 FF 효과는 다음과 같습니다
// 테스트 결과 IE8의 효과는 다음과 같습니다.
// Eval Time은: 913
// New Function Time: 1037
//Chrome 테스트 결과는 다음과 같습니다

//평가 시간은 211
//신규 기능 시간은 251

//테스트 결과 Opera

//평가 시간: 384
//신규 기능 시간: 1024

테스트 결과는 다양한 브라우저 테스트에 대한 참조 데이터입니다. 제가 이상한 점은 왜 모든 브라우저가 eval을 더 빠르게 테스트해야 하는가입니다.


너무 조급해하지 마세요. 이러한 질문에 드디어 호기심에 또 다른 테스트를 시작했습니다. 이번에는 eval과 new Function을 각각 실행해 보겠습니다. 효과 보기

코드 복사

코드는 다음과 같습니다.var testEval = function(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('i 한번도 타지 않는 작은 당나귀가 있습니다...'); }");
                                                                          
document.write("
")
document.write ("평가 시간:" (now1 - 지금) "
")

var now2 = new Date().getTime()
for (var i = 0; i < 1000; i ) {
var now2 = new Date().getTime(); 타지 마세요...');");
}
var now3 = new Date( ).getTime();
document.write("새 함수 시간: " (now3 - now2) "
");


//테스트 후 FF 효과는 다음과 같습니다
//평가 시간: 495
//신규 기능 시간: 50

//IE8 테스트 결과는 다음과 같습니다
//평가 시간은 34
//새 함수 시간은 20

//Chrome 테스트 결과는 다음과 같습니다
//평가 시간은 7
//신규 기능 시간은 4

//테스트 결과 Opera
//평가 시간: 7
//새 기능 시간: 18

위의 결과 테스트는 FF에서 EVAL을 실행하는 데 매우 느립니다. 다른 브라우저도 크게 다르지 않습니다. 여기서 0을 추가하는 것이 무엇을 의미하는지 생각할 수도 있습니다. 추가하지 않으면 IE9 이하 버전에서는 오류가 발생합니다
하지만 0의 실제 의미를 어떻게 분석해야 할지 모르겠습니다. 이것을 추가하면 역겨운 문제가 해결될 수 있다는 것만 알고 있습니다. IE 비호환 문제
위의 두 밤을 보면 JSON 문자열 변환의 경우 eval이 확실히 빠르며, 동적 함수 분석의 경우 new Function이 더 빠르다는 것을 알 수 있습니다. 두 가지 장점이 있습니다. 그리고 단점은 eval 호환성이 별로 좋지 않다는 것입니다. 파싱에 오류가 있으면 다른 JS 스크립트가 실행되지 않을 수 있습니다.
하지만 후자는 그렇지 않습니다. 이 사람은 그렇지 않습니다. 너무 번거로운 것을 좋아하지 않기 때문에 그는 과감히 eval을 포기하고 대신 new Function을 사용합니다. 제가 정확하게 이해하지 못한 부분이 있으면 댓글을 환영합니다.

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