读书 -《Ajax模式与最佳实践》- 内容分块模式(上)
意图
原文:内容分块模式使得增量地建造一个HTML页面成为可能,从而允许单个HTML页面的逻辑分布在不同的地点,由用户来决定内容的加载时间和逻辑。
注解:作者意图应该在于实现是Web2.0,就像博客里的豆瓣读书分享。不过中国的现实是,还很少互联网企业能像Google、Twitter、Facebook能提供完整的API。Web2.0分享主要是通过Script标签、Flash等等的注入实现的。RESTful的Web架构也因为企业的开放意愿不高,很难发挥作用。内容分块多用在新闻门户、电子商务等的分类信息显示。
动机
原文:
最初,当Web尚处在它的幼年时,HTML内容设计师创建不完整的文档。通过使用文档链接使这些不完整的页面变得完整,一个完整的文档是文档树中页面的总和。
理想情况下,网站的开发者想要获得的是一种能力,能够改变需要改变的内容,而且保持其余内容不变。毕竟,未曾改变的内容应该保持不变,而且不是重新加载。
注解:三种更新技术的比较:1、通过链接转到节点页面;2、通过页面帧(FrameSet、IFrame)控制局部更新;3、通过Ajax局部更新/Ajax作为载体显示注入内容;
优点:逻辑独立,编写简单。
缺点:难以保持当前状态(页面浏览位置,正在编辑的内容等)。
启示:尽可能通过Url来区分独立的业务,使业务之间耦合降低,使页面更易于分享。(也就是URL路由兴起的原因)
优点:容易保持较固定状态,包括使用状态、信息、设置等等繁多而次要的个人信息。
缺点:FrameSet难以布局,IE下IFrame也有bug,帧之间沟通不方便。
启示:可以用页面帧来加载业务页面,这样既能保持用户信息,又使业务页面解耦。
优点:处理流程容易维护。
缺点:通信逻辑复杂,缓存维护困难。(不过已有很多优秀的js库可以帮助降低复杂度)
启示:局部独立内容注入。(局部独立内容注入已被大量用于门户网站和分享网站)
适用性
1、内容关系稳定(原文:每个区域的内容是未知的,但是内容将会放到哪个区域是已知的。)
2、页面内容很多,但更新内容很少(原文:当将要下载的内容太大了,会导致用户过多的等待的时候。)
3、内容分块独立(原文:当显示的内容之间彼此不相关的时候。)
相关模式
1、原文:内容分块模式是任何Ajax应用的核心模式
2、原文:处理阶段:生成事件、请求、响应、分块的注入
体系架构
1、在Web应用中的实现顺序
a.无需下载重复内容
b.可以应用于不同上下文(根据环境的css和js变化)
c.只更新特定范围
d.环境不受影响(不代表没有受影响的风险)
2、在内容分块中定义内容
a.HTML
b.图片
c.JavaScript(逻辑代码)
d.XML
e.JSON
注释:原文提到当数据结构有复杂筛选需求的时候,因为有XPath的缘故,XML比起JSON是有优势的。但是我觉得如果业务需要用到XPath的时候,客户端已经是自组建界面的RIA了(如GMail),内容分块的作用纯粹是数据下载。一般情况用JSON没有太大问题。