返回列表 回复 发帖

HTML-加速、再加速

web开发人员是否必须掌握复杂的组件技术才能加快html页面的访问速度?答案是:不一定!实际上,有许多关于HTML与DHTML方面的技巧,它们原理简单而且上手容易。无论是技术高超的老手,还是初涉编程的菜鸟,领会这些都十分必要。" N, k; E& ^* i- [0 s! e3 u! y
明显HTML,暗渡“公用脚本”
4 s( G9 C( p7 [4 |) u* i5 ^/ o! u2 P6 E
减少web页面下载时间的关键就是设法减小文件大小。当多个页面共用一些成分内容时,就可以考虑将这些公用部分单独分离出来。比如:我们可以将多个HTML页面都用到的脚本程序编写成独立存在的.js文件,然后再在页面中按如下方式调用它:, A9 o# v9 H# s/ O
5 t; b5 {3 X: B& C: w0 B
<script src="myfile.js"></script>
2 W! r5 _. v* R1 u& k' p4 i: H# R1 {
这样,公用文件只需要下载一次,然后就进入缓冲区。等下次再次调用包含公用文件的html页面时,下载时间明显减少。) O( x# u+ C8 K0 I' o- h  X. L
. ^/ g. @3 S& m1 S0 w
让样式表内容进入地下工作
" O) i5 W/ I7 x1 X0 x1 A1 C6 L2 z) p7 l  S1 w; L9 ]. M
CSS是HTML装扮器,一个漂亮的Web页面不可能没有它。HTML页面中有多种引用CSS的方法,不同的方法导致的效率也不一样。通常,我们可以将定义于<style></style>间的样式控制代码提取出来,保存到单独的.css文件中,然后在HTML页面中以<LINK>标记或者@import标记的方式进行引用:
# {0 K# W) ?* n2 y# F4 a6 S. {
; b+ f, y  L& V- V/ [9 |<style> # M6 o/ b8 P4 C4 g) E: h
@import url("mysheet1.css"); + s/ O6 `3 q# q# q( a+ J
</style> . M5 |1 o* v2 u0 D3 l
* p. V* I; @& u" q7 N
( }0 p1 `$ B4 ?+ H' Z6 Y6 l$ y4 `$ V& K
请注意2点:1、.css文件中无需包括<style>标记;2、@import和LINK标记要定义在HTML页面的HEAD部分。1 @- ^. h0 {, }: @4 c6 S6 B
! E: ^3 W! l. h  O9 L4 z3 p
宝贵内存节省两法
2 C1 q8 S6 Q" K' a" T$ {6 H: d4 X& ^. _, l  I
尽量减少HTML页面占用的内存空间是加快页面下载速度的一个有效方法。在这方面,有2个需要注意的问题:
" s) G! S- c. C" N, z+ p# J
1 N- [+ f4 x, z8 U  a1、使用同一种脚本语言/ @1 \/ B: i9 S8 b! d
* L! o  W0 K# ~9 k1 ?2 z4 Y" f
HTML页面离不开脚本程序的支持,我们经常会在页面中嵌入多种脚本语言,比如Javascript与VBscript。但是,不知你发觉没有:这样的混合使用减慢了页面的访问速度。原因在于:要解释并运行多种脚本代码,就必须在内存中装载多种脚本引擎。所以,请尽量在页面中使用同一种脚本语言编写代码。. j% r- K8 E$ F  t

! Z4 j" D$ _4 c( L6 \2、巧用IFrame
& y0 a: ?2 j, S8 u9 u& P
9 ]5 x8 b$ G+ z0 z你使用过<IFRAME>标记吗?它可是一个非常美妙的功能。如果要在一个HTML文档中包含第2个页面的内容,通常的方法是使用<FRAMESET>标记。但是有了<IFRAME>,一切变得简单了。比如,开发一个文档预览页面,可以在左边放置一系列主题,在右边放置一个IFRAME,其中包含要预览的文档;当鼠标掠过左边的每一个主题链接时,就在右边建立一个新的IFRAME以预览文档。这样做,代码效率无疑是高效的,但同时导致了繁重的处理过程,最终是缓慢的速度。
2 w! |! Y  E" p0 S7 ]0 R4 b8 `9 j6 w- r. e+ ^( E( l, n. W
没关系,我们有办法:只使用单一的IFRAME。当鼠标指向一个新主题时,只需要修改IFRAME元素的SRC属性即可。这样,任何时间内只会有一个预览文档保留在内存。" C( ], E" f5 A; Z7 B
2 e& X6 y8 S' E3 o1 W: W- O/ N4 P
择优选用动画定位属性
: u8 q. y( s% q8 p% V0 g; l/ k4 t% ^. V+ z' `8 E8 a! g+ ~
每天上网浏览页面,你一定会看到许多动画效果。比如,一个可爱的小兔子在页面上来回地走动 ... 实现这个效果的核心技术就是CCS定位。通常,我们是使用element.style.left和element.style.top2个属性来达到图形定位的目的。但是,这样做会产生一些问题:left属性返回一个字符串,并且其中包含了度量单位(比如100px)。因此,要设定新的位置坐标,就必须首先对这个字符串返回值进行处理,然后才能赋值,象下面一样:' T* r# y+ F. R+ d0 F4 @; U

. ?+ C8 \: `! Kdim stringLeft, intLeft : R) V) u# P; Q6 Y5 ?* q

% g% P3 l) ?! _% WstringLeft = element.style.left 3 }* r$ f. \8 L5 I5 y
9 z* A4 Q" k0 M* C/ t1 Q( A0 G
intLeft = parseInt(stringLeft)
4 x8 f: x7 o" W+ o
: O! Z( P3 P7 M- d* U. VintLeft = intLeft + 10
; G; D& Q+ n/ z5 ?/ e- k
* u/ Q2 l; v$ `3 j( j. Felement.style.left = intLeft; " ]& N; |' {5 y, [. j
! i; r. h/ D4 v
你一定会感觉做这么点事情竟要编写这么复杂的代码,是否有更简洁的方法?当然有!请看这4个属性:posLeft、posTop、posWidth 和 posHeight,它们对应于相应字符串返回值的点数数值。好了,使用这些属性重新编写代码实现上面代码实现的功能:
& @+ z6 U8 L! w5 k* W* ^
- z) ]) v8 A$ R' I& N6 Welement.style.posLeft += 10& J0 k/ u2 `2 h
9 n" e$ u5 a7 O
代码短小、速度却更快!# z5 N0 `! I( K5 L$ A

/ U6 N" L& u. D( S6 V/ H循环控制多个动画- x' f) y, V# c: ]& D
说到制作动画效果,当然离不开定时器的运用。通常的方法就是使用window.setTimeout来不断地定位页面上的元素。但是,如果页面上有多个动画要显示,是不是就要设定多个定时器呢?答案是No!原因很简单:定时器功能将消耗掉大量宝贵的系统资源。可是我们仍能在页面上控制多个动画,技巧就是使用一个循环。在循环中根据不同的变量值控制相应动画的位置,整个循环中只使用一个window.setTimeout()函数调用。
: T$ }9 [; Y2 T  R/ n6 V0 n" L5 h; V% r3 B$ E- z
Visibility快于Display
& C9 S6 x9 c9 @7 `# `3 r
* B! r5 y8 o/ e, X" c1 D! J让图画时隐时现会创造很有趣的效果,有2种方法可以实现这个目的:使用CSS的visibility属性或者display属性。对于绝对位置元素,diaplay和visibility具有同样的效果。两者的区别在于:设置为display:none的元素将不再占用文档流的空间,而设置为visibility:hidden的元素仍然保留原位置。
" ^* v& F' W0 a5 J3 y( E" }4 o
- v) V# ]9 W: {7 ]2 k但是如果要处理绝对位置的元素,使用visibility会更快。# H& h9 j' W2 _& n
) D2 d& v1 i; ]8 T3 m4 F9 v1 I
从小处着手% W* K. E; |: ]3 n* f
$ H, s8 O+ Q5 K9 {+ z2 d
编写DHTML网页的一个重要提示是:从小处着手。初次编写DHTML页面时,一定不要试图在页面中使用你了解到的全部DHTML功能。每次可以只使用一个单一的新特征,并且仔细地观察由此产生的变化。如果发现性能有所下降,就可以快速地找到为什么。. X# Z! T# L8 c1 L& b
3 n* M! S$ |6 i& n
脚本的DEFER化
$ d* m2 {2 g, V0 _- Q) A) W/ I  D5 `" `0 `. S6 S: t! f
DEFER是脚本程序强大功能中的一个“无名英雄”。你可能从没有使用过它,但是看完这里的介绍后,相信你就离不开它。它告诉浏览器script段包含了无需立即执行的代码,并且,与SRC属性联合使用,它还可以使这些脚本在后台被下载,前台的内容则正常显示给用户。
0 b! F7 S3 |% [. N
1 m' }+ M% B; K# ]. Z4 a) J3 Q6 j- @3 m. m3 n; G
最后请注意两点:
: ~; K! @0 ?, N. A
! H. g7 r1 c! j: h5 y& L1、不要在defer型的脚本程序段中调用document.write命令,因为document.write将产生直接输出效果。3 c4 l; G5 Q! P$ M7 Q( i
$ @* |8 ^3 u  r1 f$ x9 \
2、而且,不要在defer型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数。
! _9 W- s3 p' }& v& n7 P: j8 V$ H0 g# z$ s9 J
保持同一URL的大小写一致性+ S9 C! i0 v8 D# W1 Y, O2 m7 b

& h5 A, g% B9 [4 x! j3 {2 a我们都知道UNIX服务器是大小写敏感的,但是你知道吗:Internet Explorer的缓冲区也是区别对待大小写字符串的。因此,作为web开发者,一定要记住保持相同链接的URL字符串在不同位置的大小写的一致性。否则,就会在浏览器的缓冲区中存放同一位置的不同文件备份,也增加了下载同一位置内容的请求次数。这些都无疑降低了web访问效率。所以请谨记:同一位置的URL,在不同页面中请保持URL字符串的大小写一致性。8 n8 e& h& x/ v. e" `" K& g

+ c4 a# B! ^7 W让标记有始有终3 b+ j! i3 L4 e$ X

0 e. p+ a% u& H0 F自己编写或者查看他人的HTML代码时,我们一定都遇到过标记有头无尾的情况。比如:* Z9 i. j; D7 z! e
( F( ?: f& s- T
<P>有头无尾标记举例 , C2 {; }7 ]# `& K* H( F& L% c# c
<UL>
) r( {, d: Y" x& d* f# F7 V" P) q<LI>第一个
! P- X, I/ t- X; Q8 l7 g: R<LI>第二个; \; s- S+ W4 D# A- s
<LI>第三个
& b" z. I. e5 r1 q$ J& S1 R</UL>
1 k$ Z7 H% ]/ C. }, M8 Z1 k# D1 V; _, K# ^9 [4 P
很明显,上面的代码中缺少三个</LI>结束标记。但是这并不妨碍它的正确执行。在HTML中,这样的标记还有一些,例如FRAME、IMG和P。 4 K: o7 \: i* S! Z, P

$ G) e$ l6 ]4 |+ r4 j% s可是请不要偷懒,请将结束标记写完整,这样做不仅使HTML代码格式规范,更可以加速页面的显示速度。因为Internet Explorer将不会花费时间判断和计算段落或者列表项目在哪里结束。
/ h! t( P( l1 |+ h
# g: j- i/ X& Q0 x<P>有头有尾标记举例</P>
8 C8 K+ T/ N' s0 S2 V3 X<UL>
& [  ^+ A/ s! z<LI>第一个</LI>
6 N7 x9 @# a! n$ C# C4 l6 V<LI>第二个</LI> ( B0 E  ^5 j% {- _9 l0 c
<LI>第三个</LI>
1 a. Q# s/ F3 O; n) c</UL> , B* y1 y! ^+ {0 J8 Q
, K2 |+ U, p4 B
OK,以上列举了有关加速HTML页面的10个处理技巧,描述这些很简单,但是只有真正领会并掌握其中的本质,并且举一反三,才会编写出更快、更好的程序。
返回列表