+  HandyCache форум
|-+  Главная категория» Новые предложения» Загружать только необходимую часть страницы
Имя пользователя:
Пароль:
Страниц: [1]   Вниз
  Отправить эту тему    Печать  
Автор Тема: Загружать только необходимую часть страницы  (Прочитано 7126 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« : 02 ноября 2007, 01:51:34 »

Частенько бывает, что страница имеет неизменную (или несущественно для нас изменяющуюся, или вообще нам ненужную) часть (например, шапка/хвост), и обновляемую (актуальную для нас) часть.
Появилась мысль, что в перспективе (в т.ч. при реализации хранения метаданных и парсинга HTML) можно неплохо экономить, запрашивая в интернете лишь нужный нам кусок страницы с помощью поля заголовка Range. Это должна быть сайто-ориентированная фича. Не для всех сайтов она сможет работать. Но для тех из числа часто посещаемых, которые поддерживают такой запрос, экономия будет существенной.



Это возможно реализовать с помощью расширения.
« Последнее редактирование: 17 октября 2009, 13:15:26 от DenZzz » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #1 : 02 ноября 2007, 09:30:19 »

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

ИМХО, редко это будет работать! Только уйма времени уйдет на реализацию, тестирование и настройку...

Чтобы работал "Range", надо знать конечный размер "Content-Length" страницы. Если страница динамическая, то "Content-Length" нам сервер не скажет и "Range" работать не будет!

Много ты знаешь сайтов, где страницы передаются с "Content-Length"?
Обычно используется chunked-метод или просто "Connection: Close" при окончании, где "Range" бесполезен!

Кроме того, корректно вырезать изменяющуюся часть и вставить вместо нее другой кусок и при этом не нарушить синтаксис HTML практически нереально, если речь идет о динамических страницах, т.к. изменяющиеся куски будут каждый раз иметь разный размер - как ты предлагаешь определять их длину без полной закачки?! А нарушение синтаксиса приведет к "кривости" страницы или к полной невозможности ее отображения браузером!


Более полезным видится реализация докачки статичных файлов (картинок, музыки, фильмов, архивов, программ и т.д.) - вот там "Range" пригодится!
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #2 : 02 ноября 2007, 10:04:38 »

Обычно используется chunked-метод или просто "Connection: Close" при окончании, где "Range" бесполезен!
Это далеко не всегда так. Вот пример:
Запрос-ответ без Range:
GET / HTTP/1.1
User-Agent: Opera/9.50 (Windows NT 5.1; U; ru)
If-Modified-Since: Thu, 01 Nov 2007 22:32:48 GMT
Host: www.rostov-gorod.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: gzip, deflate
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers

HTTP/1.1 200 OK
Date: Fri, 02 Nov 2007 06:49:01 GMT
Server: Apache/2.0.52 (ASPLinux)
X-Powered-By: PHP/4.3.9
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html; charset=WINDOWS-1251
Set-Cookie: PHPSESSID=7211986e9c7132018eb3889d21ad5d8b; path=/
Connection: Close

Запрос-ответ той же страницы с Range:
GET / HTTP/1.1
User-Agent: Opera/9.50 (Windows NT 5.1; U; ru)
If-Modified-Since: Thu, 01 Nov 2007 22:32:48 GMT
Host: www.rostov-gorod.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: gzip, deflate
Range: bytes=17000-27000
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers

HTTP/1.1 206 Partial Content
Date: Fri, 02 Nov 2007 06:49:39 GMT
Server: Apache/2.0.52 (ASPLinux)
X-Powered-By: PHP/4.3.9
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Range: bytes 17000-27000/101181
Content-Length: 10001
Content-Type: text/html; charset=WINDOWS-1251
Set-Cookie: PHPSESSID=48eec2907a7ba9abbc70b84386bddcf1; path=/
Connection: Keep-Alive

Этот сайт посещается за день более 100 раз. Сайтов, выдающих более 50-100 кБ, из которых реально нужно только 10-20, и поддерживающих "кусочный" ответ, знаю много. В их числе несколько ОЧЕНЬ часто посещаемых в моей сети. Например, gismeteo.ru.
Вот и прикидываю потенциальную экономию...
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #3 : 02 ноября 2007, 11:54:21 »

Этот сайт посещается за день более 100 раз. Сайтов, выдающих более 50-100 кБ, из которых реально нужно только 10-20, и поддерживающих "кусочный" ответ, знаю много. В их числе несколько ОЧЕНЬ часто посещаемых в моей сети. Например, gismeteo.ru.
Вот и прикидываю потенциальную экономию...

Сейчас поэкспериментировал с www.rostov-gorod.ru - при каждом заходе сервер отдает страницу разной длины, т.е. размер изменяющейся части постоянно меняется!
Как предлагаешь корректно вклеивать этот кусок в старую страницу, причем с соблюдением синтаксиса HTML?! Или HC еще должен будет сам проводить валидацию HTML-кода?

Есть ли в природе аналоги, которые делают так, как ты предлагаешь?

Не проще ли использовать какой-будь сжимающий сервис (Toonel, WebWarper и т.п.) - через них вся страница весит не 100 кб, а всего 14 кб! И не надо ломать голову с парсингом HTML и корректным склеиванием его частей!
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #4 : 02 ноября 2007, 14:33:38 »

Как предлагаешь корректно вклеивать этот кусок в старую страницу, причем с соблюдением синтаксиса HTML?!
Пользователь задает примерное начало-конец актуальной для него части с запасом (в байтах от начала/конца файла) и регэксп(ы), однозначно идентифицирующий начало и окончание интересующего фрагмента HTML. НС ищет этот кусок в файле из кэша и заменяет на кусок из скачанного фрагмента.
Цитировать
Есть ли в природе аналоги, которые делают так, как ты предлагаешь?
Мне не известны.
Цитировать
Не проще ли использовать какой-будь сжимающий сервис (Toonel, WebWarper и т.п.) - через них вся страница весит не 100 кб, а всего 14 кб! И не надо ломать голову с парсингом HTML и корректным склеиванием его частей!
Зависит от требований к системе. Если цель - максимальное быстродействие, то, увы, сжимающие сервисы зачастую непригодны.

Все новостные сайты выдают конкретную новость обычно в обрамлении шапки, боковых панелей, низа, на которых размещена никому ненужная инфа. Мне нужна только новость размером 10 кБ, а приходится скачивать сто кило, т.к. далеко не все сайты выдают zip-ованный контент, хоть соответствующий заголовок НС и вставляет.
« Последнее редактирование: 02 ноября 2007, 14:42:23 от Михаил » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #5 : 03 ноября 2007, 14:21:47 »

Есть также мысль не докачивать ненужные хвосты сайтов, просто разрывая соединение с сервером после получения интересующих данных. Для реализации этого не требуется поддержка сервером Range. Эффективность такого подхода может быть снижена у тех, у кого в каскаде используется локальный вышестоящий прокси типа Проксомитрона (получающий сначала файл из сети целиком и только затем передающий его НС). Но к тому времени, имхо, НС сам будет выполнять функции Проксомитрона по правке страниц, в связи с чем это будет неактуальным.
Сообщить модератору   Записан
cepera_ang
Beta tester
*****

Репутация: +9/-4
Offline Offline

Сообщений: 355


« Ответ #6 : 06 ноября 2007, 06:07:18 »

Может банально пользоваться RSS?
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #7 : 07 ноября 2007, 12:45:27 »

Может. Только не понял, ты это к чему в этом топике?
Сообщить модератору   Записан
cepera_ang
Beta tester
*****

Репутация: +9/-4
Offline Offline

Сообщений: 355


« Ответ #8 : 08 ноября 2007, 05:49:10 »

К тому что необходимость загружать часть страницы, например измененную новость, это примерно таже задача, для решения которой придуманы rrs фиды... Конечно офтоп, но тем не менее решение уже существующее и безпроблемное Улыбка
Сообщить модератору   Записан
Страниц: [1]   Вверх
  Отправить эту тему    Печать  

 
Перейти в: