Подтвердить что ты не робот

Как начать создавать веб-браузер?

Я решил приложить некоторые усилия для создания веб-браузера с нуля. Каковы общие функции, архитектуры и функции современных веб-браузеров, которые я должен знать до начала работы?

Любые рекомендации приветствуются!

4b9b3361

Ответ 1

Хорошо разбить его на кусочки. Что такое веб-браузер? Что оно делает? Это:

  • Выбирает внешний контент.. Вам нужна библиотека HTTP или (не рекомендуется) пишите это самостоятельно. Там много сложностей/тонкости протокола HTTP, например, обработка заголовков истекает, разные версии (хотя в основном это в наши дни) и т.д.
  • Обрабатывает разные типы контента. Theres реестр Windos для такого рода вещей, который вы можете комбинировать. Я говорю о интерпретации контента на основе типа MIME здесь;
  • Парсы HTML и XML: создание DOM (объектной модели документа);
  • Парсы и применяет CSS: это подразумевает понимание всех свойств, всех единиц измерения и всех способов, которые могут быть заданы (например, "border: 1px solid black" vs the separate border-width, и т.д.);
  • Реализует визуальную модель W3C (и это настоящий кикер); и
  • Имеет механизм Javascript.

И это в основном веб-браузер в двух словах. Теперь некоторые из этих задач невероятно сложны. Даже легкие звучания могут быть трудными. Возьмите внешний контент. Вам нужно иметь дело с примерами использования, например:

  • Сколько одновременных подключений использовать?
  • Сообщение об ошибке пользователю;
  • Доверенные;
  • Пользовательские параметры;
  • и др.

Причина, по которой я и другие коллективно поднимают брови, - это механизм рендеринга (и, как кто-то заметил, человеческие годы вошли в их развитие). Основные двигатели рендеринга:

  • Trident:, разработанный Microsoft для Internet Explorer;
  • Gecko:, используемый в Firefox;
  • Webkit:, используемый в Safari и Chrome 0-27;
  • KHTML:, используемый в среде рабочего стола KDE. Webkit раздвоен из KHTML несколько лет назад;
  • Elektra:, используемый в Opera 4-6;
  • Presto:, используемый в Opera 7-12;
  • Blink:, используемый в Chrome 28+, Opera 15+, webkit fork;

В первую тройку приходится считаться основными двигателями рендеринга, которые используются сегодня.

Двигатели Javascript также сложны. Есть несколько из них, которые, как правило, привязаны к конкретному движку рендеринга:

  • SpiderMonkey:, используемый в Gecko/Firefox;
  • TraceMonkey: заменит SpiderMonkey в Firefox 3.1 и представляет компиляцию JIT (точно в срок);
  • KJS:, используемый Konqueror, привязанный к KHTML;
  • JScript: механизм Javascript Trident, используемый в Internet Explorer;
  • JavascriptCore:, используемый в Webkit браузером Safari;
  • SquirrelFish: будет использоваться в Webkit и добавит JIT как TraceMonkey;
  • V8: механизм Google Javascript, используемый в Chrome и Opera;
  • Opera (12.X и меньше) также использовала свои собственные.

И, конечно же, все материалы пользовательского интерфейса: навигация между страницами, история страниц, очистка временных файлов, ввод URL-адреса, автозаполнение URL-адресов и т.д.

Это много работы.

Ответ 2

Звучит как действительно интересный проект, но он потребует от вас огромных усилий.

Это не легкая вещь, но с научной точки зрения, вы можете узнать так много от него.

Некоторые ресурсы, которые вы можете проверить:

Но, увидев это с реалистической точки зрения, огромные усилия, необходимые для написания кода с нуля, напомнили мне этот комикс:

CV3DQ.png
(источник: geekherocomic.com)

Удачи :-)

Ответ 3

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

Я не очень много знаю о том, как работают протоколы (что вам определенно нужно исследовать) или многое о том, что происходит в браузере, но отличное место для начала было бы источником браузеров с открытым исходным кодом, прежде всего Chrome и Firefox. Chrome - это особенно хороший проект для просмотра, поскольку они делают только то, что я ожидаю от вас: хром и бэкэнд браузера. Забудьте сначала создать механизм рендеринга - используйте Webkit или Gekko.

Ответ 4

Вы имеете в виду, как писать собственный движок рендеринга?

Я могу только сказать удачу. Многие человеческие годы вошли в нынешнее поколение различных браузеров. Если вы хотите сделать лучше, чем любой из них, вам понадобятся серьезные навыки. Если вам нужно спросить, с чего начать, у вас, вероятно, будет больше, чем несколько лет обучения, прежде чем будет иметь смысл попытаться выполнить такую ​​задачу.

Тем не менее, вот некоторые (очевидные) указатели:

  • пишите много кода, который делает мелкие вещи, например, решают все проблемы projecteuler.net
  • узнайте все, что можете, о своем инструментарии и его стандартах сообщества.
  • написать много больше кода
  • получить реальное твердое представление конечных автоматов
  • написать еще код
  • узнать все о стеке tcp/ip и о том, как он используется для http
  • узнайте все о http
  • узнать стандарты (html, xml, sgml, css)
  • отпраздновать свой 150-летний юбилей.
  • начните работу с фактическим проектом браузера.

здесь.

Я не хотел, чтобы это было мотивирующим или демотивационным, просто попытка показать вам, что браузер - действительно большой проект, и что действительно большие проекты требуют много размышлений. Честная честность посыпалась юмором.

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

Конечно, если это то, что вы хотите сделать, не позволяйте моему комментарию стоять на вашем пути. Вероятно, вы можете сделать лучше, чем Internet Explorer.

Ответ 5

Большинство современных веб-браузеров являются гигантскими зверями и, вероятно, довольно плохо разработаны, потому что они (и сама сеть) развивались довольно случайным образом.

Вам нужно сначала создать цели вашего проекта (и то, что вы надеетесь достичь) очень явным. Это то, что вы просто делаете для удовольствия, или вы ожидаете, что другие люди будут использовать ваш браузер? Если вы ожидаете, что другие будут использовать его, какими будут стимулы для них? Нереально ожидать, что вы разработаете новый браузер с нуля, который каждый сможет использовать в качестве замены для Chrome, Safari, Firefox, IE, Opera и т.д. Все эти проекты имеют начальный старт на 10-15 лет вы, и к тому времени, как вы догнали их, они будут еще на 10-15 лет раньше вас. Кроме того, у них намного больше возможностей для мужчин, поэтому, если вы хотите, чтобы ваш проект был успешным, вам понадобится эта сила человека в какой-то момент.

Именно по этой причине Apple и Google, крупные компании с большим количеством ресурсов, не начали с нуля. Даже Microsoft не начинала с нуля. Оригинальный IE был основан на Mosaic. Единственные значимые браузеры, которые были созданы сегодня с нуля, - это Opera, Konqueror и Lynx, которые, к сожалению, имеют небольшую долю рынка. Позвольте забыть о Lynx на данный момент, поскольку это текстовый браузер и, по-видимому, единственная причина, по которой он все еще существует, потому что он служит этой конкретной нише. Opera, возможно, является одним из лучших браузеров, когда-либо созданных, но при этом никогда не было большой доли рынка, поэтому помните, что успех и инновации - это не одно и то же. KHTML - это двигатель Konqueror, который никогда не стал очень успешным, но является основой WebKit, которую используют как Apple, так и Google. Я думаю, можно было бы однозначно утверждать, что если бы KHTML никогда не был создан, ни Safari, ни Chrome не существовало бы. Интересно, что и KHTML, и Opera были в основном созданы норвежскими программистами, работающими в одном здании в Осло.

Вам нужно посмотреть на создание веб-браузера, например, на создание операционной системы, поскольку это, по сути, то, что браузер - это операционная система для запуска веб-приложений. И как операционная система, веб-браузер представляет собой очень сложную часть программного обеспечения со многими компонентами. Конечно, люди добились успеха в создании новых операционных систем с нуля. Линус Торвальдс приходит на ум. Он создал Linux, одну из самых успешных операционных систем.

Конечно, перед вами стоит дополнительная задача, которая делает создание нового успешного браузера труднее, чем создание новой успешной ОС. Ожидается, что браузеры будут безупречно запускать весь старый код, плавающий в Интернете. Теперь предположим, что Линусу Торвальдсу сказали, что его новая ОС не имеет значения, если он не будет полностью совместим с UNIX или какой-либо существующей ОС. Я сомневаюсь, что он бы побеспокоился, и Linux, вероятно, не существовал бы сегодня. Реально, конечно, единственная причина, по которой Linux стала популярной, состояла в том, что она была хорошо разработана, и проект GNU смог создать инструменты для переноса огромного количества существующего кода в Linux. Без идеологической поддержки GNU для Linux это никогда не было бы шансом.

Итак, предполагая, что вы действительно амбициозны (или безрассудно), чтобы попытаться создать новый успешный браузер, вы должны сосредоточиться на архитектуре и дизайне. Существует никаких практических причин для создания нового браузера с нуля, если вы не уверены, что можете каким-то образом улучшить дизайн существующих браузеров. Это означает, что вам необходимо достаточно хорошо ознакомиться с кодом WebKit и Gecko, чтобы понять принятые ими дизайнерские решения, но вы не должны пытаться копировать их дизайн, потому что иначе вы могли бы просто использовать свой код.

Мои личные мысли (без достаточных исследований) состоят в том, что сегодня браузеры недостаточно модулярны. Если бы я собирался создать новый браузер, я бы нашел способ упростить замену вещей (например, заменить один движок JavaScript другим) и предоставить пользователю намного больше контроля, чем в настоящее время с существующими браузерами, Современные браузеры и веб-дизайнеры взяли почти все управление от пользователя. Почему я не могу, пользователь, сообщить веб-браузеру, как я хочу, чтобы он отображал содержимое, отображаемое на моей машине? В исходном HTML были даны рекомендации по структурированию контента, и со временем более новые стандарты стали все более и более догматичными до такой степени, когда пользователь теперь находится в полной милости веб-дизайнера. Привлекательность Linux заключалась в том, что она дала контроль над пользователем, и поэтому многие разработчики поддерживали ее и превращали в успешную ОС.

Другое дело, что я бы потратил время на исследования, если бы я был вами, - это принципы проектирования операционной системы. Проектирование хорошего браузера, по крайней мере теоретически, требует тех же принципов, что и разработка хорошей ОС - особенно в отношении параллельных процессов, моделей безопасности и т.д.

Наконец, после проведения много-много исследований, здесь вы должны начать кодирование, я думаю:

  • Восстановить Мозаику, но с вашими собственными дизайнерскими идеями. Это то, что я хотел бы предложить, если вы просто делаете это ради удовольствия или своей собственной образовательной выгоды. Прочтите исходные спецификации HTML 1.0 и HTML 2.0, а также спецификации HTTP 1.1 и текущие спецификации URI и убедитесь, что ваш браузер придерживается всех этих спецификаций. Вы можете, конечно, загружать существующее программное обеспечение, которое уже обрабатывает транспортные протоколы, соглашения URI и т.д., Но если вы серьезно относитесь к разработке своего собственного браузера, я думаю, что это хорошее упражнение, чтобы делать эти вещи с нуля, так что вы получаете хорошее чувство того, как все части головоломки подходят друг другу. В конце шага 0 вы должны иметь браузер, который по крайней мере сопоставим с тем, что было современно в 90-е годы. Это хорошая первая веха. И вы действительно можете загрузить оригинальную Mosaic в ftp://ftp.ncsa.uiuc.edu/Mosaic/ и посмотреть, как она сравнивается с вашим браузером. Это также хорошее упражнение, чтобы увидеть, как текущие веб-сайты отображают в древнем браузере, таком как Mosaic.

  • Добавьте поддержку вашего DOM в свой браузер. Сначала сосредоточьтесь на W3C DOM Level 1 и Level 2, так как почти все текущие браузеры полностью поддерживают их. Затем посмотрите на уровень 3 и уровень 4. DOM чрезвычайно важен для веб-программирования, поэтому, если вы собираетесь построить современный веб-браузер, весь дизайн должен учитывать это. Поскольку вы пишете браузер на С#, вы можете принять во внимание, как вы могли бы использовать существующую объектную модель .NET в своих интересах.

  • Посмотрите на существующие механизмы сценариев и посмотрите, можете ли вы перенести их в свой проект. Я бы отговорил вас от написания собственного интерпретатора JavaScript не только потому, что это очень большой проект сам по себе, но и потому, что в оптимизацию JS-компиляторов (например, V8) уже сделано много работы. Поэтому, если вы не являетесь гуру в дизайне компилятора, ваш ручной интерпретатор JS, скорее всего, уступает тому, что уже существует, даже если оно следует за спецификациями EMCAScript безупречно. Опять же, я думаю, что скриптовый движок должен быть полностью отдельным модулем от фактического браузера, поэтому я думаю, было бы гораздо полезнее иметь фреймворк, который позволит вам заменить любой скриптовый движок, а не создавать механизм сценариев который работает только с вашим браузером.

  • Посмотрите на исходный код HTML/CSS/JS для лучших 10-20 сайтов в Северной Америке (Google, Facebook, YouTube, Twitter, Википедия, Amazon, популярные платформы для ведения блогов и т.д.) и спроектируйте браузер хорошо работать с этими сайтами. Это несколько более трудная задача для решения, чем создание браузера, который придерживается всех существующих стандартов (что то, что текущие браузеры все еще не делают отлично), тем более делает браузер, который правильно отображает все веб-сайты в Интернете (никто не может сделай это). Люди будут жаловаться, что ваш браузер нарушает стандарты и так далее, но это не так много, как люди, жалующиеся на то, что они не могут получить доступ к Google или Facebook с вашим браузером. Я не могу придумать ни одного браузера, который бы правильно следил за всеми (или даже самыми) стандартами в своем первом выпуске, поэтому я говорю, что даже не пытаюсь попробовать. Если вы можете сделать то, что люди захотят использовать достаточно, чтобы когда-либо была вторая или третья версия, тогда вы можете беспокоиться о стандартах в этот момент.

Ответ 6

Как и все остальные, веб-браузер - это огромный проект. Вам нужно беспокоиться о сокетах tcp/ip & s, рендеринг html, использовать css, создать DOM-модель, выполнить javascript, иметь дело с неправильной разметкой и кодом и обрабатывать все типы файлов, прежде чем вы сможете даже думать обо всех вещах, которые люди ожидать от браузера (например, закладки, историю, приватный просмотр, безопасность и т.д.). Это огромный проект.

Говоря это, это можно сделать. Мое предложение состояло в том, чтобы взглянуть на источник Firefox. Я знаю, что вы сказали, что хотите создать браузер с нуля, но сначала было бы полезно изучить проект с открытым исходным кодом.

Я бы загрузил источник Firefox и медленно разделил его. Другими словами, я бы взял источник и удалил все функции закладок. Затем я удалю возможность обрабатывать аддоны. Затем я удалю весь код, касающийся сохранения файлов. Я продолжу этот процесс, пока не получу очень простой веб-браузер. Я бы просмотрел этот код.

Тогда я бы начал строить свои собственные. Я бы понял, что получил от использования Firefox, и я включил его в создание нового браузера.

Вам очень повезло!

Ответ 8

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

Затем вы должны найти способ сгибать реальный HTML из Интернета в соответствии с вашими потребностями.

Но не обманывайте себя: браузер не маленький проект.

Ответ 9

... затем начните беспокоиться о безопасности

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

Ответ 10

очень амбициозный проект, но один разработчик не может этого сделать, вам нужна команда (руководитель проекта, тестеры...), и, возможно, вам стоит пересмотреть свой выбор языка. С# работает только на окнах (я знаю моно на linux, но это не такой же) в любом случае, я желаю вам удачи, и я буду рад использовать ваш браузер: D

Ответ 11

У вас действительно много свободного времени в ваших руках, не так ли? AFAIK, большинство браузеров были написаны на С++, не все пользователи имеют .NET framework, установленную на своих компьютерах, и если они это делают, возможно, это не та версия, которая вам нужна.

Это может занять годы, но в любом случае есть много браузеров с открытым исходным кодом, FireFox, Google Chrome и т.д., вы можете начать с просмотра кода, удачи в этом:)