页加速之图形处理篇
在维护 站的过程用,可能遇到过这样的情况:辛辛苦苦做出来的页面,但图片过多, 页结构、表格结构复杂,程序冗长,使得加载速度很慢! 页总是不能完全的展现在浏览者面前。
以后的几篇文章将 页减肥方面的一些经验介绍给大家,希望大家都来讨论,说说自己的观点!
1、合并图片
尽量把几个可能组合在一起的图片制作成一张图片,这是因为浏览器对 页中的每个图片都会做个别请求,也就是说如果 页中有5张图片,那么浏览器就会向WEB服务器提出5次请求,这必然会增加服务器的负担,从而使得速度变慢!当然大图片除外。
2、指定宽高
在 页中镶入图片的时候,一定注明高度和宽度,如:
这样,公用文件只需要下载一次,然后就进入缓冲区。等下次再次调用包含公用文件的HTML页面时,下载时间明显减少。
让样式表内容进入地下工作
CSS是HTML装扮器,一个漂亮的WEB页面不可能没有它。HTML页面中有多种引用CSS的方法,不同的方法导致的效率也不一样。通常,我们可以将定义于间的样式控制代码提取出来,保存到单独的.CSS文件中,然后在HTML页面中以标记或者@IMPORT标记的方式进行引用:
请注意2点:1、.CSS文件中无需包括
宝贵内存节省两法
尽量减少HTML页面占用的内存空间是加快页面下载速度的一个有效方法。在这方面,有2个需要注意的问题:
1、使用同一种脚本语言
HTML页面离不开脚本程序的支持,我们经常会在页面中嵌入多种脚本语言,比如JAVASCRIPT与VBSCRIPT。但是,不知你发觉没有:这样的混合使用减慢了页面的访问速度。原因在于:要解释并运行多种脚本代码,就必须在内存中装载多种脚本引擎。所以,请尽量在页面中使用同一种脚本语言编写代码。
2、巧用IFRAME
你使用过
没关系,我们有办法:只使用单一的IFRAME。当鼠标指向一个新主题时,只需要修改IFRAME元素的SRC属性即可。这样,任何时间内只会有一个预览文档保留在内存。
择优选用动画定位属性
每天上 浏览页面,你一定会看到许多动画效果。比如,一个可爱的小兔子在页面上来回地走动 … 实现这个效果的核心技术就是CCS定位。通常,我们是使用ELEMENT.STYLE.LEFT和ELEMENT.STYLE.TOP2个属性来达到图形定位的目的。但是,这样做会产生一些问题:LEFT属性返回一个字符串,并且其中包含了度量单位(比如100PX)。因此,要设定新的位置坐标,就必须首先对这个字符串返回值进行处理,然后才能赋值,象下面一样:
DIM STRINGLEFT, INTLEFT
STRINGLEFT = ELEMENT.STYLE.LEFT
INTLEFT = PARSEINT(STRINGLEFT)
INTLEFT = INTLEFT + 10
ELEMENT.STYLE.LEFT = INTLEFT;
你一定会感觉做这么点事情竟要编写这么复杂的代码,是否有更简洁的方法然有!请看这4个属性:POSLEFT、POSTOP、POSWIDTH 和 POSHEIGHT,它们对应于相应字符串返回值的点数数值。好了,使用这些属性重新编写代码实现上面代码实现的功能:
ELEMENT.STYLE.POSLEFT += 10
代码短小、速度却更快!
页加速之进阶下篇
循环控制多个动画
说到制作动画效果,当然离不开定时器的运用。通常的方法就是使用WINDOW.SETTIMEOUT来不断地定位页面上的元素。但是,如果页面上有多个动画要显示,是不是就要设定多个定时器呢案是NO!原因很简单:定时器功能将消耗掉大量宝贵的系统资源。可是我们仍能在页面上控制多个动画,技巧就是使用一个循环。在循环中根据不同的变量值控制相应动画的位置,整个循环中只使用一个WINDOW.SETTIMEOUT()函数调用。
VISIBILITY快于DISPLAY
让图画时隐时现会创造很有趣的效果,有2种方法可以实现这个目的:使用CSS的VISIBILITY属性或者DISPLAY属性。对于绝对位置元素,DIAPLAY和VISIBILITY具有同样的效果。两者的区别在于:设置为DISPLAY:NONE的元素将不再占用文档流的空间,而设置为VISIBILITY:HIDDEN的元素仍然保留原位置。
但是如果要处理绝对位置的元素,使用VISIBILITY会更快。
从小处着手
编写DHTML 页的一个重要提示是:从小处着手。初次编写DHTML页面时,一定不要试图在页面中使用你了解到的全部DHTML功能。每次可以只使用一个单一的新特征,并且仔细地观察由此产生的变化。如果发现性能有所下降,就可以快速地找到为什么。
脚本的DEFER化
DEFER是脚本程序强大功能中的一个“无名英雄”。你可能从没有使用过它,但是看完这里的介绍后,相信你就离不开它。它告诉浏览器SCRIPT段包含了无需立即执行的代码,并且,与SRC属性联合使用,它还可以使这些脚本在后台被下载,前台的内容则正常显示给用户。
最后请注意两点:
1、不要在DEFER型的脚本程序段中调用DOCUMENT.WRITE命令,因为DOCUMENT.WRITE将产生直接输出效果。
2、而且,不要在DEFER型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数。
保持同一URL的大小写一致性
我们都知道UNIX服务器是大小写敏感的,但是你知道吗:INTERNET EXPLORER的缓冲区也是区别对待大小写字符串的。因此,作为WEB开发者,一定要记住保持相同链接的URL字符串在不同位置的大小写的一致性。否则,就会在浏览器的缓冲区中存放同一位置的不同文件备份,也增加了下载同一位置内容的请求次数。这些都无疑降低了WEB访问效率。所以请谨记:同一位置的URL,在不同页面中请保持URL字符串的大小写一致性。
让标记有始有终
自己编写或者查看他人的HTML代码时,我们一定都遇到过标记有头无尾的情况。比如:
有头无尾标记举例
- 第一个
- 第二个
- 第三个
很明显,上面的代码中缺少三个结束标记。但是这并不妨碍它的正确执行。在HTML中,这样的标记还有一些,例如FRAME、IMG和P。
可是请不要偷懒,请将结束标记写完整,这样做不仅使HTML代码格式规范,更可以加速页面的显示速度。因为INTERNET EXPLORER将不会花费时间判断和计算段落或者列表项目在哪里结束。
有头有尾标记举例
- 第一个
- 第二个
- 第三个
OK,以上列举了有关加速HTML页面的10个处理技巧,描述这些很简单,但是只有真正领会并掌握其中的本质,并且举一反三,才会编写出更快、更好的程序
数据加载采用异步,这样在页面加载的过程中,还会通知服务器处理,直到处理结束通知页面更新。
DHTML性能提高的其他技巧
DHTML性能提高的其他技巧
Truly 译
More Performance Tips(英文)
http://msdn.microsoft.com/library/default.asprl=/library/en-us/dndude/html/dude100499.asp
DHTML性能提高的其他技巧
在微软开发过程的最重要的事情之一就是为产品进行调优。
多数开发人员把性能调优看作是某个功能的审查部分之一。如何为Win32程序调优进行了很多年,有大量的文献可以参考。
令许多DHTML和HTML开发者们的头痛的就是没有足够多的技术文献来了解使页面更快方法和造成了页面缓慢的原因。当然,也有一些简单的事情,比如页面上不使用2MB的图片。不过,在对DHTML页面提速的工作中,我们发现了一些有趣的技巧和窍门,可以用来提高你自己页面的性能。
这次我要调整的代码示例是一个table构建程序。它要构建一个1000多行表格,通过使用document.createElement()和element.insertBefore()方法。每行包含一个单元格cell。每个单元格内容为”Text”。实现这一代码的最差劲的代码是什么样子的一小段优化代码可以改善多少常多!
我起初写了一段自以为很快的代码,我努力避免了一些非常低级的错误,比如不进行变量声明,或者在同一个页面同时使用VBScript和JScript。代码如下:
查看示例1
所有的测试都运行在Intel Pentium II 233 ,64MB内存, Windows NT? 4.0和Internet Explorer 5,每个页面都从本地磁盘加载。所有的事件计时都是从页面的初始加载到页面“静止”(所有的队列事件都已执行,屏幕重绘完成)。基线页面(我称作‘Test1’)花费了2328毫秒。
在DHTML页面中经常用到,并且相当耗时的操作是全局对象引用。像“document”, “body”,“window”等,这些变量引用的代价比简单通过一个局部变量引用要昂贵的多。
我决定首先要改动的就是将“document.body”的引用“缓存”到一个变量“theBody”。只是给body属性加了另一个引用,因此这个改动相对小。
代码中增加了该行:
var theBody = document.body;
并且将行:
document.body.insertBefore(tbl, null);
调整为:
theBody.insertBefore(tbl, null);
查看示例2
上面的调整并没有影响到整个的时间,仅仅节省了3ms加载时间。然而,如果我们把这段代码引入到主循环中,结果将会变得极具意义。
接下来我打算做的是把document对象本身也缓存起来。由于document对象被引用了3002次在这个示例中。
下面是将document缓存到局部变量后的版本,所有其它的引用也指向了局部变量:
查看示例3
这个版本的页面加载只需要2100ms。这样以来,我们将应用程序的整个运行时间减少了10%,并且很有实际意义。获取一个document变量比局部变量大约多花费4ms时间。
一个是否常用的document加载速度的优化是为