Skip to content

Commit 9a2efa8

Browse files
committed
chore: adjust
1 parent 3f3359b commit 9a2efa8

File tree

3 files changed

+41
-14
lines changed

3 files changed

+41
-14
lines changed

demo/21-compile.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111
<p>Template</p>
1212
</div>
1313
`
14-
const render = compileToFunction(template)
14+
const { code, render } = compileToFunction(template)
1515

16-
console.log('模板:', template)
17-
console.log('渲染函数:', render)
16+
console.log('模板:\n', template)
17+
console.log('渲染函数代码字符串:\n', code)
18+
console.log('渲染函数:\n', render)
1819
</script>
1920

demo/static/mini-vue.umd.js

Lines changed: 9 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

slides.md

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1869,6 +1869,7 @@ function generate(ast) {
18691869
genCode(ast.codegenNode, context)
18701870

18711871
return {
1872+
ast,
18721873
code: context.code // 渲染函数代码字符串
18731874
}
18741875
}
@@ -2139,8 +2140,8 @@ function baseCompile(template) {
21392140
]
21402141
}
21412142
)
2142-
const code = generate(ast)
2143-
return code
2143+
2144+
return generate(ast)
21442145
}
21452146
```
21462147

@@ -2155,7 +2156,11 @@ function baseCompile(template) {
21552156
function compileToFunction(template) {
21562157
const { code } = baseCompile(template)
21572158
const render = new Function(code)()
2158-
return render
2159+
2160+
return {
2161+
code,
2162+
render,
2163+
}
21592164
}
21602165
```
21612166

@@ -2294,7 +2299,7 @@ function createApp(options = {}) {
22942299
container = document.querySelector(container)
22952300
}
22962301
const template = container.innerHTML
2297-
const render = compileToFunction(template)
2302+
const { render } = compileToFunction(template)
22982303
const setupFn = options.setup || noop
22992304
const setupResult = setupFn() || {}
23002305
const data = proxyRefs(setupResult)
@@ -2379,7 +2384,7 @@ function createApp(options = {}) {
23792384
if (isFunction(options.render)) { // 传入 render 函数
23802385
render = options.render
23812386
} else {
2382-
render = compileToFunction(template)
2387+
({ render } = compileToFunction(template))
23832388
}
23842389
// ...
23852390
const reload = () => {
@@ -2433,6 +2438,24 @@ createApp({
24332438

24342439
</div>
24352440

2441+
---
2442+
2443+
## 关于编译优化
2444+
2445+
我这里其实没做任何的优化,只是把主体逻辑走通了,让代码可以跑起来,而且还有很多功能都没去实现,比如指令的处理,组件的支持等等。
2446+
2447+
实际上在编译阶段,Vue3 内部是做了很多优化处理的,比如:
2448+
2449+
- 动态节点标记 patchFlag,为后续的 diff 做准备
2450+
- 静态提升
2451+
- 事件缓存
2452+
- ...
2453+
2454+
2455+
关于编译优化,可以看看 Vue3 提供的一个模板解析工具大致了解下。
2456+
2457+
[Vue3 Template Explorer](https://template-explorer.vuejs.org/)
2458+
24362459
---
24372460
layout: image
24382461
image: /mikoto-misaka.jpg

0 commit comments

Comments
 (0)