多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 闲话js前端框架 前端人员=美工+设计+代码+测试 ——题记 **专题文章:** 一、从avalonjs的模板说起 二、庞大的angularjs 三、再也不想碰DOM 四、组件化?有没有后端的事? 五、再看自己一年前设计的微型渲染引擎 六、在浏览器标准上做文章 七、抛开浏览器,构建应用容器 八、为何Flash、银光和Java都在网页端一蹶不振 本文属 西风逍遥游 原创, 转载请注明出处: 西风世界 [http://blog.csdn.net/xfxyy_sxfancy](http://blog.csdn.net/xfxyy_sxfancy) ### 三、再也不想碰DOM 我只能说,在复杂应用中,DOM操作是危险的。 如果你在写一个网站,你写下了一段html: ~~~ <!DOCTYPE html> <html> <head> <title>test</title> </head> <body> <h1>Welcome</h1> <div class="left"> <ul> <li><a href="#">登录</a></li> ... </ul> </div> <div class="content"> ... </div> </body> </html> ~~~ 你本以为代码会好好的工作,但是发现事实并非如此,因为你的同事在代码里增加了这样的部分: ~~~ $('.left a').click(...) ~~~ 原因只是因为他也想给他负责的页面中,如下代码中增加了特殊处理: ~~~ <!DOCTYPE html> <html> <head> <title>test2</title> </head> <body> <div class="left"> <a href="#">ajax更新</a> </div> </body> </html> ~~~ 哦,够了,你会发现,DOM操作必须时刻注意着,第一,要正确的选择到对应的元素;第二,比小心不能影响其他人的工作。 另外,你会发现更为悲惨的事情,如果你的代码全是自己写的,那么还好,但如果引入的第三方库,你根本不知道,这个库会将dom树修改成什么样子。 DOM比较慢,我们应该尽可能的减少不良的DOM操作,例如大批量的重建DOM,或者是更新DOM时,重建了不变的节点等。 ### 避免DOM带来的麻烦 避免手动DOM操作的最简单方法,就是尽量使用前端模板,这样往往能够使得DOM操作变成模板或组件的变动。你会发现,对应的DOM操作被自动实现了,而且被有效的限定在指定的作用域中。 所以我们去看,很少发现angularjs会出现几个人或库对同一个DOM进行修改操作,原因就是DOM操作被内化了,并不直接暴露给用户。而模型的修改和引用库,都得到了良好的封装,不会影响其他部分。 但前端模板也不是万能的,因为很多原因,例如要引入一个jQuery的库,你又很难找到和他一样作用的angularjs的版本,那么没法,你就只能考虑使用。 ### 使用虚拟DOM技术 Reactjs是一项非常具有革新意义的技术,将前端的视图显示做到了一个新的高度。 首先React不是一个框架,他只是一个视图层,但这个视图层的功能确实厉害。使用React时,你无需关心你实现界面效果的过程,而只需要关注每一个画面。 于是,你需要做的就是告诉React,你要渲染的效果是什么: ~~~ render: function() { return <header> { this.state.name ? <div>this.state.name</div> : null } </header>; } ~~~ 如果你以前用过innerHTML,那么应该会深有体会,在更新html时,全部的dom节点都会重建,然后所有的事件绑定都消失了,这个体验非常差。而ReactJS,恰恰提供了一个smart版的innerHTML,智能的分析出你改变的部分。 而React的另一个好处是你可以在服务器上渲染它,因为React只关注界面及数据,在服务器上也一样,你可以得到同样的输出结果,从而避免了搜索引擎优化上的大量困扰。