Newtoo-在2018年从头开发完整的浏览器引擎?

图片

你好 我叫Dmitry Kozichev。

今天,我将告诉您有关我从头开始创建自己的现代Web浏览器引擎的尝试。

我的引擎称为Newtoo。

什么是Newtoo


因此,Newtoo。 为什么创建它?

碰巧的是,世界上只有4种流行的浏览器引擎如此复杂,以至于开发人员本身甚至都不知道他们一半的代码库,并且技术如此先进,以至于浪费时间来追赶它们。

真的是这样吗 创建我的项目的目的是重复现代浏览器引擎的开发,并检查创建一个可替代其历史始于90年代的大型项目的现实选择是多么现实。 我的新引擎是从头开始创建的,这意味着它的故事从今天开始。

Newtoo的思想是要比其他页面更快地显示页面。

Newtoo如何更快地工作


正如我之前所说的,主要的浏览器引擎已经开发了好几年。 在开发初期所犯的那些错误将一直保留到项目中,直到最后。 最明显的例子是C ++中的智能指针-这是一种更为复杂的语法,在工作,创建和删除智能指针时会产生很大的开销。 此外, 智能指针的类型很多 ,您需要知道要使用哪种智能指针 ,因为每种智能指针都有其自己的惊喜 。 从WebKit查看文件。 当您看到这样的代码(智能指针的语法)时,您会尝试让自己冷静下来并均匀地呼吸,但是这种代码是从头到脚的整个webkit。 我的引擎中没有这样的缺陷。

盒子里有什么


让我们看看Newtoo由什么组成

目前,该项目的以下部分已经实施:

  • HTML解析器
  • HTML序列化器
  • CSS解析器(选择器,规则和属性)
  • CSS序列化器
  • 基本DOM API 1

项目中尚未实施的其余部分:

  • CSS级联(css样式计算)
  • 连接器
  • 渲染
  • JS虚拟机和事件
  • 事件处理程序和交互式页面选择

HTML解析器


我的HTML解析器可以称为现代。 首先,它是根据HTML5标准构建的。 它考虑到您的任何错误。

例如,您忘记在输入属性时加上引号

<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/zh-CN424881/


All Articles