Newtoo - développer un moteur de navigation à part entière à partir de zéro en 2018?

image

Salut Je m'appelle Dmitry Kozichev.

Aujourd'hui, je vais vous parler de ma tentative de créer mon propre moteur de navigateur Web moderne à partir de zéro.

Mon moteur s'appelle Newtoo.

Qu'est-ce que Newtoo


Alors Newtoo. Pourquoi l'ai-je créé?

Il se trouve qu'il n'y a que 4 moteurs de navigation populaires dans le monde qui sont si complexes que les développeurs eux-mêmes ne connaissent même pas la moitié de leur base de code et sont si avancés en technologie que c'est une perte de temps de commencer à les rattraper.

En est-il vraiment ainsi? Mon projet a été créé pour répéter les exploits des moteurs de navigation modernes et vérifier à quel point il est réaliste de créer une alternative digne des grands projets dont l'histoire commence dans les années 90. Mon nouveau moteur est créé à partir de zéro, ce qui signifie que son histoire commence aujourd'hui.

L'idéologie de Newtoo est d'afficher la page plus rapidement que les autres.

Comment Newtoo fonctionne plus rapidement


Comme je l'ai dit plus tôt, les principaux moteurs de navigation se développent depuis plusieurs années. Ces erreurs commises aux stades initiaux de développement restent dans le projet jusqu'à la fin. L'exemple le plus frappant en est les pointeurs intelligents en C ++ - il s'agit d'une syntaxe encore plus complexe, un gros surcoût lors du travail, de la création et de la suppression de pointeurs intelligents. En outre, il existe de nombreux types de pointeurs intelligents et vous devez savoir lequel utiliser, car chacun a ses propres surprises . Regardez ce fichier de WebKit. Lorsque vous voyez un tel code, la syntaxe des pointeurs intelligents, vous essayez de vous calmer et de respirer uniformément, mais ce type de code est l'ensemble du kit Web de la tête aux pieds. Il n'y a pas de tels défauts dans mon moteur.

Contenu de la boîte


Voyons voir en quoi consiste Newtoo

À l'heure actuelle, les parties suivantes du projet ont été mises en œuvre:

  • Analyseur HTML
  • Sérialiseur HTML
  • Analyseur CSS (sélecteurs, règles et propriétés)
  • Sérialiseur CSS
  • API DOM de base 1

Les autres parties du projet qui ne sont pas encore mises en œuvre:

  • CSS en cascade (calcul de style CSS)
  • Linker
  • Rendu
  • Machine virtuelle JS et événements
  • Gestionnaire d'événements et sélection de page interactive

Analyseur HTML


Mon analyseur HTML peut être appelé moderne. Pour commencer, il est construit selon la norme HTML5 . Il prend en compte toutes vos erreurs.

Par exemple, vous avez oublié de mettre des guillemets lors de la saisie d'un attribut

<article id=hello></article>

,

,


<div>
   <p>First line
   <p>Second line
   <img src="ru/images/2019.png" alt="  !">
   <p>Third line <br> Last line
</div>




<myprefix:span>Hello, world!</myprefix:span>

, , HTML. , , .

HTML


html .

:


<!doctype html><html><head><title>Lorem ipsum</title></head></html>

:


<!doctype html>   - doctype token
<html>            - tag token
<head>            - tag token
<title>           - tag token
Lorem ipsum       - text token
</title>          - close tag token
</head>           - close tag token
</html>           - close tag token

.

6 :

  • (doctype)
  • Javascript css



. .

, ( ), , .

, , , , , , ( ). , , . , .

, <p> .

CSS


css , :

.flex[alignment="right"] { font-weight: light; color: #999 }

, - .

, Newtoo '//' css css javascript.

CSS


, html css, . .

, , , , , .

:

TagName
#Id
.Class
[attr=value]
[attr|=value]
[attr$=value]
[attr~=value]
[attr^=value]
[attr*=value]
.Multi.Class
#Mix#ed.Selec[tor=s]
"Quotes"
'Alternative quotes'
#descedant #child
#parent < #child
#previous + #this
#other ~ #this
.multi, .selectors
#element:hover
#element:active
#element:...

, , .

DOM API


HTML , (DOM). DOM , — , , . C DOM JavaScript c DOM API.

DOM. , html :

document.getElementById("article").innerHTML = " . <b>!</b>";

, , , , , !

JavaScript , API .


, .
, .

Newtoo GitHub

Source: https://habr.com/ru/post/fr424881/


All Articles