
Примечание переводчика: здесь представлен частичный адаптированный перевод, в связи с тем, что в оригинале были проведено обновление, которое я привел как основной результат.
Код и условия
Определим json-строку:
var count = 10000, o = null, i = 0, jsonString = '{"value":{"items": [{"x":1,"y":2,"z":3}, {"x":1,"y":2,"z":3}, {"x":1,"y":2,"z":3}, {"x":1,"y":2,"z":3}, {"x":1,"y":2,"z":3}]},"error":null}';
* This source code was highlighted with Source Code Highlighter.
Парсинг json-строки и запись результатов:
eval
var beginTime = new Date();
for ( i = 0; i < count; i++ ) {
o = eval( "(" + jsonString + ")" );
}
Console.output( "eval:" + ( new Date() - beginTime ) );
* This source code was highlighted with Source Code Highlighter.
new Function
var beginTime = new Date();
for ( i = 0; i < count; i++ ) {
o = new Function( "return " + jsonString )();
}
Console.output( "new Function:" + ( new Date() - beginTime ) );
* This source code was highlighted with Source Code Highlighter.
native
if ( typeof JSON !== "undefined" ) {
var beginTime = new Date();
for ( i = 0; i < count; i++ ) {
o = JSON.parse( jsonString ); }
Console.output( "native:" + ( new Date() - beginTime ) );
} else {
Console.output( "native:not support!" );
}
* This source code was highlighted with Source Code Highlighter.
wrapper
var __json = null;
if ( typeof JSON !== "undefined" ) {
__json = JSON;
}
var browser = Browser;
var JSON = {
parse: function( text ) {
if ( __json !== null ) {
return __json.parse( text );
}
if ( browser.gecko ) {
return new Function( "return " + text )();
}
return eval( "(" + text + ")" )
}
};
var beginTime = new Date();
for ( i = 0; i < count; i++ ) {
o = JSON.parse( jsonString ); }
Console.output( "wrapper:" + ( new Date() - beginTime ) );
* This source code was highlighted with Source Code Highlighter.
Браузеры
IE6, 7, 8; Firefox2, 3, 3.1; Chrome; Opera and Safari3, 4.
Тестовая система
T9300 CPU + 4G RAM + Windows2003, IE8 in Vista, IE7 на другой машине( 2G CPU + 2G RAM + Windows2003 )
Результаты тестирования
