Newtoo - mengembangkan mesin browser penuh dari awal pada tahun 2018?

gambar

Hai Nama saya Dmitry Kozichev.

Hari ini saya akan memberi tahu Anda tentang upaya saya untuk membuat mesin browser web modern saya sendiri dari awal.

Mesin saya disebut Newtoo.

Apa itu Newtoo


Jadi Newtoo. Mengapa saya membuatnya?

Kebetulan hanya ada 4 mesin peramban populer di dunia yang begitu rumit sehingga pengembangnya sendiri tidak tahu bahkan setengah dari basis kode mereka, dan begitu maju dalam teknologi sehingga hanya buang-buang waktu untuk mulai mengejar ketinggalannya.

Benarkah begitu? Proyek saya dibuat untuk mengulang eksploitasi mesin peramban modern dan memeriksa seberapa realistisnya membuat alternatif yang layak untuk proyek besar yang sejarahnya dimulai pada tahun sembilan puluhan. Mesin baru saya sedang dibuat dari awal, yang artinya ceritanya dimulai hari ini.

Ideologi Newtoo adalah menunjukkan halaman lebih cepat daripada yang lain.

Bagaimana Newtoo Bekerja Lebih Cepat


Seperti yang saya katakan sebelumnya, mesin peramban utama telah berkembang selama beberapa tahun. Kesalahan-kesalahan yang dibuat pada tahap awal pengembangan tetap dalam proyek sampai akhir. Contoh paling mencolok dari ini adalah smart pointer di C ++ - ini adalah sintaks yang lebih kompleks, overhead yang besar ketika bekerja, membuat dan menghapus smart pointer. Selain itu, ada begitu banyak jenis pointer pintar dan Anda perlu tahu mana yang harus digunakan, karena masing-masing memiliki kejutan sendiri. Lihat file ini dari WebKit. Ketika Anda melihat kode seperti itu, sintaks dari pointer cerdas, Anda mencoba untuk tenang dan bernapas secara merata, tetapi kode semacam ini adalah seluruh webkit dari ujung kepala hingga ujung kaki. Tidak ada kekurangan seperti itu di mesin saya.

Apa yang ada di dalam kotak


Mari kita lihat apa yang terdiri dari Newtoo

Saat ini, bagian-bagian proyek berikut telah dilaksanakan:

  • Pengurai HTML
  • Serializer HTML
  • Pengurai CSS (penyeleksi, aturan, dan properti)
  • Serializer CSS
  • API DOM Dasar 1

Sisa bagian dari proyek yang belum diimplementasikan:

  • CSS cascading (perhitungan gaya css)
  • Linker
  • Render
  • Mesin virtual JS dan acara
  • Penangan Kejadian dan Pemilihan Halaman Interaktif

Pengurai HTML


Pengurai HTML saya bisa disebut modern. Untuk mulai dengan, itu dibangun sesuai dengan standar HTML5 . Ini memperhitungkan kesalahan Anda.

Misalnya, Anda lupa memberi tanda kutip saat mengetik atribut

<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/id424881/


All Articles