如何快速的呈现我们的网页的技巧整理


Posted in Javascript onJuly 01, 2007

前几天小芳同学一直在群发起一些加速的话题,我已经把聊天记录抽出来,正打算整理出份像样的,没想到小芳同学非常速度的出了这篇。我的就省掉了,挖哈哈。

特别说一下了,这些方案并非适合所有的网站,很多部分有的网站还是不要做反而会更好。如果你还有更多的想法,可以到这里讨论或者评论,我只是归档成为方便阅读的,对了论坛和群讨论的另一些结果如果有价值我也会补充进来。

如何快速的呈现我们的网页 作者:flashsoft,(内容被我略修删过)。

一.我们需达解决的麻烦

  • 减少HTTP请求数. 减少HTTP请求数有什么好处
    • 降低服务器跟客户端的建立和消除HTTP请求和响应Header的开销
    • 减少服务器为HTTP连接的进程和线程的开销,如果可能,还会包括GZIP压缩的CPU开销.
  • 减小被请求文件大小, 减少请求数据占用的网络带宽.
  • 让用户更快的看到想要的结果.
  • 提高客户端渲染速度.
  • 让浏览器同时能请求更多的数据.
  • 提高服务器相应速度.
  • 通过版本化控制客户端Cache.

二.如何解决我们的麻烦

A.如何减少HTTP请求数

  1. 合并JS文件跟CSS文件。
  2. 合并框架图片以及相对变动较少的图片成一张,通过CSS背景切割来完成渲染,比如:加速图片显示。
  3. 合理使用本地Cache来缓存JS/CSS/IMAGE。
  4. 合理使用UserData缓存JS文件,对于FF用户可以单独请求服务器,这样能解决80%用户的问题.代码可以蓉儿(meizz)的js framework1
  5. 把JS跟CSS合并成一个文件

B.减小被请求文件大小,减少请求数据占用的网络带宽

  1. 压缩JS体积:删除JS中空白换行,注释,混淆把长变量换成短变量;
  2. 压缩CSS体积:删除CSS注释、写法尽量用简写;
  3. 使用(X)HTML+CSS方式搭建网站结构,提高CSS重用性,来减少(X)HTML文件大小;
  4. 使用服务器端GZIP压缩JS/ CSS文件,缩小传输文件大小。附注:Apache1跟Apache2的GZIP的效率跟方式不一样的,根据需要自行选择。

嗷嗷补充说明:压缩、合并JS和CSS都由程序处理。而不是自己手动去缩删,不然不利于后期维护。

C.让用户更快的看到想要的结果

用户对于一个站点的白页的忍受时间根据统计是8-12秒。白页的产生可能由于各种原因引起,我们能做的就是怎么让用户能变的稍微能等待更久。

  • 方案1.多做一个引导页,让用户体会其中的变化
    案例:mail.aol.com中的loading引导页
  • 方案2.优先载入页面结构以及结构图片,后一步载入当前页面数据,再后一步载入Iframe,Flash等数据.让用户尽早的看到被打开页面的希望.

D.提高客户端渲染速度

这个问题就比较泛泛了,影响客户端的渲染速度有多方面的,主要目的都是提高程序方面的效率.

  1. 对于大索引的结构,尽可能的少用索引访问,能用访问兄弟节点的方式尽可能用访问兄弟节点的方式.
  2. 字符串拼接尽可能用数组方式
  3. 大规模添加节点数据,请不要使用appendChild方式,尽量使用类似innerHTML的insertAdjacentHTML方式,FF下需修正2

E.让浏览器同时能请求更多的数据.

浏览器默认只是支持单域名同时有两个HTTP请求,使用多域名将能把请求数提高,在网络条件优良的情况下,能更快的下载数据,呈现结果.

F.提高服务器相应速度

对于需快速响应的文件,把其放入快速响应的服务器,应该是不错的方案,优化方案请系统储备组提供.

G.通过版本化控制客户端Cache.

通常js/css这类文件改动比较频繁,但是为了加载速度变快,我们有可能需要设定这类文件的过期时间为几天后,这样我们碰到的问题就是,如何及时更新这些在cache的文件?
通过一个简单的配置,通过修改JS的版本来及时告诉浏览器,这些文件必须重新请求了,不要继续使用浏览器cache中的数据. 方案有好几个:

  1. 手动改这些js的文件名
  2. 手动改这些js的路径
  3. 通过URL Rewrite方式来改重定位js路径
  4. 通过一个在高响应服务器上的一个js配置告知页面,这个页面该链接哪些JS文件
  5. 大版本不变,小版本不断追加,等一定时间后,统一更新,高效利用cache

标注

  1. meizz的js framework还没出正式版,有兴趣在CSDN的页面翻一下
  2. Firefox修正方式
    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);
       }
    }
Javascript 相关文章推荐
js 全兼容可高亮二级缓冲折叠菜单
Jun 04 Javascript
jquery绑定原理 简单解析与实现代码分享
Sep 06 Javascript
JS图像无缝滚动脚本非常好用
Feb 10 Javascript
5种处理js跨域问题方法汇总
Dec 04 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
Aug 17 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
Dec 16 Javascript
JQuery为元素添加样式的实现方法
Jul 20 Javascript
vue.js入门教程之计算属性
Sep 01 Javascript
微信小程序调用PHP后台接口 解析纯html文本
Jun 13 Javascript
基于AngularJS的简单使用详解
Sep 10 Javascript
浅谈Webpack下多环境配置的思路
Jun 27 Javascript
vue+django实现下载文件的示例
Mar 24 Vue.js
IE autocomplete internet explorer's autocomplete
Jun 30 #Javascript
用javascript实现的激活输入框后隐藏初始内容
Jun 29 #Javascript
javascritp实现input输入框相关限制用法
Jun 29 #Javascript
优化网页之快速的呈现我们的网页
Jun 29 #Javascript
javascript实现动态CSS换肤技术的脚本
Jun 29 #Javascript
javascript之锁定表格栏位
Jun 29 #Javascript
javascript之解决IE下不渲染的bug
Jun 29 #Javascript
You might like
用PHP编程开发“虚拟域名”系统
2006/10/09 PHP
PHP分页显示制作详细讲解
2008/11/19 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
基于php缓存的详解
2013/05/15 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
python处理写入数据代码讲解
2020/10/22 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
群胜软件Java笔试题
2012/09/29 面试题
新闻专业学生的自我评价
2014/02/13 职场文书
义和团口号
2014/06/17 职场文书
终止劳动合同协议书
2014/10/05 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
Python IO文件管理的具体使用
2022/03/20 Python
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers