抛开react,如何理解virtual dom和immutability

681 查看

去年以来,React的出现为前端框架设计和编程模式吹来了一阵春风。很多概念,无论是原本已有的、还是由React首先提出的,都因为React的流行而倍受关注,成为大家研究和学习的热点。本篇分享主要就聚焦于这些概念中出现频率较高的两个:virtual dom(虚拟DOM)和data immutability(数据不变性)。希望通过几段代码和同学们分享博主对于这两个概念的思考和理解。

文章分为四个部分,由大家最为熟悉的基于dom node的编程开始:
1. 基于模板和dom node的编程:回顾前端传统的编程模式,简单总结前端发展的趋势和潮流
2. 面向immutable data model的编程:浅析在virtual dom出现之前,为什么基于immutability的编程不具备大规模流行的条件
3. 引入virtual dom,优化渲染性能:介绍virtual dom以及一些常见的性能优化技巧,给出性能比较的测试方法和结论
4. virtual dom和redux的整合:示范如何与redux整合

 

1. 基于模板和dom node的编程

基于模板和dom node的编程是前端开发中最为传统和深入人心的开发方式。这种开发方式编码简单、模式灵活、学习曲线平滑,深受大家的喜爱。模版层渲染既可以在后端完成(如smarty、velocity、jade)也可以在前端完成(如mustache,handlebars),而dom操作一般则会借助于诸如jquery、yui之类封装良好的类库。本文为了方便同学们在纯前端环境中进行实验,将采用handlebars + jquery的技术选型。其中handlebars负责前端渲染,jquery负责事件监听和dom操作。从本节开始,将使用不同的方式实现一个支持添加、删除操作的列表,大致界面如下:

首先简要分析一下代码逻辑:
模板放在script标签中,type设置为text/template,用于稍后渲染;由于需要频繁添加、删除dom元素,因此选用事件代理(delegation),以避免频繁处理添加、删除监听器的逻辑。html代码:

javascript代码: