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


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 相关文章推荐
一个很简单的办法实现TD的加亮效果.
Jun 29 Javascript
Extjs学习笔记之九 数据模型(上)
Jan 11 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
Nov 02 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
js的touch事件的实际引用
Oct 13 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
Feb 03 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
Mar 03 Javascript
JavaScript获取客户端IP的方法(新方法)
Mar 11 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
Aug 16 Javascript
Node.js实现简单管理系统
Sep 23 Javascript
vue-router 控制路由权限的实现
Sep 24 Javascript
微信小程序自定义底部弹出框动画
Nov 18 Javascript
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
Syphon 秘笈
2021/03/03 冲泡冲煮
有关php运算符的知识大全
2011/11/03 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
简单的js表单验证函数
2013/10/28 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
Python图像读写方法对比
2020/11/16 Python
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
优秀求职信范文分享
2013/12/19 职场文书
党员思想汇报范文
2013/12/30 职场文书
报到证丢失证明
2014/01/11 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
工程部部长岗位职责
2015/02/12 职场文书
工程质检员岗位职责
2015/04/08 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android