
你好 我叫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 :
. .
, ( ), , .
, , , , , , ( ). , , . , ., <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