目前web开发中充斥着各种各样的模板引擎,从前端到后端,性能优劣暂且不论,剖析其大体工作方式,可以概括为:实例化模板!也就是将Controller处理结果生产的Model数据通过模板引擎渲染View(模板引擎约定的模板),再把渲染后的结果呈现给用户。只不过分前端模板引擎和后端模板引擎之分。
后端模板引擎,据我接触的Beetl所言,就是在服务器端,实现页面渲染。今天@九月推荐给我的一些前端模板引擎,是工作在前端(也就是客户端,将渲染工作交给了客户端浏览器处理)。比较了一下他们的工作原理,我们站在更好的节省服务器性能的角度考虑,可以实现一种新的web开发模式,这种模式,不仅可以兼顾Web显示方式,而且还兼容客户端访问形式,而且不需要花费太多的代价。
首先我们必须要明确一点,服务器的核心职责是什么?网络服务如果按照MVC模式来表述,服务器的核心职责应该是Controller,数据库的核心职责是Model,客户端或者浏览器的职责是View。从服务器的核心职责上讲,它应该仅仅是接收客户端的请求并作出应答!服务器只负责处理数据,对页面的渲染应该完全交给客户端来完成,而且客户端是可以胜任的。如果你将浏览器看成是一个可以提供丰富支持的客户端就应该理解了,其实B/S模式本质上也是C/S。
我们以前开发的WEB程序,对浏览器的概念比较淡泊,造成这样的原因也许是我们对浏览器的认识不够造成的。可能我们认为浏览器很傻瓜,一切都需要我们告诉他改怎么做怎么做才能正确的完成任务,所以我们不得不把浏览器本该做的工作抢过来完成--渲染页面!但是目前浏览器已经足够强大,再配合强大的JavaScript,可以说是“不再傻瓜”了!
那我们现在就应该回归本质,让他们各司其责,做自己最拿手的事!
好了,我做了这么多铺垫,最重要的目的就是提出一种新的WEB开发模式(也许这个模式早已经出现,我可能刚刚感受到她的魅力而已),这种模式可以兼顾为客户端与浏览器提供服务。
大致思路如下:
当客户端请求服务器时,服务器首先判断请求介质类型,如果是浏览器,将请求处理后的数据汇同页面反馈给浏览器,此页面包含了页面渲染逻辑和处理后的数据,剩下的任务交给浏览器解释;如果请求介质是诸如移动定制客户端,则仅仅需要将数据反馈给客户端即可。
作为对上一步的优化,如果客户端是浏览器,它需求再次请求同类资源时,完全可以告知服务器端只需要传递数据即可,仍旧沿用之前的页面处理方式显示数据。
通过这样的处理,可以大大减少浏览器与服务器端交互数据,让服务器更专注于业务,从而达到客户端按需索取的目的。
实现这样的处理可以借助于简单的服务器端模板引擎和稍微复杂的前端模板引擎,也就是把浏览器该干的事,还给浏览器!
一些关于前端的模板引擎参考文档:
(1)【javascript激增的思考03】MVVM与Knockout
(2)artTemplate--新一代 javascript 模板引擎
(3)JS的模板引擎实现(一)