Как приступить к созданию веб-браузер? [закрытый]


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

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

11 56

11 ответов:

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

  • выбирает внешний контент. так вам нужна библиотека HTTP или (не рекомендуется) написать это самостоятельно. Существует много сложности/тонкости в протоколе HTTP, например, обработка заголовков expires, разных версий (хотя это в основном 1.1 в эти дни) и т. д.;
  • обрабатывает различные типы контента. есть реестр Windos для такого рода вещи что вы можете контрейлерных. Я говорю об интерпретации контента на основе типа MIME здесь;
  • анализирует HTML и XML: чтобы создать DOM (модель объекта документа);
  • анализирует и применяет CSS: это подразумевает понимание всех свойств, все единицы измерения, и все способы, ценности могут быть определены (например, "границы: 1px твердых черный" против отдельных границе-ширина, свойства etc);
  • реализует визуальную модель W3C (и это настоящий кикер); и
  • имеет движок Javascript.

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

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

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

  • трезубец: разработано Microsoft для Internet Explorer;
  • Гекко: используется в Firefox;
  • Webkit: используется в Safari и Chrome 0-27;
  • KHTML: используется в среде рабочего стола KDE. Webkit разветвился от KHTML несколько лет назад;
  • Электра: используется в Opera 4-6;
  • вуаля: используется в Opera 7-12;
  • Блинк: используется в Chrome 28+, Opera 15+, webkit fork;

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

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

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

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

Что это много работы.

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

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

некоторые ресурсы, которые вы могли бы проверить:

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

http://www.geekherocomic.com/comics/2009-02-25-coding-overkill.png

Удачи :-)

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

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

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

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

Что сказал, Вот некоторые (очевидно) указатели:

  1. написать много кода, который делает небольшие вещи, как решить все projecteuler.net проблемы
  2. узнайте все, что вы можете о своем инструментарии и его стандартах сообщества
  3. написать много больше кода
  4. получить реальное твердое понимание конечных автоматов
  5. написать еще больше кода
  6. узнайте все о стеке tcp/ip и как он используется для http
  7. узнайте все, что вы можете о http
  8. изучите стандарты (html, xml, sgml, css)
  9. отпразднуйте свой 150-й день рождения.
  10. начните работу над фактическим проектом браузера.

редактировать ниже здесь

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Udacity теперь имеет курс под названием "Создание веб-браузера" -https://www.udacity.com/course/programming-languages--cs262

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

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

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

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

A всем удачи для вас!

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

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

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

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

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

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

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

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