ВВЕДЕНИЕ 5
1. АНАЛИЗ ЛИТЕРАТУРЫ И СУЩЕСТВУЮЩИХ РЕШЕНИЙ 8
1.1. Синтаксический анализ 8
1.2. Обзор существующих решений 14
1.2.1. Проект Университета Беркли 14
1.2.2. Браузерный движок ZOOMM 15
1.2.3. Браузерный движок Servo 16
2. ПРОЕКТИРОВАНИЕ 20
2.1. Диаграмма деятельности 20
2.2. Диаграмма последовательности 21
3. РЕАЛИЗАЦИЯ 23
3.1. Выбор языка и платформы разработки 23
3.2. Диаграмма классов 25
4. ТЕСТИРОВАНИЕ 31
ЗАКЛЮЧЕНИЕ 36
ЛИТЕРАТУРА
Веб-обозреватель или веб-браузер - прикладное программное обеспечение для просмотра веб-страниц, содержания веб-документов, компьютерных файлов и их каталогов, управления веб-приложениями, а также для решения других задач. В глобальной сети браузеры используют для запроса, обработки, манипулирования и отображения содержания веб-сайтов.
Функциональные возможности браузеров постоянно расширяются и улучшаются благодаря конкуренции между их разработчиками и высоким темпом развития и внедрения информационных технологий. Несмотря на то, что браузеры разных изготовителей базируются на разных технологических решениях, подавляющее большинство современных браузеров придерживается международных стандартов и рекомендаций W3C (World Wide Web Consortium) в области обработки и отображения данных.
Актуальность проблемы
На сегодняшний день повсеместно используются так называемые последовательные браузеры, т.е. браузеры, в которых процессы исполняются в некой последовательности (рис. 1). Такая концепция сформирована, по большей части, исторически, ввиду архитектур SISD- процессоров.
Процесс загрузки страницы происходит следующим образом. Браузер получает код HTML, CSS и JS, после этого осуществляет синтаксический анализ (парсинг, помимо структуры HTML анализируются стили CSS и скрипты JavaScript) и формирует объектную модель документа (DOM), после чего применяет стили. Далее создается дерево отображения (flow tree), после этого происходит разметка страницы (layout) на составные блоки, называемые списками отображения. После этого происходит отрисовка на слои (рендеринг), после чего слои компонуются в окончательный результат для вывода [6, 7].
Концепция параллельных браузеров предполагает распараллеливание операций обработки веб-страницы: синтаксический анализ, разметку страницы, применение стилей, параллельное исполнение скриптов.
Есть несколько иной подход в параллелизации работы браузера, состоящий в инстанцировании этих служб для каждой отдельной вкладки в браузере (tab). Но такой вариант не является в полной мере параллельным решением, поэтому отдельно рассматриваться не будет.
Выгода распараллеливания операций заключается в увеличении быстродействия и повышении энергоэффективности работы браузера, что достаточно актуально для мобильных устройств [10, 12].
Согласно исследованиям [10, 12], задачи по синтаксическому анализу занимают достаточное количество времени, чтобы встал вопрос об оптимизации их решений.
Internet Explorer 8 выполняет синтаксический анализ примерно 3¬10 % времени от общей готовности страницы для использования пользователем, Firefox, согласно измерениям авторов исследования, проводит до 40 % общего времени именно в синтаксическом анализе. Поэтому существенное ускорение работы синтаксического анализатора, которое можно будет достигнуть за счет распараллеливания операций, положительно скажется на общем времени загрузки страницы.
Цель и задачи исследования
Целью данной работы является реализация спекулятивного HTML- парсера, работающего в побочном потоке в браузерном движке Servo.
Для достижения цели необходимо выполнить следующие задачи:
1) провести обзор литературы по теме работы и анализ существующих парсеров в веб-браузерах;
2) разработать спекулятивный парсер;
3) реализовать и провести тестирование разработанного анализатора.
Структура и объем работы
Работа состоит из введения, 4 разделов, заключения и списка литературы. Объем работы составляет 38 страниц, объем списка литературы - 22 наименования.
Содержание работы
В первом разделе, «Обзор существующих решений», изложено описание основных существующих на рынке решений и разработок.
Во втором разделе, «Проектирование», определены функциональные требования к разрабатываемому парсеру, описаны основные алгоритмы работы.
В третьем разделе, «Реализация», представлен перечень используемых средств и технологий разработки, приведены основные алгоритмы работы парсера и его компонентов.
В четвертом разделе, «Тестирование», приведены результаты тестирования, подтверждающие корректность работы парсера.
Целью данной работы являлась реализация спекулятивного HTML- парсера, работающего в побочном потоке в браузерном движке Servo.
В ходе выполнения выпускной квалификационной работы магистра были решены следующие задачи:
1) проведен обзор литературы по теме работы и анализ существующих парсеров в веб-браузерах;
2) разработан спекулятивный парсер;
3) реализован и протестирован разработанный анализатор.
В процессе работы по проектированию и реализации парсера активно велась переписка с одним из членов команды Servo Джошуа Мэттьюсем (Josh Matthews).
Результаты работы будут непосредственно использованы в проекте Servo.
1. Anderson B. Experience Report: Developing the Servo Web Browser Engine using Rust. / B. Anderson, L. Bergstrom, D. Herman, et al. // [Электронный ресурс] URL: http://arxiv.org/abs/1505.07383(дата обращения: 22.02.2016)
2. Blandy J. Why Rust? - USA: O’Reilly Media, 2015. - 62 p.
3. Bodik R. Fast and parallel webpage layout. / R. Bodik, L. Meyerovich. // WWW’10 Proceedings of the 19th international conference on World wide web. - USA: ACM New York, 2010. - P. 711-720.
4. Cascaval C. ZOOMM: A Parallel Web Browser Engine for Multicore Mobile Devices. / C. Cascaval, S. Fowler, O. Montesinos, et al. // ACM SIG-PLAN Notices - PPoPP '13, volume 48, issue 8, August 2013. - P. 271-280.
5. Design of HTML5 parser in Servo. [Электронный ресурс] URL: https://github.com/servo/html5ever/wiki/Design(дата обращения: 2.03.2016).
6. Garsiel T. How browsers work. [Электронный ресурс] URL: http://taligarsiel.com/Projects/howbrowserswork1.htm(дата обращения: 19.02.2016).
7. Grosskurth A. A Reference Architecture for Web Browsers. / A. Grosskurth, M. Godfrey. // ICSM'05. Proceedings of the 21st IEEE International Conference. - IEEE, Software Maintenance, 2005. - P. 661-664.
8. Grune D. Parsing Techniques: A Practical Guide 2nd ed. - USA: Springer, 2007. - 662 p.
9. HTML parser threading. [Электронный ресурс] URL: https: //developer. mozilla. org/en- US/docs/Mozilla/Gecko/HTML_parser_threading (дата обращения: 16.03.2016).
10. Jones C.G Parallelizing the Web Browser. / C.G. Jones, R. Liu, L. Meyerovich, K. Asanovic, R. Bodik. // HotPar ’09 Proceedings of the First USENIX Conference on Hot topics in Parallelism, 2009. - P. 7-13.
11. Kegler J. Parsing: a timeline. [Электронный ресурс] URL: http://j effreykegler. github. io/Ocean-of-Awareness- blog/individual/2014/09/chron.html (дата обращения: 16.02.2016).
12. Mai H. A case for parallelizing web pages. / H. Mai, S. Tang, S. King, C. Cascaval, P. Montesinos. // HotPar ’12 Proceedings of the USENIX Confer-ence on Hot topics in Parallelism, 2012. - P. 2-8.
13. Meyerovich, L. Parallel schedule synthesis for attribute grammars. / L. Meyerovich, M. Torok, et al. // Proceedings of the 18th ACM SIGPLAN Sym-posium on Principles and Practice of Parallel Programming, - USA: ACM PPoPP ’13. - P. 187-196.
14. Meyerovich L. Parallel Layout Engines: Synthesis and Optimization of Tree Traversals. - Dis. Ph. D. / UC Berkeley, 2013. - 161 p.
15. Off-main thread speculative HTML parsing. [Электронный ресурс] URL: https://github.com/servo/servo/issues/3847(дата обращения: 05.01.2016).
16. Prabbu P. Safe Programmable Speculative Parallelism. / P. Prabbu, G. Ramalingam, K. Vaswani. // Proceedings of PLDI’10, June 5-10, 2010.
17. Леоненков А.В. Самоучитель UML 2. - СПб.: БХВ-Петербург, 2007. - 576 с.
18. Официальная документация проекта Servo. [Электронный ресурс] URL: http://doc.servo.org/(дата обращения: 8.03.2016).
19. Официальная документация по языку Rust. [Электронный ресурс] URL: http://doc.rust-lang.org/book/(дата обращения: 22.02.2016).
20. Официальные рекомендации по написанию unsafe кода на Rust. [Электронный ресурс] URL: http://doc.rust-lang.org/nomicon/(дата обращения: 02.03.2016).
21. Официальная спецификация HTML5. [Электронный ресурс] URL: http://www.w3.org/TR/html5(дата обращения: 18.02.2016).
22. Репозиторий проекта The Servo Browser Engine. [Электронный ресурс] URL: https://github.com/servo/servo/(дата обращения: 18.01.2016).