Я застрял, используя библиотеку AJAX около 5 лет назад в этом проекте, и у него были некоторые проблемы с датами разбора в JSON. Я переписал его функцию разбора для использования одного регулярного выражения:
return eval('(' + (enableDateParsing ? text.replace(/"(?:\\)?\/Date\((.*?)\)(?:\\)?\/"/g, "new Date($1)") : text) + ')');
Это работает очень хорошо, но я подумал, что смогу ускориться, если бы использовал собственный разбор JSON в IE8 / chrome / ff, поэтому добавил этот бит:
if (typeof JSON !== 'undefined' && typeof JSON.parse !== 'undefined') {
var nativeJsonDateParseRegex = /\/Date\(.*?\)\//g;
return JSON.parse(text, function (key, value) {
if (AjaxPro.enableDateParsing && typeof value === 'string' && value.match(nativeJsonDateParseRegex))
{
value = new Date(parseInt(value.substr(6)));
}
return value;
});
}
else // revert to eval for ie6/ie7
Обратный вызов reviver будет выполняться один раз для каждого возвращаемого свойства JSON, поэтому он должен быть очень быстрым. Во время просмотра профиля он вызывался 170484 раза, но все еще работает довольно быстро (131.237 мс). Любые идеи о том, как сделать это быстрее, или это лучшее, что вы можете сделать без серьезных настроек?