网页优化:CSS和JS合并压缩

在网页开发中,经常用到各种各样的JS和CSS,因此当一个前端把网页交给后台时,往往会有很多脚本文件,导致页面产生很多请求。这个问题直接导致服务器负荷加重,网页加载变慢(我们都知道:一个大文件和多个小文件同体积时,一个大文件方案优于多个小文件,这也是雪碧图和字体图标流行的原因吧),在移动端尤甚。

为解决这个问题,常用做法是将CSS和JS分别合并,即把页面的所有CSS合并成一个CSS文件,所有的JS尽可能的合并成一个JS文件,以提升网页的加载速度。

为防止遗忘有以后备用,将实现代码记录。

// =======CSS,JS==========
/**
 * 压缩多个CSS文件为1个
 * @param unknown $urls 要压缩的CSS文件,用,英文逗号隔开
 * @param string $key 生成文件名标识
 * @param string $path 生成路径
 * @return string 生成的CSS文件
 */
function parse_css($urls, $key = "defalut", $path = "/cache/css/") {
	$savePath=__ROOT__.$path;
	$urlArr = explode ( ',', $urls ); // 分隔样式
	$root = $_SERVER ["DOCUMENT_ROOT"];//物理路径根目录 如  D:\www\phpcode
	$filename = $key . "_"; // 文件名
	$fileMd5 = "";
	//通过文件MD5指纹构造新文件名
	foreach ( $urlArr as $k => $v ) {
		$v = $root . $v; // 文件物理地址
		$fileMd5 .= md5_file ( $v ) . "\r\n";
	}
	$filename .= md5 ( $fileMd5 ) . ".css";//文件名
	$cssUrl=$savePath.$filename;//生成CSS的URL路径
	$savePath =$root.$savePath;//存储目录(物理地址)
	if (! file_exists ( $savePath.$filename )) {
		if (! file_exists ( $savePath )){
			mkdir ( $savePath, 0777 );//如果文件夹不存在,就建一个
		}
		$css_content="";
		foreach ( $urlArr as $k => $v ) {
			$cssBaseDir = dirname ( $v ); // css目录
			$v = $root . $v; // 文件物理地址
			$tempCss = file_get_contents ( $v );
			$tempCss = str_replace ( "../images/", $cssBaseDir . "/../images/", $tempCss );//构造引用图片的路径
			$css_content .= $tempCss;
			// echo $css_content;
		}
		$css_content = preg_replace ( "/[\r\n]/", '', $css_content );//去掉换行
		file_put_contents ( $savePath.$filename, $css_content );//输出文件
	}
	return $cssUrl;
}

/**
 * 压缩多个JS文件为1个
 * @param unknown $urls 要压缩的JS文件,用,英文逗号隔开
 * @param string $key生成文件名标识
 * @param string $path生成路径
 * @return string合并后的JS
 */
function parse_js($urls, $key = "defalut", $path = "/cache/js/")
{
	$savePath=__ROOT__.$path;
	$urlArr = explode ( ',', $urls ); // 分隔样式
	$root = $_SERVER ["DOCUMENT_ROOT"];//物理路径根目录 如  D:\www\phpcode
	$filename = $key . "_"; // 文件名
	$fileMd5 = "";
	//通过文件MD5指纹构造新文件名
	foreach ( $urlArr as $k => $v ) {
		$v = $root . $v; // 文件物理地址
		$fileMd5 .= md5_file ( $v ) . "\r\n";
	}
	$filename .= md5 ( $fileMd5 ) . ".js";//文件名
	$jsUrl=$savePath.$filename;//生成CSS的URL路径
	$savePath =$root.$savePath;//存储目录(物理地址)

	if (! file_exists ( $savePath.$filename )) {
		if (! file_exists ( $savePath )){
			mkdir ( $savePath, 0777 );//如果文件夹不存在,就建一个
		}
		//vendor('JavaScriptPacker');
		$$js_content='';
		foreach ( $urlArr as $k => $v ) {
			$cssBaseDir = dirname ( $v ); // css目录
			$v = $root . $v; // 文件物理地址
			$js_content.= file_get_contents($v)."\r\n";
			
		}
		file_put_contents ( $savePath.$filename, $js_content );//输出文件
	}
	return $jsUrl;
}




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
现在大量网站为了追求用户体验,使用了大量使用CSSJS文件。 而网页加载的时间大部分是消耗在资源请求部分。通过 Chrome自带调试工具,或者 Firebug 可观察到: 资源加载的等待时间经常占到总时间的 50%以上。 再比如,IE6默认只有2个下载线程!也就是说,同时只能进行2个资源请求、无论你网速有多快。 所以网页前端速度优化的一个重要项目就是:减小资源请求数。 事实上,业界有很有名气的jscss合并压缩开源程序:minify。 但悲剧的 minify 在 php5.3 , php 5.4 环境下无法使用,于是逼的我只好自己丰衣足食。 minify 比较重量级,很臃肿。它采用了将合并文件写入硬盘的方式。 本程序只是合并压缩,直接讲合并结果发送客户端,并采用修改过期时间优化效率,最大限度减小服务器压力。 这样做法的效率就非常非常接近于 minify。 本程序碎玉压缩合并的功能俱全,但是整体及其轻量级,很容易更新、维护,二次开发。 本程序压缩后的大小大约为压缩前的 15% - 30% 左右(平均值)。推荐使用 YSlow 进行另外方面的优化。 如果您在使用中,发现任何 Bug ,请给我反馈,谢谢。 Javascript 代码压缩 网址 : http://julying.com/lab/compress-js-css/ 类型: 原创脚本 作者: 王子墨 邮箱 : i@julying.com 发布 : 2012-06-10 22:28 更新 : 2012-07-22 12:50 版权所有 2012 | julying.com 此插件遵循 MIT、GPL2、GNU 许可. 版权:Copyright (c) julying 版权所有,本程序为开源程序(开放源代码)。 http://julying.com/code/license/ 此程序会自动去除 注释,并且会对文件名进行安全检测、去重复、存在判定等操作,只允许 .js/.css 文件,并且不允许包含远程文件。 环境要求: >= PHP 5 压缩多个 js 方法: [removed] [removed] 压缩多个 CSS 方法: <link rel="stylesheet" media="all" href="http://julying.com/lab/compress-js-css/file=/lab/coffee/layerImages/layer.css,/lab/coffee/css/main.css"> </link> / 建议查看可看 《Yahoo工程师的前端优化建议--英文原版》. 如果英文阅读不是很流畅,请查看翻译版本: 《Yahoo工程师的前端优化建议-- 中文翻译版》 《Yahoo工程师的前端优化建议-- 中文翻译版》

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值