[백업][가리사니] javascript json.parse vs eval
javascript, json

이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.

과연 어떤것이 더 빠를까!!

var
	str1 =
		'[{"a":1},{"a":1},{"a":1},{"a":1},{"a":1},{"a":1}'+
		',{"a":1},{"a":1},{"a":1},{"a":1},{"a":1},{"a":1},'+
		'{"a":1},{"a":1},{"a":1},{"a":1},{"a":1},{"a":1}]',
	str2 = '328372',
	time,
	// 브라우저가 최적화로 생략할 것 같아서 방어.
	tmp1, tmp2, tmp3, tmp4;

console.log('str1');
time = new Date().getTime();
for (var i = 0 ; i < 100000 ; i++)
{
	tmp1 = JSON.parse(str1);
}
console.log('json : ' + (new Date().getTime() - time));
time = new Date().getTime();
for (var i = 0 ; i < 100000 ; i++)
{
	tmp2 = eval(str1);
}
console.log('eval : ' + (new Date().getTime() - time));

console.log('str2');
time = new Date().getTime();
for (var i = 0 ; i < 100000 ; i++)
{
	tmp3 = JSON.parse(str2);
}
console.log('json : ' + (new Date().getTime() - time));
time = new Date().getTime();
for (var i = 0 ; i < 100000 ; i++)
{
	tmp4 = eval(str2);
}
console.log('eval : ' + (new Date().getTime() - time));

console.log(tmp1, tmp2, tmp3, tmp4);

크롬 str1 json : 575 eval : 9749 str2 json : 21 eval : 5613 출력정상

IE 8 / 9 / 10 / 11

  • 11을 이용한 모드 즉, 실제 환경에선 다른 값이 나올 수 있음 str1 json : 763 / 598 / 678 / 620 eval : 300 / 260 / 256 / 243 str2 json : 128 / 107 / 99 / 87 eval : 126 / 165 / 98 / 108 출력정상

MS Edge str1 json : 430 eval : 200 str2 json : 129 eval : 138 출력정상

파이어폭스

  • 다운됨.. 스케일을 1/10 으로 줄임 str1 json : 66 * 10 eval : 65 * 10 str2 json : 22 * 10 eval : 9595 * 10 출력정상 (그대로하면 다운됨 1/10 스케일)

오페라 str1 json : 658 eval : 11699 str2 json : 32 eval : 7726 출력정상

결론

MS를 제외하고는 JSON의 속도가 압도적이다. 다만 JSON 파서 이용시 문법을 완벽하게 맞춰야한다.

// 정상코드
var a = eval('({a:1})');
// 오류!! json 규칙에서 이름은 "" 로 감싸야함.
var b = JSON.parse('{a:1}');
// 정상
var c = JSON.parse('{"a":1}');