Ich habe 8 Wochen lang einen kleinen Browser gebaut.
(github.com/beginner-jhj)Hallo! Ich bin ein Schüler der 12. Klasse und stehe kurz vor dem Studienbeginn in Informatik.
In den vergangenen 8 Wochen habe ich mit C++ und Qt von Grund auf eine kleine Browser-Engine gebaut.
Da es mein erster Kontakt mit C++ war, gab es unzählige Versuch-und-Irrtum-Momente, aber ich habe viel gelernt, indem ich die Kernelemente der Rendering-Pipeline selbst in Code umgesetzt habe.
Ich habe die gesamte Rendering-Pipeline in 5 Schritte aufgeteilt und implementiert:
-
Analyse von HTML-Strings und Erzeugung eines DOM-Baums (einschließlich Fehlerkorrektur)
-
Parsen von CSS-Regeln und Berechnung der Computed Styles über die Cascade
-
Berechnung von Position und Größe der Boxen auf Basis des Block-/Inline-Modells
-
Caching und Laden von Bildern sowie anschließende Neuberechnung des Layouts (Reflow)
-
Abschließendes Painting mit dem Qt Graphics View Framework
Da der Code in C++ geschrieben ist, das ich gerade erst lerne, gibt es sicher noch viele Schwächen.
Ich würde mich sehr freuen, wenn ihr mir Feedback zur Code-Struktur oder zu möglichen Verbesserungen gebt!
Mehr Details findet ihr unter https://github.com/beginner-jhj/mini_browser/blob/main/README.ko.md
14 Kommentare
Zunächst einmal: viel Zuspruch.
Schon auf die Idee zu kommen, einen Webbrowser zu bauen …
Jetzt, wo Sie eine gute Erfahrung gemacht haben …
Sie könnten den Chromium-Code herunterladen …
ihn bauen
und auch die Erfahrung machen, ihn zu analysieren.
Schöpfung ist schließlich die Mutter der Nachahmung.
Das ist wirklich ein interessantes Projekt. Ich denke, ohne Claude direkt zu arbeiten hätte vielleicht noch mehr Lerngewinn gebracht, aber da die Nutzung von AI inzwischen der Trend ist, scheint auch das eine gute Erfahrung gewesen zu sein.
Eine Idee hätte ich noch: Auf Basis dieser Erfahrung wäre es vielleicht spannend, einen OG-Tag-Parser zu bauen.
OG-Tags sind einfache Informationen wie das repräsentative Vorschaubild, das auf einer Webseite gesetzt ist. Das Auslesen ist mit einem DOM-Parser zwar einfach, aber DOM-Parser haben das Problem, dass sie schwergewichtig sind.
Daher könnte es eine nützliche Bibliothek werden, wenn man einen kleinen und effizienten Parser implementiert, der ohne einen anderen DOM-Parser auskommt, nicht das gesamte DOM parst und nur die Informationen bestimmter Tags extrahiert.
Gerade in mobilen Apps fehlt mir so eine Bibliothek. Wenn man sie mit JavaScript/Kotlin/Swift für Mobile entwickelt, könnte daraus eine beliebte Open-Source-Bibliothek werden.
Ich erinnere mich nur daran, dass ich nach dem Ende der CSAT-Prüfung bis zum Studienbeginn hemmungslos herumgehangen habe … Aber nachdem ich das README gelesen habe, scheint es, als hätten Sie die Kernaussagen sehr gut verstanden. Ich habe dieses Buch auch gelesen und es einmal in Swift umgesetzt. Haha
Huch, darf ich fragen, welches Buch das ist? Ich habe mir das README einmal durchgelesen, aber ich glaube, dort wird kein Buch erwähnt ...!
Im README steht so etwas nicht. Der Inhalt war dem Buch ähnlich, deshalb habe ich mich geirrt ... Entschuldigung ;;;
Es handelt sich um das Buch „Von Grund auf einen Webbrowser bauen“. Die Beispiele im Buch sind in Python implementiert.
Vielen Dank für den Hinweis, wirklich großartig :D Dann sollte ich wohl mal bei Kyobo Bookstore kurz reinschauen..!
Als ich in der 12. Klasse war, hab ich mich in der Dev-Community aufgespielt, nur weil ich ein bisschen Linux-APM installieren konnte.
Wow, krass.
Hat mir wirklich Spaß gemacht zu lesen!
Schon der Versuch und die Mühe, es zu bauen, sind aus meiner Sicht erstklassig. Das README wirkte fast wie ein eigener Bericht, was es noch interessanter gemacht hat.
Ich bin gespannt, was als Nächstes kommt haha
Wirklich großartig.
Ich habe es nur kurz überflogen, aber als ich in der 12. Klasse war, hätte ich mir so etwas nicht einmal zu träumen gewagt. Ich hoffe, dass du Informatik gut weiterlernst und ein großartiger Ingenieur wirst.
Vielen Dank! Ich werde mich weiterhin anstrengen und zu einem großartigen Ingenieur heranwachsen!
Ich habe den Beitrag mit großem Vergnügen gelesen! Ich hätte persönlich noch eine Frage: Gibt es vielleicht eine Möglichkeit, Sie zu kontaktieren?
Vielen Dank, dass Sie den langen Text gelesen haben! Sie können mich unter hj5014221@gmail.com kontaktieren.
Der Link ist kaputt ;_;
Ah, ich gebe euch den Link zum Haupt-Repo! https://github.com/beginner-jhj/mini_browser