需求
公司的项目性能很差,由于刚来实习老大让我尝试优化下就当给我练练手
原因
发现这个项目是JSP写的动态网页并没有模块化预加载什么的单纯的引入JS/CSS,每次访问请求用太多时间
解决
想到就先合并请求,并压缩代码之类的 工具是基于流的Gulp
//然并没用过
首先安装Gulp
1 | npm install -g gulp |
安装相应的插件
为了解决插件和模块依赖被重复的引入进来我用了ulp-load-plugins
为了以后项目的升级我也进行了参数配置全局化在gulp.config.js1
npm install gulp-minify-css gulp-uglify gulp-concat gulp-rename ulp-load-plugins through2 vinyl-source-stream gulp-marked --save-dev gulp
由于是jsp写的路径useref方法无法识别
用到filesystem模块先读到index.jsp然后用正则替换路径1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23gulp.task('readBuffer', function() {
return gulp.src('app/index.jsp')
.pipe(modify(swapStuff))
.pipe(modify(swapStuff_))
.pipe(gulp.dest(config.build));
})
function modify(modifier) {
return through2.obj(function(file, encoding, done) {
var content = modifier(String(file.contents));
file.contents = new Buffer(content);
this.push(file);
done();
});
}
//正则
function swapStuff(data) {
return data.replace(/\$\{pageContext\.request\.contextPath\s*\}/g, '..');
}
function swapStuff_(data) {
return data.replace(/window\.ContextPath \= \"\.\.\/\"/, 'window.ContextPath = "${pageContext.request.contextPath}/"')
.replace(/base\shref\=\"\.\.\/\"/,'base href="dist/"');
}
然后用useref方法读到所有内容,进行压缩合并等步骤
这里需要在index.jsp根据你的需求页面配置1
2
3
4
5
6
7
8<!-- build:css css/lib.css -->
<!-- endbuild -->
<!-- build:css css/app.css -->
<!-- endbuild -->
<!-- build:js js/lib.js -->
<!-- endbuild -->
<!-- build:js js/app.js -->
<!-- endbuild -->
1 | gulp.task('optimize',['readBuffer'],function() { |
给资源文件加时间戳
1 | gulp.task('rev', ['optimize'],function() { |
由于所有图片都合并到一起、路径就会发生变化这里对路径做个统一
1 | gulp.task('images', function() { |
最后调用任务
1 | gulp.task('default', ['rev','images']); |
结束
刚接触gulp目前只是实现了更能,代码还有很多不足和优化地方欢迎指正O(∩_∩)O哈哈~
源码