Większość współczesnych przeglądarek internetowych to gigantyczne bestie i prawdopodobnie dość słabo zaprojektowane, ponieważ one (i sama sieć) ewoluowały w dość przypadkowy sposób.
Musisz zacząć od bardzo wyraźnego określenia celów swojego projektu (i tego, co chcesz osiągnąć). Czy robisz to tylko dla przyjemności, czy też oczekujesz, że inni będą używać Twojej przeglądarki? Jeśli spodziewasz się, że inni będą go używać, jaka będzie dla nich zachęta? Nierealistyczne jest oczekiwanie, że opracujesz nową przeglądarkę od podstaw, z której każdy będzie mógł korzystać jako zamiennik dla Chrome, Safari, Firefox, IE, Opera itp. Wszystkie te projekty mają 10-15 lat przewagi. ciebie, a zanim ich dogonisz, będą przed tobą kolejne 10-15 lat. Poza tym mają za sobą znacznie większą siłę roboczą, więc jeśli chcesz, aby Twój projekt zakończył się sukcesem, w pewnym momencie będziesz potrzebować tej siły roboczej.
To jest powód, dla którego Apple i Google, duże firmy z dużymi zasobami, nie zaczęły od zera. Nawet Microsoft nie zaczynał od zera. Oryginalny IE był oparty na Mosaic. Jedynymi znaczącymi przeglądarkami, które istnieją do dziś i zostały uruchomione od podstaw, są Opera , Konqueror i Lynx, które niestety mają niewielki udział w rynku. Zapomnijmy na chwilę o Lynxie, ponieważ jest to przeglądarka tekstowa i prawdopodobnie jedynym powodem, dla którego nadal istnieje, jest to, że obsługuje tę konkretną niszę. Opera jest prawdopodobnie jedną z najlepszych przeglądarek, jakie kiedykolwiek stworzono, a mimo to nigdy nie miała dużego udziału w rynku, więc pamiętaj, że sukces i innowacje to nie to samo. KHTML to silnik Konquerora, który sam nigdy nie odniósł dużego sukcesu, ale jest podstawą WebKit, z którego korzystają zarówno Apple, jak i Google. Myślę, że można z całą pewnością argumentować, że gdyby KHTML nigdy nie został stworzony, nie byłoby ani Safari, ani Chrome. Co ciekawe, zarówno KHTML, jak i Opera zostały w dużej mierze wyprodukowane przez norweskich programistów pracujących w tym samym budynku w Oslo.
Musisz spojrzeć na budowanie przeglądarki internetowej, tak jak na budowanie systemu operacyjnego, ponieważ zasadniczo to jest przeglądarka - jest to system operacyjny do uruchamiania aplikacji internetowych. I podobnie jak system operacyjny, przeglądarka internetowa jest bardzo złożonym oprogramowaniem z wieloma komponentami. Oczywiście ludziom udało się stworzyć od podstaw nowe systemy operacyjne. Przychodzi mi na myśl Linus Torvalds. Stworzył Linuksa, jeden z najbardziej udanych systemów operacyjnych w historii.
Oczywiście stajesz przed dodatkowym wyzwaniem, które sprawia, że zbudowanie nowej, udanej przeglądarki jest trudniejsze niż zbudowanie nowego, udanego systemu operacyjnego. Oczekuje się, że przeglądarki będą bezbłędnie uruchamiać cały starszy kod unoszący się w sieci. Teraz przypuśćmy, że Linusowi Torvaldsowi powiedziano, że jego nowy system operacyjny nie będzie miał znaczenia, jeśli nie będzie całkowicie wstecznie kompatybilny z UNIXem lub jakimś istniejącym systemem operacyjnym. Wątpię, żeby się tym przejmował, a Linux prawdopodobnie nie istniałby dzisiaj. Realistycznie rzecz biorąc, jedynym powodem, dla którego Linux stał się popularny, był fakt, że został dobrze zaprojektowany, a projekt GNU był w stanie stworzyć narzędzia do przenoszenia ogromnych ilości istniejącego kodu do Linuksa. Bez ideologicznego wsparcia GNU dla Linuksa nigdy nie miałby szans.
Zakładając, że naprawdę jesteś wystarczająco ambitny (lub nierozsądny), aby spróbować stworzyć nową odnoszącą sukcesy przeglądarkę, powinieneś się skupić na architekturze i designie . Nie ma praktycznego powodu, aby tworzyć nową przeglądarkę od zera, chyba że masz pewność, że możesz w jakiś sposób ulepszyć projekt istniejących przeglądarek. Oznacza to, że musisz wystarczająco dobrze zapoznać się z kodem WebKit i Gecko , aby zrozumieć podjęte przez nich decyzje projektowe, ale nie powinieneś próbować kopiować ich projektu, ponieważ w przeciwnym razie równie dobrze możesz po prostu użyć ich kodu.
Moje osobiste przemyślenia (bez przeprowadzania wystarczających badań) są takie, że dzisiejsze przeglądarki nie są wystarczająco modułowe. Gdybym miał stworzyć nową przeglądarkę, znalazłbym sposób na ułatwienie wymiany elementów (na przykład zamianę jednego silnika JavaScript na inny) i dałbym użytkownikowi dużo większą kontrolę niż obecnie ma to w istniejących przeglądarkach . Nowoczesne przeglądarki i projektanci stron internetowych odebrały użytkownikowi prawie całą kontrolę. Dlaczego nie mogę, jako użytkownik, powiedzieć przeglądarce internetowej, jak ma renderować zawartość wyświetlaną na moim komputerze? Oryginalny HTML podał jedynie wytyczne dotyczące struktury treści, az biegiem czasu nowsze standardy stały się coraz bardziej dogmatyczne, do tego stopnia, że użytkownik jest teraz zdany na całkowitą łaskę projektanta stron internetowych. Atrakcyjność Linuksa polegała na tym, że przywracał kontrolę użytkownikowi, a to „
Inną rzeczą, którą spędziłbym na badaniu, na twoim miejscu, są zasady projektowania systemu operacyjnego. Zaprojektowanie dobrej przeglądarki powinno przynajmniej w teorii wymagać tych samych zasad, co zaprojektowanie dobrego systemu operacyjnego - zwłaszcza w odniesieniu do współbieżnych procesów, modeli bezpieczeństwa itp.
Wreszcie, po przeprowadzeniu wielu badań, myślę, że od tego należy zacząć kodowanie:
Przeprojektuj Mosaic, ale z własnymi pomysłami projektowymi. To również proponuję, jeśli robisz to tylko dla zabawy lub dla własnej korzyści edukacyjnej. Przeczytaj oryginalne specyfikacje HTML 1.0 i HTML 2.0, a także specyfikacje HTTP 1.1 i aktualne specyfikacje identyfikatora URI i upewnij się, że Twoja przeglądarka jest zgodna ze wszystkimi tymi specyfikacjami. Możesz oczywiście pobrać istniejące oprogramowanie, które już obsługuje protokoły transportu, konwencje URI itp., Ale jeśli poważnie myślisz o zaprojektowaniu własnej przeglądarki, myślę, że dobrym ćwiczeniem jest zrobienie tych rzeczy również od zera, więc otrzymujesz wyczucie, jak wszystkie elementy układanki pasują do siebie. Pod koniec kroku 0 powinieneś mieć przeglądarkę, która jest co najmniej porównywalna z najnowocześniejszą przeglądarką z lat 90-tych. To dobry pierwszy kamień milowy. I faktycznie możesz pobrać oryginalną mozaikę pod adresemftp://ftp.ncsa.uiuc.edu/Mosaic/ i zobacz, jak wypada na tle Twojej przeglądarki. Jest to również dobre ćwiczenie, aby zobaczyć, jak obecne witryny internetowe renderują się w starożytnej przeglądarce, takiej jak Mosaic.
Dodaj obsługę DOM do swojej przeglądarki. Skoncentruj się najpierw na W3C DOM Level 1 i Level 2, ponieważ prawie wszystkie obecne przeglądarki w pełni je obsługują. Następnie spójrz na Poziom 3 i Poziom 4. DOM jest niezwykle fundamentalny dla programowania stron internetowych, więc jeśli zamierzasz faktycznie zbudować nowoczesną przeglądarkę internetową, cały projekt musi wziąć to pod uwagę. Ponieważ piszesz przeglądarkę w języku C #, warto rozważyć, w jaki sposób można wykorzystać istniejący model obiektowy .NET na swoją korzyść.
Przyjrzyj się istniejącym silnikom skryptów i zobacz, czy możesz je przenieść do swojego projektu. Zniechęciłbym Cię do pisania własnego interpretera JavaScript, nie tylko dlatego, że sam w sobie jest to bardzo duży projekt, ale dlatego, że tak dużo pracy zostało już włożone w optymalizację kompilatorów JS (np. V8). Więc jeśli nie jesteś guru w projektowaniu kompilatorów, twój ręcznie zbudowany interpreter JS prawdopodobnie będzie gorszy od tego, co już istnieje, nawet jeśli bezbłędnie spełnia specyfikacje EMCAScript. Ponownie, myślę, że silnik skryptów powinien być czymś, co i tak jest całkowicie oddzielnym modułem od rzeczywistej przeglądarki, więc myślę, że znacznie bardziej przydatne byłoby posiadanie frameworka, który pozwala zastąpić dowolny silnik skryptowy, niż budować silnik skryptów który działa tylko z Twoją przeglądarką.
Zapoznaj się z kodem źródłowym HTML / CSS / JS 10-20 najpopularniejszych witryn w Ameryce Północnej (Google, Facebook, YouTube, Twitter, Wikipedia, Amazon, popularne platformy blogowe itp.) I stwórz przeglądarkę tak, aby dobrze współpracowała z tymi witrynami . Jest to nieco łatwiejszy do rozwiązania problem niż tworzenie przeglądarki, która spełnia wszystkie istniejące standardy (coś, czego obecne przeglądarki wciąż nie robią idealnie), a tym bardziej tworzenie przeglądarki, która poprawnie renderuje wszystkie witryny w sieci (nikt nie może Zrób to). Ludzie będą narzekać, że twoja przeglądarka łamie standardy i tak dalej, ale to nie jest tak duży problem, jak ludzie narzekają, że nie mogą uzyskać dostępu do Google lub Facebooka za pomocą przeglądarki. Nie przychodzi mi do głowy żadna przeglądarka, która poprawnie spełniałaby wszystkie (lub nawet większość) standardów w swoim pierwszym wydaniu, więc mówię, że nawet nie próbujcie.