基于Struts2签的BigPipe技术实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Struts2签的BigPipe技术实现

基于Struts2标签的BigPipe技术实现 引言 Facebook创立了一项技术名为BigPipe。该技术改善了Facebook用户的用户体验,减少页面加载等待时间,它的原理简单、合理。本文借鉴BigPipe的思想,针对Struts2和JSP技术的特点,实现了单线程与多线程版的BigPipe。两种版本的实现各有优缺点,它们与Facebook的BigPipe不尽相同,其中多线程版的BigPipe实现与Facebook较为类似。单线程与多线程实现方式都可以明显改善用户体验,文章之所以要介绍两种实现,是笔者认为二者都有更加适用的情境,在很多情况下,单线程的使用情况更多、更简单。文章将用实际的使用实例,对两种实现进行详细的介绍。在阅读文章之前,读者最好先了解一下Struts2自定义标签的开发方法、Java的Concurrent多线程框架以及FreeMarker模板引擎,这将帮助你更好的理解文章的BigPipe实现方式。 技术简介 现在的浏览器,显示网页时需要经历连续的几个步骤,分别是请求网页-服务器端的页面生成-返回全部内容-浏览器渲染,在这一过程中,“服务器的页面生成”到“返回全部内容”阶段,浏览器什么也不做,大部分浏览器就直接显示空白。可想而知,如果页面庞大,那么等待的时间就很长,这很可能导致大量的用户丢失。Facebook提出的BigPipe技术就是为了解决这个问题,它是基于多线程实现,原理大致可以分为以下两点。 ?? 将一个页面分为多个的PageLet,每个的PageLet实际上就是一个HTML片段,每个PageLet的页面内容由单独的线程生成与处理。 ?? 由于使用了多线程,PageLet内容的返回顺序无法确定,因此如果将内容直接写回HTML文档内,它的位置是无法确定的,因此需要借助JavaScript将内容插入到正确的位置,因为脚本代码的位置无关紧要。 实现了以上两点,最终的效果将是网页中首先出现网页结构和基本的、简单的信息,然后才会在网页的各个PageLet位置出现具体内容,这些PageLet没有按流模型从上到下从左到右出现,而是“并行出现”,加载页面速度加快。从以上的分析,这种技术至少有两种好处。 ?? 首先出现的结构和基本信息,告诉用户页面正在加载,是有希望的。 ?? 并行加载的机制使得某个PageLet的缓慢不会影响到别的PageLet的加载。 ?? 所有的PageLet在同一个HTTP请求内处理。 接下来,文章先进行示例程序的展示与分析,给出各种实现方式的对比,然后讲解了基于Struts2的BigPipe标签开发,最后总结了单线程与多线程实现方式的优缺点。 示例展示 为了让读者对本文所讲内容有一个实际的印象,提升您对该技术的兴趣,本文以一个例子,采用三种实现方式来实现,该例子实现了一个2*3的表格,按从左到右、从上到下的顺序(也就是文档流模型的加载顺序),标明了序号。每个单元格的内容,都使用Thread.sleep方法模拟了加载时间较长的HTML内容。按照文档流顺序,每个单元格的线程等待时间分别是1、2、3、4、5、6秒。我们观察三种实现方式:普通实现、单线程BigPipe、多线程BigPipe,看它们对结果的影响。 ? 示例程序在附件部分,它是一个JEE Eclipse工程,读者可以到Eclipse官方网站下载JEE Eclipse,下载后导入工程。另外运行示例程序需要Tomcat 6+的支持。 普通方式 打开附件,查看WebContent下的normal.jsp源码,如清单1所示。 清单 1. normal.jsp源码 %@ page language=java contentType=text/html; charset=utf-8 pageEncoding=utf-8% %long pstart = System.currentTimeMillis();% table border=1 width=100% height=500 caption普通例子/caption tr td % long start = System.currentTimeMillis(); Thread.sleep(1000); long seconds = System.currentTimeMillis() - start; % 1秒的内容br 加载耗时:%=seconds% 毫秒; /td //中间的沈略 td % start = System.currentTimeMillis(); Thread.sleep(6000); seconds = System.currentTimeMillis() - st

文档评论(0)

zhuangbi6646 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档