Page 50

ПРО

№13 (апрель) 2011

граммист

http://programmersforum.ru

Виталий Белик

ЛАБОРАТОРИЯ

HTML НАРАСПАШКУ. ЧАСТЬ 1

Однажды мой друг попросил меня быстро написать программу, которая помогла бы ему распарсить страницы из КЭШа поисковиков. Это смогло бы восполнить потери в базе его сайта, которую он «случайно» почистил. Я посмеялся и написал ему простейший парсер конкретно для Яндекса, Гугла, а потом подумал: «А что если попробовать сделать свою качалку страниц? А может, даже и свой браузер... Как он будет выглядеть? Сложно ли это сделать?» Это заинтересовало меня – ответ «Гуглехрому» своими руками достаточно неплохая задача, верно?

Prehistory

отображать». Браузер согласно указаниям в

Что же такое браузер? Википедия ответит на

в нужном месте, или в аудиоколонки, если

этот

вопрос

бра́узер

броузер

строчками

(от

англ.

Web

«Веб-обозрева́тель, browser;

устаревшая

вариант

это, скажем, песня.

менее

Допустим,

обеспечение для просмотра веб-сайтов, то

считывать

предпочтительная

форма)

есть

запроса

для

и

HTML- разметке выдает загруженное на экран

программное

веб-страниц

(преимущественно из Сети), их обработки, вывода и

перехода от одной

страницы

к

другой». И будет совершенно права. Исконно браузерами

отображения

называли WEB-

инструментарий

сайтов

у

клиента.

для

Но

чтобы отобразить (я бы сказал – отрисовать) страницу

браузер

должен

обладать

двумя

важными функциями: Загрузчиком страницы и парсером страницы.

Загрузчик страницы должен быть достаточно умен, чтоб загружать контент (содержимое

страницы в данном случае) по требованию браузера. Не секрет, что HTML- страницы

содержат ссылки на картинки, мультимедиа и

прочие файлы, которые необходимо клиенту

открыть (проиграть, отобразить), и загрузчик просто-таки обязан все эти вещи запросить из Интернета, контентом

создать

этой

файл,

наполнить

мультимедиа,

и

его

сообщить

браузеру: «Эй, дружище, я закачал, можно

схема

может

быть

такой:

Загрузчику браузер указывает, сколько байт «посасывает» порции

быстренько потоке)

страницу.

Тот

в

потихоньку,

передает (может

разбирает

цикле

после

парсеру,

быть

часть

даже

кода,

ее

каждой

в

который другом

определяя,

насколько он цельный, насколько из того, что

уже пришло, можно понять, что отображать. Если ему удается определить, что часть тегов уже

закачалась,

правилам

они

HTML

и

(теги)

закрыты

представляют

по

собой

цельный объект, который о чем-то говорит

точно и неоднозначно, парсер просит браузер согласно этому тегу что-то отрисовать вне

очереди. Браузер создает объект в памяти, наполняет его свойствами из этого тега и отрисовывает этот объект и все последующие

согласно их свойствам. Все замечали: что иногда бывает, что страница в начале закачки выглядит

на

весь

экран,

а

потом

резко

сжимается – это как раз говорит о том, что тот

объект,

который

теснит

объекты

еще

загрузчиком не подгрузился, парсер еще не разобрал

его,

а

браузер

уже

* Что касается парсинга, он вступает только после того, как загрузчик сделал свое черное дело - ну, или, по крайней мере, по ходу загрузки. Все, думаю, уже давно заметили, что каждый браузер старается как можно скорее отобразить страницу, начиная с момента загрузки. Это достигается за счет того, что парсер отрабатывает теги не после того, как загрузчик отработает, полностью закачав страницу (даже без мультимедиа контента), а непосредственно в ходе самой закачки.

спешит

50

PROgrammist, №13  

Official editorial layout

PROgrammist, №13  

Official editorial layout

Advertisement