weex 目前是阿里旗下在用:淘宝、外卖等等。
react native :腾讯 京东 facebook等等。
解释上面这个表格:
需求:点击列表的名字旁边的箭头,进行相应的排序:
1.表格中的数据从哪来的:数据库中查询的
2. 这些查询到的数据,存放到哪里了:这些数据在浏览器的内存中存放着,而且是以对象数组的形式来表示的。
3. 这些数据,是怎么渲染到页面上的呢:
方案1 :手动for循环整个数组,然后手动拼接字符串str += ‘’
方案2:试用模板引擎,art-templete
明显方案2 更方便,但是本质是一样的。for循环
4. 思考:上述两个方案,有没有性能上的问题?
5. 如果用户点击了时间排序,想按照时间从大到小进行排序,那么步骤如下:
1.触发点击事件,在事件中,把内存中的对象数组重新排序
2. 当排序完成后,页面是旧的,但是内存中的 对象数组是 新的
3. 想办法,吧最新的数组, 重新 渲染到页面上;
6. 分析与总结:上述方案,只有实现了把数据渲染到页面上的能力,但是并没有把性能做到最优
7. 如何才能把性能做到最优:按需渲染页面(只渲染更新的数据 所对应的页面元素)
8. 如何实现页面的按需更新呢?获取内存中的新旧两颗DOM树,进行对比,得到 需要 更新的DOM元素。
*这里普及一下页面的呈现过程:
1. 浏览器请求服务器,获取页面HTML代码
2. 浏览器要先在内存中解析DOM结构,并在浏览器内存中,渲染出一颗 DOM树
3. 浏览器把DOM树呈现到页面上*
- 如何 获取到 新旧DOM树,从而实现DOM树的对比呢?
分析:浏览器中,并没有直接提供 获取DOM树的API,因此我们无法拿到浏览器内存中的DOM树 - 程序员可以手动模拟 新旧 两颗DOM树:
- 程序员如何手动模拟呢????
例:模拟一个DOM元素:(使用js)
模拟程序如下:
12. 程序员手动模拟的这两颗新旧DOM树,就是React 中虚拟DOM的概念。
总结:什么是虚拟DOM?
本质:用js 对象的形式,来模拟网页上DOM嵌套关系(虚拟DOM是以js对象的形式存在的)
目的:实现网页的高效更新