引子
virtual-dom
(简称vdom
)的概念大规模的推广还是得益于react
出现。
相比于频繁的手动去操作dom
,vdom
出现后,
框架根据标签结构生成虚拟dom
树(virtual-dom-tree
简称vtree
),然后保留着这个vtree
不能释放,当下一次数据变化后,再生成一个新的vtree
与上一个比较,然后把差异部分更新到真实dom
上
我们只需要改变数据,由框架自动diff vdom
然后再更新到dom
上。所以后续我们只关注数据的变化即可,不再与dom
直接打交道。
目前许多前端框架使用vdom
已然是标配了。
问题
vdom
虽好,但不是在任何场景下都适用,比如在寸土寸金的移动端。
由于框架需要保留着完整的vtree
、变化后需要整个diff vtree
,所以整体来看性能并不高(网上一些文章说引入vdom
可以提升性能的说法是不准确的),在移动端的某些场景下,vdom
的使用反而会带来性能问题。
移动端的列表场景,活动页面等,通常数据变化时需要对大块区域进行更新,在追求性能的要求下,我们能否仍然保留对开发人员友好,也能达到更高性能的刷新方式呢?
方案
原生dom
操作一片html
最高效的方法是innerHTML
再看一下我们的模板写法(这里以underscote.template的写法为例,其它写法也是同样的道理)