Как ускорить последовательные запросы JQuery load() к одному и тому же div

у меня две ссылки

<a href="page1.html">page 1</a>
<a href="page2.html">page 2</a>

<div id="content">&nbsp;</div>

1. Я использую JQuery для загрузки их в Div при нажатии на ссылки.

$('#content').load('page1.html');

2. При нажатии на вторую ссылку я очищаю div

$('#content').html('');

3. и загрузите второй файл;

$('#content').load('page2.html');

Проблема: на странице page1.html много изображений, даже после нажатия второй ссылки и опустошения блока #content браузер продолжает загружать изображения со страницы page1.html, что замедляет работу. запрос к page2.html значительно.

Как я могу остановить содержимое первой загрузки() от запросов к браузеру и ускорить ответ страницы?

Спасибо бесконечность!


person Mohammad    schedule 16.08.2009    source источник
comment
Могу ли я порекомендовать удалить «из кэширования страницы» в заголовке вопроса? Это немного неправильно :)   -  person Al.    schedule 17.08.2009


Ответы (3)


Я не думаю, что вы сможете использовать нагрузку. Думаю, вам нужно будет использовать функцию ajax.

Из документов:

$.ajax() возвращает XMLHttpRequest, который он создает. В большинстве случаев вам не понадобится этот объект для прямого управления, но он доступен, если вам нужно прервать запрос вручную.

Это больше кода, но не должно быть так плохо. Вам, вероятно, потребуется настроить этот код (он не проверен), но я думаю, что концепция будет работать.

var xhr;

$("a").click(function() { 
  if(xhr !== undefined) { xhr.abort(); } 
  xhr = $.ajax({
    url: this.href,
    success: function(data) {
       $("#content").html(data);
    }
  });
});
person Andy Gaskell    schedule 16.08.2009
comment
спасибо! Я думаю, я мог бы использовать функцию abort() {xhr.abort();}, чтобы отменить предыдущий запрос ajax при следующем событии onclick, да? - person Mohammad; 17.08.2009
comment
Это мое мнение - в чем я не уверен, так это в значении xhr после выполнения запроса. на самом деле я бы предположил, что это не неопределенно. Я собираюсь добавить в код xhr = undefined — вы можете убрать его, если он не нужен. - person Andy Gaskell; 17.08.2009
comment
вы правы, это не неопределенно. Могу я узнать цель вашей последней строки xhr = undefined; разве мы не должны оставить xhr как есть, чтобы при следующем щелчке ваш xhr.abort(); будет работать? - person Mohammad; 17.08.2009
comment
Я использовал ваш код без последней строки xhr = undefined, и это действительно ускорило отклик страницы, большое спасибо! мне все еще любопытно назначение линии, кстати :) - person Mohammad; 17.08.2009
comment
На самом деле большая часть кода xhr, вероятно, может пойти. Вы можете убрать оператор if и присвоить значение undefined. - person Andy Gaskell; 17.08.2009
comment
Я собираюсь сделать это ответом, но ‹a href=stackoverflow.com/questions/1285242/ заявление‹/a› о создании браузера перезагрузить страницу по второй ссылке вместо того, чтобы делать новый вызов ajax, является альтернативным решением. Если кто-то читает это, я думаю, что в зависимости от вашего дизайна и контента вы можете найти что-то из этого или оба полезными. - person Mohammad; 20.08.2009

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

person tvanfosson    schedule 16.08.2009
comment
Спасибо, это заставило меня гораздо яснее осознать природу этой проблемы :) - person Mohammad; 17.08.2009
comment
Я собираюсь посмотреть плагин jQuery для отложенной загрузки, похоже, у него есть своего рода система управления загрузкой изображений :) appelsiini.net/projects/lazyload - person Mohammad; 17.08.2009
comment
Я обновил вопрос, так как первоначальный вопрос был основан на неправильной логике. - person Mohammad; 17.08.2009

Можно ли отключить AJAX для этой страницы? Большинство известных мне браузеров перестают загружать страницу (page1), когда покидают ее. Весь смысл AJAX заключается в создании адаптивных веб-приложений. В этом случае AJAX кажется контрпродуктивным для достижения этой цели. Я предполагаю, что повторная загрузка всего контента на странице, кроме контента в #content div, будет быстрее, чем завершение загрузки page1.

person Imagist    schedule 17.08.2009
comment
Это правда, моя реализация Ajax очень «контрпродуктивна». Теперь я думаю, мне нужна новая реализация. Тот, который будет вводить новые изображения из page1.html в #content по мере их загрузки в кеш браузера и имеет способ преждевременной отмены процесса, если запрашивается page2. Таким образом, это будет не только быстрее, но и сэкономит пропускную способность и сделает загрузку страницы более приятной. Я буду искать новые идеи в плагине lazyload для JQuery. - person Mohammad; 17.08.2009
comment
Я думаю, вы упускаете смысл моего поста: я предложил не использовать JQuery для загрузки данных на страницу (это базовый метод AJAX), а вместо этого загружать совершенно новую страницу более традиционным способом. Это позволяет браузеру, а не вашему сценарию, обрабатывать отмену/не отправку запросов, и на основе нажатия некоторых страниц с высокой плотностью изображений, а затем нажатия ссылки до того, как они успеют загрузиться, это будет работать (в Firefox, Safari, IE8 и Chrome, все в Windows). - person Imagist; 17.08.2009
comment
Я понимаю это, хотя я пытаюсь создать включение на стороне клиента, которое заменит необходимость включения php. Я знаю, что это, вероятно, будет неправильно на уровне SEO. Хотя я очень полон решимости сделать его более отзывчивым. - person Mohammad; 18.08.2009