如何提高HTML页面加载速度
降低页面的比重
1去除不必要的空白和注释, 将inline的script和css放到外部文件中。 HTML Tidy这个工具可以用来自动的去除空白。还有一些其他的工具能够压缩javascript代码,比如将比较长的标志符换成短的,通过这种方式,尽量的减少页面的比重。
减少文件的数量
将少一个webpage被加载时所需要的下载的文件数量,有些browser具有cache的设置,如果一个css或是javascript文件没有被改变的话,它就不会再去下载一遍。通过这样的设置,也可能减少文件下载的数量。
减少Domain查询
对于每个Domain的查询,都需要去检索DNS, 过多的Domian查询会导致页面加载速度变慢。
缓存重用的内容
确保所有可以被缓存的数据都已被缓存,并在恰当的时间过期。
尤其要注意的是:Last-Modified header,它会记录下静态最近被改动的时间,而对于大多数web服务器来讲,都会默认的为静态文件提供这样的头。
js:避免使用eval或者是函数构造器
js解释器在执行代码前,会进行类似预编译的操作,首先会创建一个当前执行环境下的活动对象,并将那些用var声明的变量设置为活动对象的属性,但是此时这些变量的赋值都是undefined, 并将那些以funciton定义的函数也添加为活动对象的属性,而他们的值真是函数的定义。
使用eval时,传递给它的string内容,因为无法进行预编译,所以解释器也无法丢代码进行优化。这样的结果就是eval的效率相当低。
同时,在所以可以用string代替函数的地方,都不要用string来代替,而应该直接传一个函数过去。
js: 尽量使用局部变量而非全局变量
局部变量的查找速度比全局变量高出许多。
举个例子
var aGlobalVar = 1;function doSomething(val) { var i = 1000; var agv = aGlobalVar; while(i--) { agv += val; }; aGlobalVar = agv;};doSomething(10);
function StringBuffer() { this.buffer = [];}StringBuffer.prototype.append = function append(string) { this.buffer.push(string); return this;};StringBuffer.prototype.toString = function toString() { return this.buffer.join("");}var buf = new StringBuffer();buf.append("hello");buf.append("world");alert(buf.toString());
var foo = document.createDocumentFragment();foo.appendChild(document.createElement('p'));foo.appendChild(document.createElement('p'));foo.firstChild.appendChild(document.createElement('p'));document.body.appendChild(foo);
var original = document.getElementById('container');var cloned = original.cloneNode(true);cloned.setAttribute('width', '50%');var elem, contents;for(var i = 0; i < textlist.length; i++) { elem = document.createElement('p'); contents = document.createTextNode(textlist[i]); elem.appendChild(contents); cloned.appendChiled(elem);}original.parentNode.replaceChild(cloned, original);