2009-08-16 2 views
2

У меня есть две ссылкиКак ускорить последовательную нагрузку JQuery() запросы на один 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 значительно.

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

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

+0

Могу я рекомендовать удалить «из кеширования страницы» в заголовок вопроса? Это немного вводит в заблуждение :) –

ответ

2

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

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

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

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

var xhr; 

$("a").click(function() { 
    if(xhr !== undefined) { xhr.abort(); } 
    xhr = $.ajax({ 
    url: this.href, 
    success: function(data) { 
     $("#content").html(data); 
    } 
    }); 
}); 
+0

спасибо! Я мог бы использовать function abort() {xhr.abort();} , чтобы отменить предыдущий запрос ajax на следующем событии onclick, да? – Mohammad

+0

Это мое мышление - я не уверен в значении xhr после того, как запрос был завершен. на самом деле я предполагаю, что это не определено. Я собираюсь добавить xhr = undefined в код - вы можете снять его, если это не нужно. –

+0

Вы правы, это не определено. Могу ли я задать цель вашей последней строки «xhr = undefined;» не следует оставлять xhr как есть, так что при следующем нажатии xhr.abort(); будет работать? – Mohammad

1

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

+0

Спасибо, что заставило меня понять природу этой проблемы гораздо более ясно :) – Mohammad

+0

я буду смотреть в ленивой загрузки JQuery плагин, похоже, имеет систему контроля загрузки изображения сортов :) http://www.appelsiini.net/projects/lazyload – Mohammad

+0

Я обновил этот вопрос, так как первоначальный вопрос был основан на неверном логике. – Mohammad

0

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

+0

Это так, моя реализация Ajax очень «контрпродуктивна». Думаю, теперь мне нужна новая реализация. Один, который будет вводить новые изображения с page1.html в #content при загрузке в кеш браузеров и иметь возможность отменить процесс преждевременно, если запрашивается страница2. Таким образом, он будет не только быстрее, но и сэкономить пропускную способность и сделает загрузку страницы более приятной. Я буду смотреть плагин lazyload для JQuery для новых идей. – Mohammad

+0

Я думаю, что вам не хватает точки моего сообщения: мое предложение состояло в том, чтобы не использовать JQuery для загрузки данных на страницу (это базовая техника AJAX), но вместо этого загружать совершенно новую страницу более традиционным образом , Это позволяет браузеру, а не вашему сценарию, обрабатывать отмену/не отправлять запросы и на основе щелчка на некоторых страницах с высокой плотностью изображения, а затем щелкая ссылку, прежде чем у них будет возможность загрузить, она будет работать (в Firefox, Safari, IE8 и Chrome, все в Windows). – Imagist

+0

Я понимаю, что хотя я пытаюсь создать клиентскую часть, это заменит необходимость включения php. Я знаю, что, вероятно, это будет неправильно на уровне SEO. Хотя я очень настроен сделать его более отзывчивым. – Mohammad

Смежные вопросы