Как стать автором
Обновить

Комментарии 31

Жесть — такой разброс. Я так понимаю, лучше eval получается. Спасибо статью, реально полезно.
лучше — враппер, для кроссбраузерности
когда везде будет натив, тогда и на него можно будет перейти
меня приятно удивила быстрая натив-поддержка в ie8, так держать, глядишь когда-нибудь руки дойдут и до ускорения самого js
Ой, поясните пожалуйста насчет кроссбраузерности. А то хочется чтоб не только работало, но и работало хорошо :)
в перспективе, wrapper будет использовать нативный код, я про это хотел сказать
НЛО прилетело и опубликовало эту надпись здесь
Не понимаю, чему тут удивляться если даже отточенная нативная поддержка этой функции работает в нем так же, как в опере полноценный eval и в разы медленнее, чем eval в вебките. В фаерфоксе вообще сделано для галочки, вообще никакого прироста нет. Зачем делали, не понятно.
Вы правда не понимаете, зачем это нужно?
Если только для ускорения, то, как уже сказал, я не впечатлен. Если Это дает еще какие-то преимущества, думаю самое время их огласить.
Это не для ускорения, это для безопасности.
JSON декодирует только данные, eval декодирует всё, в том числе исполняя скрипты, являющиеся потенциально вредоносными в том случае, если JSON-строка получена из ненадёжного источника.
Спасибо за статью. Познавательно.

… но я едва ли когда-нибудь буду обрабатывать JSON «вручную». Скорее, я воспользуюсь услугами какого-нибудь JS-фрэймворка. Например, JQuery. Так что если разработчики JQuery ещё не реализовали поддержку нативного JSON парсера, то я уверен, что они будут рады коммиту этого wrapper-а.
учитывая что new function только в FF 2 и 3 чуть чуть быстрее, его вообще можно не использовать. или есть какие то другие причины использовать?
Чота я сомневаюсь в адекватности этого теста.
Смотря в каких условиях eval быстрее новой функции, если это делать в десять раз вложенной функции думается мне результаты будут иными.
имеете в виду 10 раз вложенной так:
new function() {
new function() {
new function() {
}
}
}
ну между ними еще какие то дейтсвия. так?
var o;
function(){
var o;
function(){

function(){
var o = new Function(..)
или
var o = eval(...)
}

}
}
еще наверняка от длины самого JSON-а может зависить, потому как создание обекта-функции конечно долго но парсинг длинной строки js кода в eval с учетом всех видмых переменных и в замкниях… хотя конечно их в json не будет, но парсер то об этом не знает.
кстати врапер тут плохо написан отвратительно не проверяет стоку на предмет а похоже ли на json оно вообще. да еще туда сюда native метод JSON() перезаписывает — безсмысленно и безобразно.
ничего удивительного
сафари 4 удивил… :)
IE6 vs FF2/IE7 удивил))
Да, IE8 начинает радовать, осталось за малым, чтобы вытеснил другие версии IE :)
Интересно еще было бы увидеть результаты для Opera 10, хотя они наверно похожи на 9.64.
Как раз нет. Не смотря на то, что gmail работает в 10 альфе в разы быстрее, чем в 9.64, именно этот тест он проигрывает раза эдак в 3, как eval, так и function.
Жаль. Надеюсь исправятся :)
Эти — исправятся.
Рано десятку еще сравнивать с другими, она пока что в стадии проработки движка. Бету уже можно будет потестировать.
Еще интереснее было бы увидеть результаты для Opera 9.2x, для России это (к сожалению?) пока более актуально :(
А тесты проводили только 1 раз или несколько и брали усередненное значение?
в оригинале не сказано, но там есть готовый код для тестирования, можно попробовать самому
Зашибись вы переводили, а в код не глянули? там очевидно, что count = 10000
спасибо что обратили внимание, я код не запускал, только форматировал
ээмм, результаты под большим сомнением. имхо нужно было на каждой итерации строить новую строку с жсоном на основании рандомных данных.

потому что возможно новые хром и сафари-4 (с яваскрипт движками с JIT) оптимизируют — видят строку в цикле и реально парсят её только 1 раз и запоминают результат.

также не написано был ли включен TraceMonkey для фф3.1, думаю если бы был включён получили бы ту же картину с эвалом что и у хрома/сафари-4.
Жалко, в этой статье нет сравнению с протоколом JSONP (через тэг script).

А ведь тэг script часто считается быстрее, чем eval или JSON.parse.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации