Почему кодовые базы для современных веб-браузеров такие большие? - PullRequest
5 голосов
/ 15 декабря 2011

Кодовые базы для современных веб-браузеров, таких как Chrome, Firefox и Safari (WebKit), довольно велики. Мне любопытно, что делает их реализации настолько нетривиальными, что им требуется огромное количество кода.

Как следствие, если бы гипотетический браузер поддерживал только строгие HTML5 и JavaScript, чтобы избежать взломов совместимости, была бы кодовая база значительно меньше?

Ответы [ 2 ]

7 голосов
/ 15 декабря 2011

В качестве первого вопроса рассмотрим, что должен реализовать современный браузер (некоторые браузеры переносят часть этой работы на службы операционной системы):

  1. Несколько анализаторов: XML, HTML, JavaScript,CSS, как минимум.
  2. Не менее четырех отдельных систем макетов (блочная модель CSS, flexbox, SVG, MathML).
  3. Как минимум одна графическая библиотека;для кроссплатформенных браузеров это необходимо для каждой платформы (насколько я знаю, IE9 + просто использует системную библиотеку Direct2D; Safari на Mac просто использует Quartz).
  4. Высокопроизводительная виртуальная машина с JIT,сборщик мусора, немного стандартной библиотеки (постоянно растет; см. типизированные массивы и различные другие недавние функции JavaScript).
  5. Реализация DOM, включая различные вещи, такие как специфичные для HTML и SVG-специфические интерфейсы DOMи т. д.
  6. Средства обработки аудио и видео (опять же Safari на Mac и IE выгружают их в операционную систему).
  7. Средства обработки изображений с поддержкой как минимум JPG / GIF / PNG,Опять же, некоторые браузеры могут загружать части этого в операционную систему.
  8. Библиотека для преобразования потоков байтов в символы Unicode.Опять же, иногда это может быть выгружено в операционную систему, а иногда нет.
  9. Для кроссплатформенных браузеров - своего рода слой переносимости, который абстрагирует отдельные биты платформы.
  10. Редактор HTMLс транзакциями и программируемым API;думаю, contenteditable.
  11. текстовый редактор для textareas.Некоторым из этого можно поделиться с редактором HTML, например.
  12. Средство проверки орфографии, которое может выгружаться или не выгружаться в ОС.
  13. Сетевая библиотека, поддерживающая HTTP, возможно SPDY, возможно FTPи, возможно, несколько других протоколов.Опять же, это может или не может быть выгружен в ОС.
  14. Криптографическая библиотека для обработки SSL и различных других криптографических нужд.Опять же, это может или не может быть выгружено в ОС.
  15. По крайней мере одна реализация базы данных (sqlite, кажется, популярен).
  16. Различный код для реального пользовательского интерфейса и еще много чего.
  17. Склейте код для обработки взаимодействий между ними: код, который управляет вызовами назад и вперед между JavaScript и DOM, код, который управляет повторным вычислением информации о стиле и компоновке при изменении DOM, код, который обрабатывает такие вещи, как document.write вставка строк изJavaScript во входной поток парсера и так далее.Обратите внимание, что количество кода клея, как правило, квадратично по количеству взаимодействующих модулей.

Возможно, мне не хватает нескольких вещей, но это не в моей голове.

В дополнение к этому, по крайней мере, у Gecko и WebKit есть библиотеки шаблонов для таких вещей, как строки и массивы (потому что у стандартных библиотек C ++ есть различные недостатки).

Для остальных ... на данный момент много "совместимость хаков "на самом деле являются частью веб-стандартов.Так что вы не можете их точно избежать.Ваш сценарий говорит о JavaScript и HTML, но не о SVG, MathML или CSS.Если вы на самом деле имеете в виду только HTML и JavaScript, но не CSS или все остальное, то вы, очевидно, можете вырезать кучу кода.Если вы включите все это, а также аудио и видео возможности HTML5 и хотите, чтобы ваш браузер работал хорошо, то я сомневаюсь, что вы можете сделать его намного меньше.

1 голос
/ 15 декабря 2011

Я думаю, что современные веб-браузеры - это сложные приложения. В основном, они имеют движки рендеринга, которые должны обрабатывать различные виды HTML, возможность работать с не-HTML форматами (такими как XML, RSS и т. Д.), Обработчики CSS, движки Javascript, иногда с JIT.

Кроме того, они имеют архитектуры плагинов и API-интерфейсы, составляющие абстрактные различия между платформами, и обычно создаются с использованием компонентов, используемых другими приложениями.

Это делает их довольно нетривиальными. Что касается вашего разговорного слов, я так думаю. Lynx довольно маленький и не поддерживает Javascript или модный HTML.

...