`

Web性能优化:合并JavaScript和CSS文件

阅读更多

Web性能优化最佳实践中最重要的一条是减少HTTP请求,它也是YSlow中比重最大的一条规则。减少HTTP请求的方案主要有合并JavaScript和CSS文件、CSS Sprites、图像映射(Image Map)和使用Data URI来编码图片。CSS Sprites 和 图像映射现在已经随处可见了,但由于IE6和IE7不支持Data URI以及性能问题,这项技术尚未大量使用。目前大部分网页中的JavaScript和CSS文件数量和开发时一致,少量的网页会根据实际情况采取本地合 并,这些合并中相当多的是有选择地手动完成,每次新的合并都需要重新在本地完成并上传到服务器,比较的随意和繁琐,同样文件的压缩也有类似的情况。而利用 服务端的合并和压缩,我们就可以按照开发的逻辑尽可能让文件的颗粒度变小,利用网页中URL的规则来自动实现文件的合并和压缩,这会相当的灵活和高效。

YUI Combo Handler

2008年7月YUI Team宣布在YAHOO! CDN上对YUI JavaScript组件提供Combo Handler服务。Combo Handler是Yahoo!开发的一个Apache模块,它实现了开发人员简单方便地通过URL来合并JavaScript和CSS文件,从而大大减少 文件请求数。比如在页面上使用YUI2的Rich Text Editor组件需要引入多个JavaScript文件,常用方式如下:

 

<script src="http://yui.yahooapis.com/2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script src="http://yui.yahooapis.com/2.8.0r4/build/container/container_core-min.js"></script>
<script src="http://yui.yahooapis.com/2.8.0r4/build/menu/menu-min.js"></script>
<script src="http://yui.yahooapis.com/2.8.0r4/build/element/element-min.js"></script>
<script src="http://yui.yahooapis.com/2.8.0r4/build/button/button-min.js"></script>
<script src="http://yui.yahooapis.com/2.8.0r4/build/editor/editor-min.js"></script>

而使用Combo Handler服务之后,则上述的代码可以写为:

 

<script src="http://yui.yahooapis.com/combo?
2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js&
2.8.0r4/build/container/container_core-min.js&
2.8.0r4/build/menu/menu-min.js&
2.8.0r4/build/element/element-min.js&
2.8.0r4/build/button/button-min.js&
2.8.0r4/build/editor/editor-min.js"></script>

除了代码的可读性稍稍有一点点降低外,使用Combo Handler服务大大的降低了HTTP请求数,同时也减少了URL代码量,这对于Web性能优化来讲至关重要。所以,随后YUI从2.6.0开始,其核 心组件YUI Loader内置了Combo Handling功能,即使用YUI Loader时,通过配置combine属性就可以把要加载的多个JavaScript或CSS文件按照使用Combo Handler服务的形式合并起来,这时只要静态文件的服务器支持Combo Handler就行了。在YUI中当combine配置为true时,CDN默认是使用Yahoo! CDN(http://yui.yahooapis.com),所以没有任何问题。这正是YUI最迷人的地方之一。

遗憾的是http://yui.yahooapis.com在中国的速度并不佳,本来中国雅虎提供http: //cn.yui.yahooapis.com/ ,但尚未提供Combo Handler服务,同时因种种原因,其更新在YUI 2.7.0之后就停滞了。更糟糕的是Yahoo!开发的支持Combo Handler的Apache模块虽然据传有计划开源,但至少现在依旧是私有技术,要使用就需要自己实现类似功能,所以国内类似技术的应用并不太多。

Minify

在Google Code上有一个PHP的开源项目叫Minify,它可以合并、精简、Gzip压缩和缓存JavaScript和CSS文件。其文件合并功能就非常类似 Combo Handler,只不过URL的语法稍微有点不同。如果Yahoo! CDN安装了Minify,那么上面Rich Text Editor的代码用Minify的默认格式来写就是:

 

<script src="http://yui.yahooapis.com/min/f=
2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js,
2.8.0r4/build/container/container_core-min.js,
2.8.0r4/build/menu/menu-min.js,
2.8.0r4/build/element/element-min.js,
2.8.0r4/build/button/button-min.js,
2.8.0r4/build/editor/editor-min.js"></script>

本地使用Minify很简单,只需要Apache + PHP环境就OK了:

安装好Apache + PHP (Windows、Mac)。

下载Minify源码,解压,然后把min文件夹复制到指定的根目录下,比如localhost。这时URL的写法大概是http://localhost/min/f=。..

启用Apache的Mod Rewrite模块,然后在min文件夹下新建.htaccess文件,并添加如下Rewrite规则:

 

<IfModule mod_rewrite.c>
RewriteEngine on
# You may need RewriteBase on some servers
# 如果做了所有的开启Mod Rewrite的设置依旧无效,请城市尝试启用下面这句
#RewriteBase /min
# rewrite URLs like "/min/f=..." to "/min/?f=..."
RewriteRule ^([bfg]=.*)  index.php?$1 [L,NE]
</IfModule>

如果不启用Mod Rewrite功能,则Minify的URL会类似http://localhost/min/index.php?f=…,这对客户端和中间服务器的缓 存不利,而启用了Mod Rewrite之后的URL类似http://localhost/min/f=…,不仅解决前面问题且更短。

4. 配置Minify,即编辑min/config.php文件

 

$min_enableBuilder = true;
//本地使用时可以通过http://dwn/min/builder/来进行配置,外部使用时请设置为false
//$min_cachePath = 'c:\\WINDOWS\\Temp';
//$min_cachePath = '/tmp';
//$min_cachePath = preg_replace('/^\\d+;/', '', session_save_path());
//选择其一,去掉注释设置临时缓存目录,这样可以减少程序运算提高性能
$min_serveOptions['maxAge'] = 1800;
//设置浏览器缓存的时间,为了提升性能建议这个时间设置尽可能的长,比如315360000
//如果需要在不改变URL的情况下更新静态文件,可以采用类似时间戳的方式,
//如http://localhost/min/f=example/example.css&20100601.css
//建议静态文件采用版本号管理,每次修改都需要升级版本号,这样就无需时间戳了
//如http://localhost/min/f=example/example_1_0_1.css
$min_serveOptions['minApp']['maxFiles'] = 10;
//参数f获取参数的个数,即合并的文件个数,这个数量完全可以增大,比如50,
//当然可能会遇到URL最大值问题,后会有解释
$min_documentRoot = '';
//$min_documentRoot = substr(__FILE__, 0, strlen(__FILE__) - 15);
//$min_documentRoot = $_SERVER['SUBDOMAIN_DOCUMENT_ROOT'];
//当$min_documentRoot为空时,其值就是$_SERVER['DOCUMENT_ROOT'],
//但合并的文件不在$_SERVER['DOCUMENT_ROOT']下,会导致400错误,
//这个时候可以启用第2行或第3行

4. 配置Minify,即编辑min/config.php文件

 

$min_enableBuilder = true;
//本地使用时可以通过http://dwn/min/builder/来进行配置,外部使用时请设置为false
//$min_cachePath = 'c:\\WINDOWS\\Temp';
//$min_cachePath = '/tmp';
//$min_cachePath = preg_replace('/^\\d+;/', '', session_save_path());
//选择其一,去掉注释设置临时缓存目录,这样可以减少程序运算提高性能
$min_serveOptions['maxAge'] = 1800;
//设置浏览器缓存的时间,为了提升性能建议这个时间设置尽可能的长,比如315360000
//如果需要在不改变URL的情况下更新静态文件,可以采用类似时间戳的方式,
//如http://localhost/min/f=example/example.css&20100601.css
//建议静态文件采用版本号管理,每次修改都需要升级版本号,这样就无需时间戳了
//如http://localhost/min/f=example/example_1_0_1.css
$min_serveOptions['minApp']['maxFiles'] = 10;
//参数f获取参数的个数,即合并的文件个数,这个数量完全可以增大,比如50,
//当然可能会遇到URL最大值问题,后会有解释
$min_documentRoot = '';
//$min_documentRoot = substr(__FILE__, 0, strlen(__FILE__) - 15);
//$min_documentRoot = $_SERVER['SUBDOMAIN_DOCUMENT_ROOT'];
//当$min_documentRoot为空时,其值就是$_SERVER['DOCUMENT_ROOT'],
//但合并的文件不在$_SERVER['DOCUMENT_ROOT']下,会导致400错误,
//这个时候可以启用第2行或第3行

 

转自:http://www.yindaoxian.com/html/web/Javascript_Ajax-13828.html

分享到:
评论

相关推荐

    js css文件合并工具

    JavaScript和CSS文件的合并是前端性能优化的一个常见策略,被称为"文件合并"或"资源打包"。当浏览器加载一个页面时,每个外部资源(如js或css文件)都需要一个单独的HTTP请求,这会增加整体的加载时间。如果一个页面...

    前端性能优化:掌握解决方案.zip

    在前端开发领域,性能优化是提升用户体验和网站可访问性的重要环节。本资源"前端性能优化:掌握解决方案...."前端性能优化:掌握解决方案.txt"文件很可能会包含更详尽的步骤、工具和实践案例,供读者深入学习和参考。

    Web 前端性能优化思路与学习方法

    1. 网络层面优化:优化网络请求的加载速度和响应时间。 - 利用浏览器缓存机制减少服务器请求次数。 - 使用CDN(内容分发网络)来分发静态资源。 - 合并文件(CSS、JS)和压缩资源来减少HTTP请求的数量和大小。 2...

    web前端性能优化

    优化措施包括压缩和合并JavaScript文件、使用非阻塞方式加载JavaScript文件、避免在文档加载完成后修改DOM过多等。此外,还可以采用JavaScript懒加载技术,将非核心脚本的加载推迟到用户需要时再执行,从而加快页面...

    前端 web素材 中级进阶 JavaScript 优化 css优化

    在前端开发领域,JavaScript 和 CSS 优化是提升网站性能、用户体验和搜索引擎排名的关键技术。中级进阶阶段,开发者需要深入理解这些技术的优化策略,以实现更高效、更流畅的网页应用。 首先,我们来探讨JavaScript...

    mvc js和css文件压缩合并

    在ASP.NET MVC4框架中,优化网页性能的一个关键步骤是对JavaScript (js) 和 Cascading Style Sheets (css) 文件进行压缩和合并。这有助于减少HTTP请求的数量,减小文件大小,从而提升网页的加载速度和用户体验。本文...

    WEB前端性能优化测试

    5. **代码优化**:压缩JavaScript和CSS文件,删除不必要的空格、注释和换行,能显著减小文件大小。还可以通过模块打包工具(如Webpack或Rollup)进行代码分割,只加载必要的代码。 6. **使用CDN**:内容分发网络...

    高性能网站建设进阶指南:WEB开发者性能优化最佳PDF

    - 这本书可能会涵盖页面加载优化,如合并CSS和JavaScript文件、压缩图片、使用HTTP/2协议等。还会涉及数据库优化,如索引使用、查询优化、数据结构设计等。 5. **前端优化**: - 前端性能优化包括代码分割、懒...

    JavaScript性能优化的小知识总结共23页.pdf

    4. **事件委托(Event Delegation)**:通过在父元素上绑定事件,利用事件冒泡机制处理子元素的事件,减少内存占用和性能消耗。 5. **防抖(Debounce)与节流(Throttle)**:防抖用于限制函数在一定时间内执行的...

    Javascript、CSS压缩工具(支持批量压缩)

    JavaScript和CSS是网页开发中的核心元素,用于实现动态交互和美化页面样式。然而,未经优化的源代码可能会导致页面加载速度变慢,增加...结合合理的开发流程和性能优化策略,可以显著提高网站的加载速度和整体质量。

    Javascript、CSS压缩

    总结来说,"Javascript、CSS压缩"是提高网站性能的重要手段,通过使用像AjaxMin这样的工具,开发者能够有效地压缩和优化JavaScript与CSS文件,降低页面加载时间,提升用户体验。而"JS、CSS压缩.exe"这样的本地工具则...

    DivCss网页布局和高性能Web站点

    虽然这个主题看似与DivCSS和Web站点性能不直接相关,但`java程序性能优化.pdf`可能探讨了后台处理和数据交互的效率提升,这对整体Web性能也有重要影响。Java优化可能涉及: 1. **算法选择**:采用时间复杂度较低的...

    WEB性能优化实践分析

    "WEB性能优化实践分析"的主题旨在探讨和分享一系列实用的优化策略和技术,旨在遵循"web优化黄金规则",确保网页快速加载,减少用户等待时间,提高网站的可访问性和可用性。 一、网页性能的重要性 网页性能优化不仅...

    web前端性能优化-人人都能做优化

    1. **合并CSS和JavaScript文件**:减少HTTP请求数是优化性能的重要步骤。如描述中所示,将多个CSS文件合并成一个可以降低网络请求次数,从而减少页面加载时间。例如,codesnippet.css被合并到style.css中,减少了...

    网站Web前端优化(Html)

    网站Web前端优化主要关注提升网页加载速度、用户体验和性能效率,这一领域对于现代互联网产品至关重要。以下是关于Web前端优化的详细说明: 一、关于Web Web作为一种新媒体,它源自印刷业,但随着互联网的发展,Web...

    基于PHP的minify 自动压缩合并JS和CSS(减少请求数).zip

    "基于PHP的minify 自动压缩合并JS和CSS(减少请求数)"是一个解决这个问题的方案,它通过合并和压缩JavaScript (JS) 和 Cascading Style Sheets (CSS) 文件来减少网络请求的数量,从而加快页面的加载速度。 1. ...

    java开发中压缩js,css文件

    在Java开发中,压缩JavaScript(js)和CSS(样式表)文件是一项常见的优化技术,用于减少网页加载时间和提高用户体验。这种技术通常被称为“文件合并与压缩”,它将多个js和css文件合并为一个文件,并去除其中不必要...

    Web前端性能优化全攻略

    Web前端性能优化是提高网页加载速度和用户体验的关键因素。Yahoo! 的 Exceptional Performance team 提出了一系列不断更新的优化策略,从最初的13条发展到现在的34条,涵盖了多个角度,包括内容、服务器、Cookie、...

    让你页面速度飞起来 Web前端性能优化(视频教程+ppt)

    ### Web前端性能优化知识点 #### 一、构建优化 **1.1 文件压缩与合并** - **文件压缩**:利用工具如UglifyJS...总之,Web前端性能优化是一个系统性的工程,需要开发人员具备全面的知识体系和实践经验才能有效实施。

    Web 的现状:网页性能提升指南

    通过合并CSS和JavaScript文件,使用CSS精灵图,以及将图标整合到字体图标集中,可以有效减少请求次数。 3. **缓存利用**:正确设置HTTP缓存头可以改善用户体验,尤其是对于常访问的静态资源。浏览器缓存可以减少...

Global site tag (gtag.js) - Google Analytics