隐藏框架对客户端缓存性能的推动

ZDNet软件频道 时间:2002-10-10 作者:BUILDER.COM |  我要评论()
本文关键词:
客户端缓冲决不是医治你Web开发问题的万能药。但是它的确是提高客户端性能的一个相对简单的方法。
先前的文章里,我讲解过一个基于浏览器的应用程序,这个程序将对象预先加载到隐藏框架(hidden frames)里,以提高应用程序的性能。这些对象包括选择框、图像和Java Swing applet。预先加载对象一完成,这些对象就被从隐藏框架复制到可视框架,在可视框架里它们会和其他任何对象一样运行。虽然预加载会极大地提高性能,但是以以太网的速度,将这些对象加载到他们自己的隐藏框架里需要大约5分钟。要是以拨号的速度计算,我都可以开车50英里到纽约去喝杯咖啡,吃点百吉饼。

预加载对象有其自身的优势,但是这种实现方法有一些很大的问题,所以我决定修改我的方法。我对使用超过一次的对象进行缓冲,而不是预加载。在客户端,我没有对每个对象使用单独的隐藏框架来缓冲,而是使用了一个隐藏框架和相关的多个内嵌框架来缓冲。这就可以让我能够使用隐藏框架的文档对象模型框架集合来查看到底是什么被缓冲了。例如,如果隐藏框架叫Dwarfs,那么框架集合就叫做top.Dwarfs.frames。如果要找到一个叫做Grumpy的内嵌框架,你就要调用一个Listing A这样的JavaScript函数。

InlineFrame这个函数能够找到一个存在的内嵌框架,但是假如内嵌框架不存在,并且返回为空又会怎么样呢?嗯,如果它不存在,你就必须要创建一个。

开始吧

要在隐藏框架里创建一个内嵌框架,你就要使用一个客户端的JavaScript document.write。幸运的是,从浏览器的角度来看,内嵌框架是HTML文档。这就允许你通过查询内嵌框架的readyState来确定这个文档是否完整。但是持续查询内嵌框架的readyState只会降低速度。处理这个问题更好的方法是创建一个JavaScript的函数,并使用window.setTimeout来推迟这个函数的执行。这样你就可以定期检查内嵌框架的readyState,而不用浪费客户端机器的资源,资源浪费过多会把浏览器拖垮。

内嵌框架的文档一完成,将一个对象复制到可视框架就是一件相对容易的事了。所需要的仅仅是把innerHTML从内嵌框架复制到可视框架里。

setSpan脚本

我写了一个叫做setSpan的JavaScript函数,这样就不用做创建动态内嵌框架的苦差了。这个函数的作用是检查并决定一个内嵌框架是已经被创建了还是已经完成了。如果内嵌框架没有被创建,那么它将创建一个并等待其完成。一旦内嵌框架的readyState完成了,setSpan会把innerHTML复制到目标,同时调用一个初始化的程序,如果给出了的话。

为了保证连续性,我决定为每个对象都建立自己的动态服务器页面(ASP),并把它们放在一个叫做IFrame的文件夹里。此外,还是为了保证连续性,有一个include用于在可视框架上显示每个对象。这个include包含一个HTML的区域标签(span tag)和指向setSpan的参照,见Listing B

我已经为本文中所讨论的程序提供了代码样本,这些样本已经可以下载了,它们还为你实现客户端缓冲而使用隐藏动态内嵌框架提供一个基本的轮廓。

结论

客户端缓冲决不是医治你Web开发问题的万能药。你每天都要为编写快速、干净和专业的应用程序而奋斗,但是这个方法不能解决你必须面对的这些问题。但是它的确是提高客户端性能的一个相对简单的方法。



本文为ZDNet China版权所有,未经许可严禁转载。

责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134