Буферизация вывода и AJAX - PullRequest
       30

Буферизация вывода и AJAX

0 голосов
/ 13 ноября 2011

Когда пользователь нажимает кнопку на моем сайте, обновляется определенная часть страницы, но для отображения всего раздела требуется некоторое время.Можно ли отображать / выводить части раздела в режиме реального времени, а не ждать завершения всего раздела?Как бы я это сделал, если я отправляю его как ajax-запрос на HTML-контент?Спасибо

Ответы [ 3 ]

0 голосов
/ 13 ноября 2011

Как уже было сказано, кэширование ваших AJAX-запросов является хорошим вариантом. Кроме того, все, что я думаю, что вы можете сделать, чтобы ваше приложение выглядело быстрее, это показать пользователям индикатор выполнения при (повторной) загрузке контента с помощью AJAX.

0 голосов
/ 13 ноября 2011

Вы можете реализовать технику Pagelets. По сути, вы можете сделать это таким образом, как показано ниже:

index.html
  Ajax -> load content from PHP script which outputs the navigation bar
  Ajax -> load content from PHP script which outputs the body

И несколько разных Ajax-вызовов загружают каждую отдельную часть вашего сайта. Это имеет недостаток, заключающийся в увеличении количества HTTP-запросов, которые должен делать браузер пользователя.

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

Это хорошее чтение (проект Facebook под названием "BigPipe"): http://www.facebook.com/note.php?note_id=389414033919

0 голосов
/ 13 ноября 2011

Я бы порекомендовал установить cache: true в вашем вызове AJAX (при использовании jQuery), и в любом случае вы захотите установить заголовки ответа HTTP. Вот несколько примеров. Устанавливая заголовки cache-control и expires и т. Д., Ваши запросы AJAX - если они не изменяются - будут загружаться из кэша. Это резко ускорит процесс.

Быстрый пример:

if (!headers_sent()) {
    // seconds, minutes, hours, days
    $expires = 60*60*24*14;
    header('Pragma: public');
    header('Cache-Control: maxage=' . $expires);
    header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');
}

Примечание: это не будет работать с запросами POST, просто GET.

...