У меня есть веб-сервис, написанный с использованием инфраструктуры Pyramid и интерфейс, написанный с использованием jQuery и jQuery Mobile. Я заметил, что некоторые вызовы Ajax занимают в 5-10 раз больше времени, чтобы завершить использование метода Ajax, непосредственно перейдя к URL-адресу в браузере.jQuery скорость ajax против скорости прямого доступа
Мой Ajax код выглядит следующим образом, укороченные для краткости:
$.ajax({
url:address,
dataType:'jsonp',
crossDomain: true,
success: function(data)
{
Parsing and other stuff that takes some time...
}});
Теперь я о 10 из них стрелять сразу, к различным URL-адресов, которые могут быть причиной медленной реакции, но если я огонь только один за раз, он все еще примерно в 3 раза медленнее. (30 мс против 90 мс). Я попытался использовать официантку в Pyramid, а также mod_wsgi (1 процесс, 4 потока) примерно с одним и тем же результатом.
Мой вопрос: где накладные расходы? Пирамида? Веб сервер? JQuery? jQM? .ajax()? Что я могу сделать, если что-нибудь уменьшит время запроса?
Редактирование: Переключение между JSON и JSONP малоэффективно, но дальнейшее тестирование показало, что время очень переменное (от 50 мс до 100 мс) от теста до испытания. Однако прямой доступ к службе через браузер всегда составляет 30 мс +/- 1 мс.
Я тестировал это с помощью Firebug, Chrome Web Dev tool и Fiddler с аналогичными результатами. При повторном копировании одного из запросов в Fiddler, я получаю аналогичный результат для перехода непосредственно к ресурсу в браузере.
Вот скринкап из Firebug run, где я целенаправленно пытаюсь сделать это медленнее, запустив 9 вызовов по 5 раз каждый: http://s16.postimage.org/n6t5z1ow5/ajax_Cap.png Надеюсь, что это может дать еще несколько советов. Серый «блокирует», фиолетовый «ждет».
Что вы видите в Firebug? Вы забыли пароль на любом этапе? Данные на вашей стороне, а не наши ... – gdoron
В Firebug и Chrome я вижу, что большую часть времени тратится «Ожидание» в случаях ajax и прямого доступа. – Lars
Это может быть своего рода накладные расходы, связанные с использованием 'jsonp'. Этот тест показывает, что он немного медленнее обычного 'json': http://jsperf.com/ajax-jsonp-vs-ajax-json –