做web开发的,总是少不了和js打交道。js写的多了总是会出现影响页面加载速度的情况。特别是做富客服端时写了多个js文件,压缩合并文件就显得尤为重要了。
可能有不少的朋友会说在线的压缩工具也有很多啊。确实 ,但是如果能够在项目中直接合并压缩多个js,并且压缩完成后生成一个经过整合的新js文件是多么惬意的事情啊。今天因项目需要所以在php中尝试了一把。
前提条件:
用下面方面压缩合并js文件的,原始的js文件需要安装以下规则进行编码(当然里面的引用路径根据个人情况决定):
这样写的好处我想大家都知道,虽然不能解决减少http请求,但是可以简化前端页面js个数,在这里定义一个init()函数前端直接引用这个启动函数即可。另外下面php方法中的正则匹配也是根据这种结构去处理的。
实现原理:
即将js文件中的多余的注释、换行、回车、空格等无用字符删除即可。
代码示例:
//
压缩JS文件并替换JS嵌套include文件
function zipJs(
$js){
$h1 = 'http://';
$s1 = '【:??】';
//
标识“http://”,避免将其替换成空
$h2 = 'https://';
$s2 = '【s:??】';
//
标识“https://”
preg_match_all('#include\("([^"]*)"([^)]*)\);#isU',
$js,
$arr);
if(
isset(
$arr[1])){
foreach (
$arr[1]
as
$k=>
$inc){
$path = "http://www.xxx.com/"; //这里是你自己的域名路径
$temp =
file_get_contents(
$path.
$inc);
$js =
str_replace(
$arr[0][
$k],
$temp,
$js);
}
}
$js =
preg_replace('#function include([^}]*)}#isU','',
$js);
//
include函数体
$js =
preg_replace('#\/\*.*\*\/#isU','',
$js);
//
块注释
$js =
str_replace(
$h1,
$s1,
$js);
$js =
str_replace(
$h2,
$s2,
$js);
$js =
preg_replace('#\/\/[^\n]*#','',
$js);
//
行注释
$js =
str_replace(
$s1,
$h1,
$js);
$js =
str_replace(
$s2,
$h2,
$js);
$js =
str_replace("\t","",
$js);
//
tab
$js =
preg_replace('#\s?(=|>=|\?|:|==|\+|\|\||\+=|>|<|\/|\-|,|\()\s?#','$1',
$js);
//
字符前后多余空格
$js =
str_replace("\t","",
$js);
//
tab
$js =
str_replace("\r\n","",
$js);
//
回车
$js =
str_replace("\r","",
$js);
//
换行
$js =
str_replace("\n","",
$js);
//
换行
$js =
trim(
$js," ");
return
$js;
}
将替换后的js生成一个新文件方法:
//
写入文件,自动判断文件夹是否存在
function writeToFile(
$file,
$s){
$path =
dirname(
$file);
if(!
is_dir(
$path))
mkdir(
$path,0777,
true);
file_put_contents(
$file,
$s);
}
测试示例:
$newjs = zipJs(
file_get_contents("js/index.js"));
writeToFile("js/indexV2.0.js",$newjs);
做到这里就能正常的生成一个压缩合并过的js文件了,这个文件中包含所有你需要引用的js文件。经过本人测试在页面中用压缩合并过的js文件能正常处理相应业务逻辑,当然速度就比先前要快多了。