Vue 3.0 Updates
Evan You
VueFes Japan 2018
Vue 3.0がやってくる
Vue 3.0がやってくる
Vue 3.0がやってくる
Vue 3.0がやってくる
Vue 3.0がやってくる
より速く
仮想DOMの実装を�フルスクラッチから作り直し
mountとpatch処理が最大100%向上
プロキシを用いた監視で
完全な言語レベル & 速度向上
ネイティブプロキシによる
プロパティプロキシの高速化
Object.definePropertyはさようなら!
実行中のオーバーヘッド削減のため
コンパイル時にヒントを追加
コンポーネント探索の高速化 + 単型の呼び出し + 子要素の種類を検出
<Comp></Comp>
<div>
<span></span>
</div>
テンプレート
コンパイラ出力
render() {
const Comp = resolveComponent('Comp', this)
return createFragment([
createComponentVNode(Comp, null, null, 0 /* 子要素なし */),
createElementVNode('div', null, [
createElementVNode('span', null, null, 0 /* 子要素なし */)
], 2 /* 子vnodeは1つ */)
], 8 /* 複数のキーを持たない子 */)
}
スロット生成の最適化
<Comp>
<div>{{ hello }}</div>
</Comp>
テンプレート
コンパイラ出力
render() {
return h(Comp, null, {
default: () => [h('div', this.hello)]
}, 16 /* コンパイラが生成したスロット */)
}
Static Tree Hoisting (静的ツリーの巻き上げ)
<div>
<span class="foo">
Static
</span>
<span>
{{ dynamic }}
</span>
</div>
テンプレート
コンパイラ出力
const __static1 = h('span', {
class: 'foo'
}, 'static')
render() {
return h('div', [
__static1,
h('span', this.dynamic)
])
}
Static Props Hoisting (静的プロパティの巻き上げ)
<div id="foo" class="bar">
{{ text }}
</div>
テンプレート
コンパイラ出力
const __props1 = {
id: 'foo',
class: 'bar'
}
render() {
return h('div', __props1, this.text)
}
Inline Handler Hoisting(インラインハンドラの巻き上げ)
<Comp @event="count++"/>
テンプレート
コンパイラ出力
import { getBoundMethod } from 'vue'
function __fn1 () {
this.count++
}
render() {
return h(Comp, {
onEvent: getBoundMethod(__fn1, this)
})
}
コンポーネントインスタンスの初期化が
最大で100%も高速化
アプリ全体の
速度が2倍に
メモリ使用量が半減
v2.5
v3.0-proto
より小さく
Tree-shakingへの対応
新コアのランタイムサイズ: Gzipで10kb以下
よりメンテナンスしやすく
アーキテクチャの整理
パッケージの分離
テストセットアップの改善
よりネイティブ向けに作りやすく
カスタムレンダラAPI
Demo
あなたのコードの
保守性を向上
リアクティビティAPI
Demo
コンポーネントの
再描画を
理解する
Demo
TSXによる
TypeScriptサポートの強化
Demo
警告トレースの改善
Demo
実験的な Hooks API
Demo
実験的な “Time Slicing”
Demo
ありがとうございました!