熟悉浏览器的工作原理, 对于前端程序员来说至关重要, 而能够用 JavaScript 实现一个简单的浏览器引擎, 将会最大程度加深对浏览器的理解, 同时也乐趣无穷 !
在这个专栏, 我将分享如何用 JavaScript 实现一个浏览器的核心功能, 不需要特别的前置知识, 不需要任何第三方库, 实现的内容将包括:
- HTTP 请求库
- 用于构建 DOM 的 HTML Parser
- 用于添加样式的 CSS Parser 和 样式计算
- 支持 flex 布局的排版引擎
- 渲染引擎和绘制
因为涉及到自己实现网络请求, 所以最终是运行在 Node.js 环境下而非浏览器环境.
最终的效果将会是, 假设你的本地服务器上有一个 HTML 文件, 内容如下:
html
<style>
.container {
display: flex;
flex-direction: column-reverse;
flex-wrap: wrap-reverse;
justify-content: center;
align-content: space-between;
width: 100px;
height: 100px;
background: gray;
}
.item {
width: 20px;
height: 20px;
background: green;
}
.red {
background: red;
}
.yellow {
background: yellow;
}
</style>
<div class="container">
<div class="item red"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item yellow"></div>
<div class="item yellow"></div>
</div>
当你在 chrome 中打开这个页面时是这样的:
而当你在终端中输入
shell
$ node src/_main.js 127.0.0.1:8000/24
之后, 你将在终端中看到:
完全通过你自己的请求、解析、排版, 最终将一个一个像素画在终端中, 组成一个页面.
下一篇, 从实现一个 HTTP 请求库开始 !