2012-03-04 3 views
0

Я использую $.getJSON, чтобы вытащить инвентарь объектов (100 предметов, а не большой набор), но он занимает 8-10 секунд для вызова XHR.

Хотел бы узнать, есть ли что-то, чего я не вижу или что-то, что я мог бы сделать, чтобы ускорить мою программу?

+2

Определите, какая часть медленно сначала; он делает первоначальный запрос, это серверное поколение, это время, необходимое для его загрузки клиенту, или это время для анализа данных на стороне клиента? –

+1

Пожалуйста, используйте некоторые инструменты профилирования JavaScript, такие как панель [Временная шкала] (http://www.webkit.org/blog/1091/more-web-inspector-updates/#timeline_panel)/Панель профилей в инструментах разработчика WebKit. – Gumbo

+0

Я предполагаю, что начальный запрос $ .getJSON (blah) –

ответ

2

На нем есть много вещей. Два основных узких мест, я думаю, эти

  • Серверный скрипт порождающая JSON может быть причиной проблемы или принимать длительное время процесса для генерации выходных данных.

  • У вас слишком много скриптов на странице, как эффект или слайдер, что getJSON, работает медленно

В большинстве случаев, первые из них является тихим убийцей. Чтобы проверить ваш скрипт, сделайте запрос getJSON на страницу, который просто отобразит строку JSON без какой-либо обработки. Что-то очень легкое, как это

{ "test" : "value" } 

В PHP

эхо '{ "тест": "значение"}';

И сделайте getJSON запрос на эту страницу и проверьте, работает ли скрипт быстро. В случае, если это быстро, проблема заключается в вашем скрипте сервера.

+0

Есть ли способ получить доступ к файлу JSON, выполнив запрос один раз и сохранив его в локальном объекте? –

+0

@AbhishekKumar, используя сеансы как '$ _SESSION ['backup']' это отличный способ для этого – Starx

+0

вы можете поделиться больше о $ _SESSION ['backup']. извините, что я новичок в js –

3

Есть много вещей, которые могут пойти не так, как надо в течение всего периода запроса.

Вот несколько примечательных областей, которые вы могли бы проверить на наличие узких мест, начиная с запроса на ответ.

  • Возможно ли использовать ваш браузер/систему/оборудование?

    Поскольку эта операция JavaScript, старые версии браузеров, такие как IE6, маломощные системы, такие как нетбуки и даже слабо настроенные системы, которые запускают слишком много приложений в определенный момент времени, могут пострадать от последствий.

  • Действительно ли браузер выполняет задание? Или это задерживалось?

    Занятый JavaScript является преступником здесь. JavaScript является однопоточным, и слишком много операций могут и будут бояться браузера и могут задерживать выполнение поставленных задач. Пример сценария, который может произойти, - это когда ваша страница содержит слишком много плагинов для JavaScript или содержит плохо кодированный код, некоторые из которых могут даже использовать синхронные операции.

  • Может быть, это PHP/JSP/[другой серверный язык]?

    Да, это может быть так. Например, PHP может быть потоковым для каждого запроса, но операция его кода является синхронной. Если строка PHP занимает слишком много времени, она включает часть этой задержки. Пока эта строка не завершится, сервер никогда не ответит.

  • Вы используете несколько/вложенных SQL-запросов?

    Дайвинг глубже на сервер, множественные и/или вложенные SQL-запросы, особенно для широко используемой операции, могут привести к дальнейшей задержке. Совет должен ограничивать ваш запрос только тем, что должно было быть выбрано, а не целыми записями. Если не удается избежать вложенных запросов, попробуйте другой метод получения этих данных.

  • Неоптимизированная функция вызывает

    Это относится как на стороне сервера и на стороне клиента скриптов. Чрезмерная операция также может быть причиной задержек. Определите код, который чрезмерно избыточен и объедините/укоротите их. Например, в JS простые операции присваивания условий могут выполняться с помощью тройных операций.

  • Зацикливание слишком много?

    Цикл слишком много также является одной из распространенных причин задержек. Одна ошибка в SQL заключается в том, чтобы извлекать все строки и считать их на PHP вместо использования встроенного COUNT() в SQL. Ошибка в два раза, вы возвращаете слишком много данных из SQL, а во-вторых, вы считаете/зацикливаете слишком много элементов в PHP.

  • Вы набираете номер или что?

    Пропускная способность важна, поэтому размер имеет значение. И поэтому, ограничивайте свои данные возвратом только на то, что было необходимо. Основная причина, по которой разработчики предпочитают JSON, это меньший размер по сравнению с XML, а также с размеченным содержимым. Чтобы добавить к этому, вы также можете сжать данные возврата с помощью сжатия gzip.

+0

Интересно, есть ли способ уменьшить размер файла JSON, прочитанного из $ .getJSON? –

+0

Насколько я знаю, из PHP, 'json_encode()' кодирует данные в JSON, который не является довольно напечатанным и, следовательно, уже компактным. Чтобы добавить к этому, сервер может сжать GZIP для передачи, то есть если браузер поддерживает получение содержимого GZIPped. – Joseph