`

Web页面的聚合技术

阅读更多

近接触到了Mason,并且了解到了它基础之上的一个MVC框架实现,随即联想到做网站以来接触到的各种各样的页面聚合的场景,颇有意思。

 

页面聚合本身是一种“分而治之”的思想,把复杂的页面分割成可以被重用和独立维护的部分,这些部分的来源灵活,可以来自同一个web app中,也可以来自不同的域;可以聚合独立的子页面(页面集成),也可以聚合数据(数据集成),甚至可以聚合子呈现(模板集成)。

 

客户端聚合

 

这种聚合的最大好处在于把聚合的工作分散到如今越来越强势的客户端,减轻了服务端的压力;另一方面,也从一定程度上简化了服务端的设计。客户端聚合在互联网初期比较少见,如今随着客户端性能越来越优秀,客户端聚合的优势逐渐显示出来。

 

最简单的聚合形式:frame聚合。请看谷百搜索。这种聚合形式的局限性在于,即便使用了frame标签,也依然是两个网站,那么两个子页面之间的交互就由于浏览器的安全限制变得困难。这是一种纯粹的静态聚合的形式,使用HTML的include标签亦类似。

 

客户端模板的聚合方式。例如Velocity、FreeMarker这些传统的模板技术,都可以做到客户端的聚合。一方面从服务端获取静态模板页,因为这些页面几乎是纯静态的,因此性能非常高;另一方面通过ajax技术从服务端获取变化的数据,优先展示主页面内容,优化页面展示体验,二者在页面上通过JavaScript的帮助形成最终的页面效果。

举例来说,比如服务端返回的模板片段是:

 

<div id="user.name">${user.name}</div>

 

再通过ajax从服务端获取到的页面数据是:

 

{user:{name:"Jim", age:"15"}}

 

聚合后的效果:

 

<div id="user.name">Jim</div>
 

例子非常简单,在这种模式下,对于变化数据的获取,可以使用Node.js接口来实现,并使用JSON作为数据传递形式,这个数据服务的子系统变成了一个完全独立于页面展示的数据服务提供者。

 

关于服务端推送技术:在页面聚合的过程中,有些数据实时性强,或者数据量大,无法一次获取完成,需要多次反复从服务端获取数据,而且,这部分数据产生的时间是由服务端确定的。看一看新浪微博、人人网,这些SNS网站中,都大量应用了这种技术。

服务端推送的方式有几种,而传统BS结构的特点是,数据都是去“拉”的,要服务端主动通知客户端需要绕一点点弯。

 

最简单的方式是轮询。客户端不断地ajax查询服务端(例如每隔1分钟查询一下是否有新的数据),甚至不断刷新页面或者子页面。但是这样的办法存在一个问题,就是大量的查询请求很可能是浪费掉的,例如一小时在线用户,每分钟ajax查询一次数据,查询了60次,只有一次是有数据的,那么剩余59次都是白白浪费的。

 

还有一个办法是被称为“Long Pulling”(例如pushlet技术),服务端在接收到客户端的ajax查询请求时,如果没有数据,不要返回,而是hold住这个HTTP连接,直到有数据了再返回。这里的好处显而易见,但是问题也很明显——大量的连接,因此在这种情况下,多路复用技术(可以参考NIO Server的材料,也可以参见这里)就显得格外有用了。

 

第三种办法采用的比较少,就是采用第三方控件,比如Applet、ActiveX等控件,和服务端交互,他们的交互可以超越网页传统的模型,甚至支持非HTTP的协议,由服务端主动推送数据。

 

服务端聚合

 

服务端聚合的本地模板聚合是最传统的聚合形式,是页面重用的基础,由模板引擎解析运算模板为最终的页面,写入输出流。这里以SiteMesh举例:

 

 

配置一个url mapping文件,再在模板上使用SiteMesh标签:

 

    <div class='mainBody'>
      <sitemesh:write property='body'/>
    </div>

 

SSI:服务器端嵌入(Server Side Include),这也是为什么很多老网站的URL都是以.stm、.shtm或.shtml结尾的。它的嵌入和html标签里面的include不一样,SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可生效,但是它的解析需要特定的服务器支持。

 

<!--#include file="extend.htm"-->

 

随着页面缓存在互联网应用世界的称王,Oracle定义了ESI作为一种缓存方式聚合页面的规范,它规定了将Web网页的页面的片段进行缓冲/缓存的技术方式。

 

<esi:include src="http://example.com/1.html" alt="http://bak.example.com/2.html" onerror="continue"/>

 

Portlet聚合。Portlet在早几年的企业门户应用中很常见,它本身是一组规范,也规定了一种聚合页面的方式,可以远程聚合,也可以本地聚合,它可以协助应用将数据实体和展现模板在组网上就分离开,业务节点部署可以非常灵活,Portlet是网站解耦的一大利器:


 

不过Portlet由于在聚合中采用了两次请求转发的方式(一次Action请求、一次render请求),导致效率天然不高。

 

文章系本人原创,转载请注明出处和作者

 

4
0
分享到:
评论
1 楼 username2 2012-11-03  
很多没听过的东西,学习了

相关推荐

    RSS新闻聚合型网站的数据分析系统

    它增强了客户端的通信能力,使得客户端可以异步地与服务端交互,避免了Web页面的整体刷新,提升了Web应用的用户友好性;它增强了客户端的处理能力,提高了网络带宽的使用效率,使得WEB服务器在一定程度上得到解放,提升了...

    基于Python的新闻聚合系统网络爬虫研究.pdf

    虫获取新闻聚合系统的新闻数据,不同网站的页面布局是不同的,因此需要创建开源爬虫,可以在不同页面布局中获取数据。 在网络爬虫开发过程中需要利用Python语言,而网络爬虫Web提取工具为BeautifulSoup,Web应用程序框架...

    美加新闻聚合系统(经典版)

    美加新闻聚合系统——支持自动聚合全球各种语言的RSS信息源,经过5大全自动技术,生成原创内容并实时发布。可以自由扩展信息源,定制模板,完全免费的网站建站软件。 选择正确建站软件——从此就像技术型的网站,...

    美加新闻聚合系统(长尾词SEO版) v4.0.zip

    长期有效:所有页面存入数据库,故此内容长期存在,故此不用担心网页被搜索引擎收录后会出现无法访问的现象。 静态网址:支持网址静态化,促进搜索引擎收录网页。 自由扩展:通过管理后台,可以对该系统实现进行...

    美加PHP新闻聚合系统 v4.0 长尾词SEO版.rar

    长期有效:所有页面存入数据库,故此内容长期存在,故此不用担心网页被搜索引擎收录后会出现无法访问的现象。静态网址:支持网址静态化,促进搜索引擎收录网页。自由扩展:通过管理后台,可以对该系统实现进行频道...

    美加新闻聚合系统源码(经典兼容版) v3.6.rar

     长期有效:所有页面存入数据库,故此内容长期存在,故此不用担心网页被搜索引擎收录后会出现无法访问的现象。  静态网址:支持网址静态化,促进搜索引擎收录网页。  自由扩展:通过管理后台,可以对该系统实现...

    IXNA聚合程序 v0.5.rar

    4.支持站点和时间分类,Tags浏览,单独页面浏览,并运用了ajax技术 5.支持搜索 6.支持导入和导出OPML 7.可显示favicon 8.具有多种主题样式,现有default,bxna两套主题 9.支持Rewrite启用 10.生成SiteMAP0.9 11.多...

    xna.rar_RSS_XNA_atom_opml_聚合

    支持站点和时间分类,Tags浏览,单独页面浏览,并运用了ajax技术 5.支持搜索 6.支持导入和导出OPML 7.可显示favicon 8.具有多种主题样式,现有default,bxna两套主题 9.支持Rewrite启用 10.生成SiteMAP0.9 11.多...

    结合本地计分和全局聚合以对深层Web查询排名实体

    但是当前的Web搜索引擎进行页面级别的排名,对于面向实体的垂直搜索来说,这已经不足。 在本文中,我们提出了一种基于本地评分和全局聚合的,用于深度Web查询的名为LG-ERM的实体级排名机制。 与传统方法不同,LG-...

    用 Asp.Net 建立一个在线 RSS 新闻聚合器

    这意味着,对于 开发者来说,在Web页面 中显示和处理 XML 数据从来没有这么容易过。本文将通过生成一个 RSS2.0 聚合引擎和在线新闻聚合器来学习 XML 和 技术。 本文假设读者熟悉 和 XML。 关键字:rss,syndicating,...

    基于 Spring Boot + Elastic Stack + Vue3 的一站式聚合搜索平台。用户可以在同一页面.zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...

    美加新闻聚合系统3.0

    长期有效:所有页面存入数据库,故此内容长期存在,故此不用担心网页被搜索引擎收录后会出现无法访问的现象。 静态网址:支持网址静态化,促进搜索引擎收录网页。 自由扩展:通过管理后台,可以对该系统实现进行频道...

    课程设计-基于Vue+Express实现的新闻聚合网站项目源码+运行说明(含前端+后端).zip

    本次项目是Web编程项目demo,为新闻聚合网站(聚合了网易新闻/新浪新闻/新华网/人民网),在此网站中有独立的热搜模块(较为简陋),四个新闻平台热点关键词词云及其数据量,同时您可以在网站中进行筛选搜索,结果会...

    Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版.rar

    本书第1版曾荣获Jolt大奖“最佳技术图书”奖。在前两版的内容架构基础上,第3版增加了对Rails 2中新特性和最佳实践的内容介绍。相比第2版中的内容,Rails 2增加了REST、资源、轻量级web service等新特性。本书涵盖...

    ASP.NET4高级程序设计(第4版) 3/3

    此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软的ASP.NETAJAX平台。另外,还专门介绍了ASP.NET4 新增的功能,如MVC 和动态数据等。  ...

    NewsAggregator:全球新闻聚合器:从Web(政治,商业,体育和技术)收集最新新闻,头条新闻,热门话题

    如果进行编辑,页面将重新加载。 您还将在控制台中看到任何棉绒错误。 yarn test 在交互式监视模式下启动测试运行程序。 有关更多信息,请参见关于的部分。 yarn build 构建生产到应用程序build文件夹。 它在生产...

    GOOGLE云计算与AMAZON云计算对比.pdf

    基础架构和服务 图 1 面向服务的 Amazon 平台架构 图 1 显示了 Amazon 平台的抽象架构, 动态网页的内容是由页面呈现组件生 成, 该组件进而查询许多其他服务。一个服务可以使用不同的数据存储来管理其 状态, 这些...

    Google云计算与Amazon云计算对比.doc

    基础架构和服务 图1 面向服务的Amazon平台架构 图1显示了Amazon平台的抽象架构,动态网页的内容是由页面呈现组件生成,该组件 进而查询许多其他服务。一个服务可以使用不同的数据存储来管理其状态,这些数据存 储仅...

Global site tag (gtag.js) - Google Analytics