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


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 相关文章推荐
JavaScript 模仿vbs中的 DateAdd() 函数的代码
Aug 13 Javascript
javascript写的日历类(基于pj)
Dec 28 Javascript
异步加载script的代码
Jan 12 Javascript
在js文件中写el表达式取不到值的原因及解决方法
Dec 23 Javascript
js实现鼠标点击左上角滑动菜单效果代码
Sep 06 Javascript
微信小程序 图片边框解决方法
Jan 16 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
Aug 17 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
Oct 23 Javascript
深入了解Hybrid App技术的相关知识
Jul 17 Javascript
VUE解决 v-html不能触发点击事件的问题
Oct 28 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
Nov 06 Javascript
vue页面引入three.js实现3d动画场景操作
Aug 10 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搜索文件程序分享
2015/10/30 PHP
php导出生成word的方法
2015/12/25 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
Python中获取对象信息的方法
2015/04/27 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
Python实现密码薄文件读写操作
2019/12/16 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
python爬虫请求头设置代码
2020/07/28 Python
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
党的群众路线领导班子整改方案
2014/09/27 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
店长岗位职责
2015/02/11 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书
2016年寒假见闻
2015/10/10 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫