建站极客
网络编程 JavaScript 正文
优化网页之快速的呈现我们的网页
所属分类:
网络编程 / JavaScript
阅读数:
909
收藏 0
赞 0
分享
一.我们需要解决的麻烦 A.减少HTTP请求数. 减少HTTP请求数有什么好处: 降低服务器跟客户端的建立和消除HTTP请求和响应Header的开销 减少服务器为HTTP连接的进程和线程的开销,如果可能,还会包括GZIP压缩的CPU开销. B.减小被请求文件大小, 减少请求数据占用的网络带宽. C.让用户更快的看到想要的结果. D.提高客户端渲染速度. E让浏览器同时能请求更多的数据. F.提高服务器相应速度. G.通过版本化控制客户端Cache. 引用 二.如何解决我们的麻烦 A.如何减少HTTP请求数 1.合并JS文件跟 CSS文件. 2.合并框架图片以及相对变动较少的图片成一张,通过CSS背景切割来完成渲染. 3.合理使用本地Cache来缓存JS/CSS/IMAGE. 4.合理使用UserData缓存JS文件,对于FF用户可以单独请求服务器,这样能解决80%用户的问题. 5.把JS跟CSS合并成一个文件 写法如下: <?header('Content-type: */*');?> <!-- /* window.onload=function(){ document.getElementById("test2").innerHTML="传说中滴JS测试者。如果你看到我,那<strong>JS</strong>也生效了"; } <!-- */ <!-- #test1,#test2{border:3px #000 solid;padding:5px;color:#123456;background-color:#ccc;} strong{color:red;} 引用 以上内容的文件同时被JS跟Style引用,都是有效的 B.减小被请求文件大小,减少请求数据占用的网络带宽 1.压缩JS体积 删除JS中空白换行,注释,混淆把长变量换成短变量 2.压缩CSS体积 删除CSS注释 CSS中的写法尽量用简写,比如: .bak{background:url(sina.gif) no-repeat left}; 3.使用DIV+CSS方式搭建网站结构,提高CSS重用性,来减少HTML文件大小. 4.使用服务器端GZIP压缩JS/ CSS文件,缩小传输文件大小. 附注:Apache1跟Apache2的GZIP的效率跟方式不一样的,根据需要自行选择 C.让用户更快的看到想要的结果 用户对于一个站点的白页的忍受时间根据统计是8-12秒. 对于用户能忍受的页面白页时间是8-10秒, 白页的产生可能由于各种原因引起,我们能做的就是怎么让用户能变的稍微能等待更久. 方案1.多做一个引导页,让用户体会其中的变化 案例:mail.aol.com中的loading引导页 方案2.优先载入页面结构以及结构图片,后一步载入当前页面数据,再后 一步载入Iframe,Flash等数据.让用户尽早的看到被打开页面的希望. D.提高客户端渲染速度 这个问题就比较泛泛了,影响客户端的渲染速度有多方面的,主要目的都是提高程序方面的效率. 1. 对于大索引的结构,尽可能的少用索引访问,能用访问兄弟节点的方式尽可能用访问兄弟节点的方式. var t1=new Date(); var xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.load("xml.xml"); var node=xmlDoc.documentElement.firstChild; var a=[],i=-1; do a[++i]=node.getAttribute("text"); while(node=node.nextSibling); a=a.join(""); document.write(a.length); alert(new Date()-t1); 引用 2. 字符串拼接尽可能用数组方式 <script language="JScript"> function StringBuilder(sString){//字符串连接操作类 this.length=0; this.append=function(sString){ this.length+=(this._parts[this._current++]=String(sString)).length; this._string=null; return this; } this.toString=function(){ if(this._string!=null) return this._string; var s=this._parts.join(""); this._parts=[s]; this._current=1; return this._string=s; } this._current=0; this._parts=[]; this._string=null; if(sString!=null) this.append(sString); } var str=new StringBuilder(); str.append("a"); str.append("b"); alert(str.toString()); </script> 引用 3. 大规模添加节点数据,请不要使用appendChild方式,尽量使用类似innerHTML的insertAdjacentHTML方式,FF下需修正 function addHTML(oParentNode, sHTML) { if(window.addEventListener) {// for MOZ var oRange = oParentNode.ownerDocument.createRange(); oRange.setStartBefore(oParentNode); var oFrag = oRange.createContextualFragment(sHTML); oParentNode.appendChild(oFrag); } else {// for IE5+ oParentNode.insertAdjacentHTML("BeforeEnd", sHTML); } } E让浏览器同时能请求更多的数据. 浏览器默认只是支持单域名同时有两个HTTP请求,使用多域名将能把请求数提高,在网络条件优良的情况下,能更快的下载数据,呈现结果. 对于images2这样的机器,为什么能同时有超过2个以上请求数,有待考察. F.对于需快速响应的文件,把其放入快速响应的服务器,应该是不错的方案,优化方案请系统储备组提供. G.通过版本化控制客户端Cache. 通常js/css这类文件改动比较频繁,但是为了加载速度变快,我们有可能需要设定这类文件的过期时间为几天后,这样我们碰到的问题就是,如何及时更新这些在cache的文件? 通过一个简单的配置,通过修改JS的版本来及时告诉浏览器,这些文件必须重新请求了,不要继续使用浏览器cache中的数据. 方案有好几个: 1. 手动改这些js的文件名 2. 手动改这些js的路径 3. 通过URL Rewrite方式来改重定位js路径 4. 通过一个在高响应服务器上的一个js配置告知页面,这个页面该链接哪些JS文件 5. 大版本不变,小版本不断追加,等一定时间后,统一更新,高效利用cache
Node.js事件的正确使用方法 这篇文章主要给大家介绍了关于Node.js事件的正确使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
评论 0
收藏 0
赞 0
分享
微信小程序自定义导航栏实例代码 这篇文章主要给大家介绍了关于微信小程序自定义导航栏的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用微信小程序具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
评论 0
收藏 0
赞 0
分享
js字符串处理之绝妙的代码 这篇文章主要介绍了js字符串处理之绝妙的代码,包括字符串去重、将字符放在对象中遍历拼接出字符串、把字符串的奇数位和偶数位分别提取到两个数组中、将两个数组按奇数位和偶数位插入拼接为字符串,有时候需要对字符进行处理的时候可以用得到
评论 0
收藏 0
赞 0
分享
vue设计一个倒计时秒杀的组件详解 这篇文章主要介绍了vue设计一个倒计时秒杀的组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
评论 0
收藏 0
赞 0
分享
详解服务端预渲染之Nuxt(介绍篇) 这篇文章主要介绍了详解服务端预渲染之Nuxt(介绍篇),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
评论 0
收藏 0
赞 0
分享
详解vue中this.$emit()的返回值是什么 这篇文章主要介绍了详解vue中this.$emit()的返回值是什么,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
评论 0
收藏 0
赞 0
分享
vue自定义指令directive的使用方法 这篇文章主要介绍了vue自定义指令directive的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
评论 0
收藏 0
赞 0
分享
查看更多