优化网页之快速的呈现我们的网页


Posted in Javascript onJune 29, 2007

一.我们需要解决的麻烦
       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

Javascript 相关文章推荐
jquery实现文本框鼠标右击无效以及不能输入的代码
Nov 05 Javascript
javascript时间自动刷新实现原理与步骤
Jan 06 Javascript
JS图片根据鼠标滚动延时加载的实例代码
Jul 13 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
Jun 05 Javascript
javascript 数组去重复(在线去重工具)
Dec 17 Javascript
bootstrap 表单验证使用方法
Jan 11 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
Apr 10 Javascript
原生JS与jQuery编写简单选项卡
Oct 30 jQuery
vue实现前进刷新后退不刷新效果
Jan 26 Javascript
JS简单添加元素新节点的方法示例
Feb 10 Javascript
AngularJs中$cookies简单用法分析
May 30 Javascript
js JSON.stringify()基础详解
Jun 19 Javascript
javascript实现动态CSS换肤技术的脚本
Jun 29 #Javascript
javascript之锁定表格栏位
Jun 29 #Javascript
javascript之解决IE下不渲染的bug
Jun 29 #Javascript
JavaScript与C# Windows应用程序交互方法
Jun 29 #Javascript
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
Jun 29 #Javascript
javascript之函数直接量(function(){})()
Jun 29 #Javascript
javascript延时重复执行函数 lLoopRun.js
Jun 29 #Javascript
You might like
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
requireJS使用指南
2016/04/27 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python新手经常遇到的17个错误分析
2014/07/30 Python
Python脚本实现下载合并SAE日志
2015/02/10 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python之web模板应用
2017/12/26 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
使用Keras构造简单的CNN网络实例
2020/06/29 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
Java的类与C++的类有什么不同
2014/01/18 面试题
护理专业个人求职简历的自我评价
2013/10/13 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android