svelte前生今世
introduction

catalogue
- Feature
- Source code
- Application
- Optimize
feature
- component
- lifectyle
- scoped styles
- custom-elements
hello world
1 | {#if isVisible} |
hello world
1 | <script> |
编译
词法分析 => 语法分析
递归下降
BNF范式:四则运算规则如下,<非终结符>1
2
3
4
5
6
7
8
9
10<expr> ::= <expr> + <term>
| <expr> - <term>
| <term>
<term> ::= <term> * <factor>
| <term> / <factor>
| <factor>
<factor> ::= ( <expr> )
| Num
递归下降
举个🌰
9 * (4 + 2) 进行语法分析
递归下降
1 | 1. <expr> => <expr> |
递归下降
例1需要消除左递归,不然就是死循环
1 | <expr> ::= <term> <expr_tail> |
递归下降-js实现
Source code
一个svelte-component怎么产生的?
Source code
1.parse文件
2.验证文件
3.生成代码
Source code
1.parse文件

Source code
component生成顺序
- createComment
- add_css
- 根据parse得到的bind、event-handlers、refs相关绑定在context
- prototype指向methods
optimize
1.借鉴vue-property-decorator
1 | //before |
optimize
1 | //before |
optimize
methods和data的this已隔离开,操作很不便
event-binding不支持func,必须func()
子组件不支持透传className
defineProperty、list performance
optimize
不支持watch,在generator中dispatchObservers做钩子
style不支持Object
refs中绑定addEventListener很多,需要removeEventListener