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


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 相关文章推荐
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
Mar 24 Javascript
javascript获取元素偏移量的方法有哪些
Jun 24 Javascript
一个JavaScript用逗号分割字符串实例
Sep 22 Javascript
AngularJS中$interval的用法详解
Feb 02 Javascript
关于Jquery中的事件绑定总结
Oct 26 Javascript
JavaScript中的编码和解码函数
Feb 15 Javascript
vue-cli 引入、配置axios的方法
May 08 Javascript
详解webpack import()动态加载模块踩坑
Jul 17 Javascript
如何解决vue2.0下IE浏览器白屏问题
Sep 13 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
JS实现简易留言板(节点操作)
Mar 16 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
PHP5 面向对象(学习记录)
2009/12/02 PHP
php数据访问之增删改查操作
2016/05/09 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
python字符串排序方法
2014/08/29 Python
Python使用MONGODB入门实例
2015/05/11 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
python实现狄克斯特拉算法
2019/01/17 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
Python如何输出百分比
2020/07/31 Python
python 实用工具状态机transitions
2020/11/21 Python
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
思想政治自我鉴定
2013/10/06 职场文书
实习自荐信
2013/10/13 职场文书
施工安全标语
2014/06/07 职场文书
主题党日活动总结
2014/07/08 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
大学教师个人总结
2015/02/10 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python