《自己动手写框架》1:JS、CSS合并带来的效率提升

作者:无名 - 软件应用 -
JS合并的必要性分析
一、效率因素
一般来说,在一个WEB工程中,需要使用大量的JS,这些JS可能来自许多提供者。
而在页面访问时,每次访问资源都要发起一个http请求,因此,即使文件已经缓冲,也需要发出一次http请求来确认文件是否被改变过。如果js个数比较少,那么没有什么问题,但是当JS文件数目比较多的时候,就会导致页面访问效率下降。如果能把所有的js都合并为一个文件,那么就可以节省几百毫秒,甚至几秒的时间,视网络状况而定。如果不需要做任何人为处理,就节省下来这些时间,无疑是相当有意义的。
二、JS引入顺序问题
如果说,效率问题还只是用户体验的问题,而JS引入顺序问题,就会导致你的页面是否可以执行的问题。我们知道,如果JS如果有依赖其它JS库,则被依赖的JS库就要放在依赖的JS库的前面,否则就会发生js错误。当引用的JS库比较小的时候,问题当然不大,但是做企业应用的时候,要用到的JS非常多,甚至在开发后期或维护期还会增加新的JS,这时稍有不慎,就会出现JS引入顺序问题。
为此,Tiny框架提供了解决方案,可以把工程中所有引用的JS资源都根据依赖关系,按顺序放在一个JS引用当中,它可以保证JS的引用顺序是正确的,同时由于所有的JS都只放入一个文件,因此,只会发出一次HTTP请求;第三提供了文件压缩传输功能,所以会保证网络传输量最小。
从下图中,可以看到,引入的js只有一个文件:uiengine.uijs,总共用时609ms

《自己动手写框架》1:JS、CSS合并带来的效率提升_第1张图片
再次访问,可以看到,静态资源都已经是304,全部来自缓冲了,其中js用时58ms。

《自己动手写框架》1:JS、CSS合并带来的效率提升_第2张图片

实际上这里面包含的JS文件有许多个,串行用时5434ms:

《自己动手写框架》1:JS、CSS合并带来的效率提升_第3张图片

第二次访问的时间:js文件都已经是在本地缓冲了,串行用时395ms

《自己动手写框架》1:JS、CSS合并带来的效率提升_第4张图片
两下做下对比:
合并为一个文件时,首次加载用时609ms,未合并为一个文件时,首次加载串行用时5434,节省时间:4825ms,时间比率为1:8.92,也就是说只有原来的11%的时间。

合并为一个文件时,缓冲后加载用时58ms,未合并为一个文件时,缓冲后加载串行用时395ms,节省时间:337ms,时间比率为15.7,也就是说只有原来的15%。
单纯从js加载方面来看,效率提升明显!
加上压缩过滤器,看看情况如何?

《自己动手写框架》1:JS、CSS合并带来的效率提升_第5张图片
可以看到,原本5M的传输量已经变为936KB,访问时间为352ms,较压缩之前访问时间,少了237ms,时间是的58%,因此,访问时间有一定提升,尤其是网络带宽只有原来的18%,这个提升还是非常显著的。
不同的访问,数据会有一些差异,会有一些变化,但是总体来看差异还是显著的。缓冲后再访问,加载的串行时间比率为 1:合并文件个数,也就是说与合并的文件个数成正比。
新又增加了CSS合并,解决了图片资源引用的问题,有图有真相:
《自己动手写框架》1:JS、CSS合并带来的效率提升_第6张图片

从图中看到,CSS都已经被合并到uiengine.uicss文件中了。
下面还有一个css没有合并,是由于这个是皮肤样式,要用来动态切换的,如果把它也合并了,就没有办法进行皮肤动态切换了。

以上就是由(IT人知识库http://www.itpeo.net/15315/3488430.html)本站为大家整理





rfedfre

netbeans下 spring mvc 使用JRebel的配置方法

一直使用netbeans开发SSH、spring mvc的项目,每次改动java文件,tomcat都要重新加载一次... ...

rfedfre

Xml cannot be read. CakePHP 2.x

      今天配置项目时总是提示如下错误:    ... ...

rfedfre

Eclipse Attach Source不起作用的问题

在eclipse中点F3 来attach Spring的源代码src时,点击attach不起作用; 经研究: 项... ...

rfedfre

jasper报表及程序调用

按照报表设计的基本原则:报表设计工具设计报表、工程中添加数据报表对象、程序调用打印报表,下面分三个部分大概说明Ja... ...

rfedfre

WebService框架整理(一) Axis1

Axis用过一段时间后就听说Axis2横空出世,继而接触了CXF,如果不赶紧整理,怕是都要遗忘了,今天咱就先整理一下Ax... ...

CSS 图片拼接技术

对于拼接图片的显示,无论是作为背景图使用,还是作为前景图使用,都可以使用CSS完全控制。 下面就以显示以下拼接图片... ...

rfedfre

Webwork Result失效的一个错误

访问Action.不能跳转到指定的jsp页面,有如下异常 java.lang.NoSuchMethodExceptio... ...

rfedfre

300万条记录 like 和 charindex 函数性能比较

300万条记录 like 和 charindex 函数性能比较 环境:sql2005 数据量:300万 查询结... ...

rfedfre

Eclipse 下调试Tomcat6源码

    近期对 Tomcat 的一些原理机制产生了兴趣,于是便下载源码进行 DEBUG 来... ...

rfedfre

JAVA之 IO流

一、IO流流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Jav... ...

rfedfre

java web开发过程中出现的一些诡异问题

最近工作很忙,开发任务很大,遇到的问题也千奇百怪,现总结如下,希望能够帮到各位. (1)设置struts 的默... ...

rfedfre

struts 设置默认 action

struts 如何设置默认action呢 我要达到的目的是:访问不存在的action时自动跳转到默认的acti... ...

rfedfre

android 数据储存——SharedPreferences存储(1)

轻轻地我保护--SharedPreferences存储(1) 首先介绍的是SharedPreferences,它是An... ...

rfedfre

【第七章】 对JDBC的支持 之 7.2 JDBC模板类 ——跟我学spring3

  7.2  JDBC模板类 7.2.1  概述 ... ...

rfedfre

求路线

今天群里面有人问了个求路线的问题,贴了递归的方法,我自己写了个一般的方法,速度更快些,就是可读性上不入递归法:) ... ...

rfedfre

【第七章】 对JDBC的支持 之 7.2 JDBC模板类 ——跟我学spring3

  7.2  JDBC模板类 7.2.1  概述 ... ...

rfedfre

VS2008创建C++项目——使用dll文件

网上有许多的文章都在介绍如何创建一个自定义的dll文件,以及如何使用一个dll文件,在此不在赘述。本文主要介绍如何使用... ...

rfedfre

Android ApiDemos示例解析(76):Graphics->Regions

二维图形之间可以通过“加”,“减”,“交”,“异或”等逻辑运算构成新的图形。 本例使用了两个矩形通过“加”,“减”,“... ...

rfedfre

Hibernate Criteria的嵌套查询

假设有Artist和Track实体,是1对多的关系,现在我们想使用Criteria查询所有artist中,其对应的Tra... ...

rfedfre

axis2和JDK1.5开发(文件传输服务)详解一(图解)

1.准备资源:axis2涉及到的jar包和发布环境war包,地址如下: http://apache.mirror.ph... ...