Я вирішив докласти певних зусиль для створення веб-браузера з нуля. Які загальні функції, архітектура та особливості сучасних веб-браузерів я повинен знати перед початком роботи?
Будь-які рекомендації високо вдячні!
Я вирішив докласти певних зусиль для створення веб-браузера з нуля. Які загальні функції, архітектура та особливості сучасних веб-браузерів я повинен знати перед початком роботи?
Будь-які рекомендації високо вдячні!
Відповіді:
Ну розбийте його на шматки. Що таке веб-браузер? Що це робить? Це:
І це в основному веб-браузер в двох словах. Зараз деякі з цих завдань неймовірно складні. Навіть ті, що легко звучать, можуть бути важкими. Візьміть вибір зовнішнього вмісту. Вам потрібно мати справу з такими випадками використання, як:
Причиною того, як я та інші колективно піднімаємо брови, є важкий механізм рендерингу (і, як хтось зазначав, у їх розробці пішли людські роки). Основними механізмами рендерингу є:
Трійку найкращих слід вважати основними механізмами рендерингу, що використовуються сьогодні.
Двигуни Javascript також важкі. Є кілька з них, які, як правило, пов’язані з конкретним механізмом рендерингу:
І, звичайно, є все, що стосується інтерфейсу користувача: навігація між сторінками, історія сторінок, очищення тимчасових файлів, введення URL-адреси, автозаповнення URL-адрес тощо.
Це дуже багато роботи.
Звучить справді цікавий проект, але для цього потрібно буде вкласти величезні зусилля.
Це непроста справа, але з академічної точки зору ви можете навчитися на цьому стільки .
Деякі ресурси, які ви можете перевірити:
Але бачачи це з реалістичної точки зору, величезні зусилля, необхідні для кодування з нуля, нагадали мені цей комікс:
(джерело: geekherocomic.com )
Щасти :-)
Більшість сучасних веб-браузерів - це гігантські звірі, і, мабуть, досить погано розроблені, оскільки вони (і сама Мережа) еволюціонували досить випадково.
Для початку потрібно спочатку чітко визначити цілі свого проекту (і те, що ви сподіваєтесь досягти). Це те, що ви просто робите для розваги, чи ви очікуєте, що інші користувачі використовуватимуть ваш браузер? Якщо ви очікуєте, що інші користуватимуться цим, яким стимулом для них буде? Нереально сподіватися, що ви розробите новий браузер з нуля, який кожен зможе використовувати як заміну 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-х. Це хороший перший етап. І ви дійсно можете завантажити оригінальну Мозаїку за адресоюftp://ftp.ncsa.uiuc.edu/Mosaic/ і подивіться, як він порівнюється з вашим браузером. Це також хороша вправа побачити, як відображаються поточні веб-сайти в старовинному браузері, як Mosaic.
Додайте підтримку DOM у ваш браузер. Спершу зосередьтеся на W3C DOM Level 1 і Level 2, оскільки майже всі поточні браузери повністю їх підтримують. Тоді подивіться на рівень 3 і рівень 4. DOM надзвичайно важливий для веб-програмування, тому, якщо ви збираєтеся насправді створювати сучасний веб-браузер, це має враховувати весь дизайн. Оскільки ви пишете браузер на C #, можливо, ви захочете взяти до уваги, як ви можете використати існуючу об'єктну модель .NET на свою користь.
Подивіться на існуючі механізми сценаріїв і перевірте, чи можете ви перенести їх у свій проект. Я б відрадив вам писати власний інтерпретатор JavaScript не лише тому, що це сам по собі дуже великий проект, але тому, що вже було зроблено так багато роботи щодо оптимізації компіляторів JS (наприклад, V8). Отже, якщо ви не гуру в дизайні компілятора, ваш власноруч створений інтерпретатор JS, швидше за все, буде поступатися тому, що вже є, навіть якщо він бездоганно відповідає специфікаціям EMCAScript. Знову ж таки, я думаю, що механізм сценаріїв повинен бути чимось, що є абсолютно відокремленим модулем від власне браузера, тому я думаю, що було б набагато корисніше мати фреймворк, який дозволяє замінити будь-який механізм сценаріїв, а не створювати механізм сценаріїв що працює лише з вашим браузером.
Подивіться на вихідний код HTML / CSS / JS для 10–20 найкращих веб-сайтів у Північній Америці (Google, Facebook, YouTube, Twitter, Wikipedia, Amazon, популярні платформи для ведення блогів тощо) та спроектуйте свій браузер для ефективної роботи з цими сайтами. . Цю проблему вирішити дещо важче, ніж зробити браузер, який дотримується всіх існуючих стандартів (те, що сучасні браузери все ще не роблять ідеально), а тим більше зробити браузер, який правильно відображає всі веб-сайти в Інтернеті (ніхто зробити це). Люди будуть скаржитися на те, що ваш браузер порушує стандарти та інше, але це не така велика проблема, як люди, які скаржаться, що вони не можуть отримати доступ до Google або Facebook за допомогою вашого браузера. Я не можу придумати жодного браузера, який би правильно дотримувався всіх (або навіть більшості) стандартів у своєму першому випуску, тому я кажу, навіть не турбуйтеся пробуванням.
Ви маєте на увазі, як під час написання власного механізму візуалізації?
Я можу сказати лише удачі. Багато людських років пішло на сучасне покоління різних браузерів. Якщо ви хочете зробити краще, ніж будь-який з них, вам знадобляться серйозні навички. Якщо вам доводиться запитувати, з чого почати, вам, мабуть, доведеться пройти ще кілька років навчання, перш ніж матиме сенс спробувати таке завдання.
Тим не менш, ось деякі (очевидні) вказівки:
редагувати нижче тут
Я не мав на увазі, щоб він був або мотивуючим, або демотивуючим, просто спроба показати вам, що браузер - це справді великий проект, і що справді великі проекти вимагають багато роздумів. Тупа чесність, посипана гумором.
Я займаюся програмуванням більше двох третин свого життя, і мені подобається думати, що я досить пристойний програміст, але було б глупо з моєї думки, що я маю пів шансу написати гідний веб-браузер з нуля .
Звичайно, якщо це те, що ви хочете зробити, не дозволяйте моїм коментарям перешкоджати вам. Можливо, ви можете зробити краще, ніж Internet Explorer.
Це шалено амбіційний проект (особливо для одного розробника), але щось, що я хотів би колись зробити - ви могли б у нього стільки навчитися.
Я не знаю багато про те, як працюють протоколи (те, що вам обов'язково потрібно дослідити), або про те, що відбувається в браузері, але чудовим місцем для початку буде джерело браузерів з відкритим кодом, в першу чергу Chrome і Firefox. Chrome - це особливо хороший проект, на який слід дивитись, оскільки він робить лише те, з чого я очікую, що ви почнете: хром та серверну частину браузера. Спочатку забудьте про створення механізму візуалізації - використовуйте Webkit або Gekko.
Як усі інші вже говорили, веб-браузер - це величезний проект. Вам доведеться турбуватися про tcp / ip & sockets, рендерінг html, використання css, створення моделі DOM, виконання javascript, роботу з неправильно сформованою розміткою та кодом та обробку всіх типів файлів, перш ніж ви зможете навіть подумати про те, чого люди очікують від браузер (тобто закладки, історія, приватний перегляд, безпека тощо) Це величезний проект.
З огляду на це, це можна зробити. Моя порада - перейти до джерела Firefox. Я знаю, що ви сказали, що хочете створити браузер з нуля, але було б дуже корисно спочатку навчитися з проекту з відкритим кодом.
Я завантажував джерело Firefox і повільно видаляв його. Іншими словами, я б взяв джерело та видалив усі функції закладок. Потім я б видалив можливість обробляти аддони. Потім я видалив весь код щодо збереження файлів. Я буду продовжувати цей процес до тих пір , поки я отримав дуже основний веб - браузер. Я б переглянув цей код.
Потім я б почав будувати свій власний. Я б взяв знання, отримані завдяки роз'єднанню Firefox, і вклав би їх у створення нового браузера.
Цілому багато удачі вам!
exe
файл, після встановлення якого я отримую вихідну папку з великою кількістю dll
файлів. Як мені вивчити фактичний код, який це зробив, і логіку, яка стоїть за цим?
Зараз Udacity має курс "Створення веб-браузера" - https://www.udacity.com/course/programming-languages--cs262
Ви можете почати з чітко сформованого та дійсного XHTML, що має бути простіше, ніж тег-суп, який ваш браузер зустріне в реальному "житті".
Тоді ви повинні знайти спосіб перетворити справжній HTML з Інтернету відповідно до ваших потреб.
Але не жартуйте: браузер - це не маленький проект.
дуже амбіційний проект, але один розробник не може зробити це сам, вам потрібна команда (менеджер проекту, тестувальники ...), і, можливо, вам варто переглянути свій вибір мови c # працює лише у Windows (я знаю моно в Linux, але це не те саме) у будь-якому разі я бажаю тобі удачі, і я буду радий користуватися вашим браузером
У вас справді багато вільного часу, чи не так? AFAIK, більшість браузерів були написані на C ++, не всі користувачі мають платформу .NET, встановлену на своїх комп'ютерах, і якщо вони це роблять, можливо, це не потрібна версія.
Це може зайняти роки, але в будь-якому випадку, є багато браузерів з відкритим кодом, FireFox, Google Chrome .. тощо. Ви можете почати з перегляду коду, удачі в цьому :)