лучше — враппер, для кроссбраузерности
когда везде будет натив, тогда и на него можно будет перейти
меня приятно удивила быстрая натив-поддержка в ie8, так держать, глядишь когда-нибудь руки дойдут и до ускорения самого js
Не понимаю, чему тут удивляться если даже отточенная нативная поддержка этой функции работает в нем так же, как в опере полноценный eval и в разы медленнее, чем eval в вебките. В фаерфоксе вообще сделано для галочки, вообще никакого прироста нет. Зачем делали, не понятно.
JSON декодирует только данные, eval декодирует всё, в том числе исполняя скрипты, являющиеся потенциально вредоносными в том случае, если JSON-строка получена из ненадёжного источника.
… но я едва ли когда-нибудь буду обрабатывать JSON «вручную». Скорее, я воспользуюсь услугами какого-нибудь JS-фрэймворка. Например, JQuery. Так что если разработчики JQuery ещё не реализовали поддержку нативного JSON парсера, то я уверен, что они будут рады коммиту этого wrapper-а.
Чота я сомневаюсь в адекватности этого теста.
Смотря в каких условиях eval быстрее новой функции, если это делать в десять раз вложенной функции думается мне результаты будут иными.
var o;
function(){
var o;
function(){
…
function(){
var o = new Function(..)
или
var o = eval(...)
}
…
}
}
еще наверняка от длины самого JSON-а может зависить, потому как создание обекта-функции конечно долго но парсинг длинной строки js кода в eval с учетом всех видмых переменных и в замкниях… хотя конечно их в json не будет, но парсер то об этом не знает.
кстати врапер тут плохо написан отвратительно не проверяет стоку на предмет а похоже ли на json оно вообще. да еще туда сюда native метод JSON() перезаписывает — безсмысленно и безобразно.
Да, IE8 начинает радовать, осталось за малым, чтобы вытеснил другие версии IE :)
Интересно еще было бы увидеть результаты для Opera 10, хотя они наверно похожи на 9.64.
Как раз нет. Не смотря на то, что gmail работает в 10 альфе в разы быстрее, чем в 9.64, именно этот тест он проигрывает раза эдак в 3, как eval, так и function.
ээмм, результаты под большим сомнением. имхо нужно было на каждой итерации строить новую строку с жсоном на основании рандомных данных.
потому что возможно новые хром и сафари-4 (с яваскрипт движками с JIT) оптимизируют — видят строку в цикле и реально парсят её только 1 раз и запоминают результат.
также не написано был ли включен TraceMonkey для фф3.1, думаю если бы был включён получили бы ту же картину с эвалом что и у хрома/сафари-4.
Сравнение производительности браузеров при обработке JSON-строк