本文目录导读:

在 PHP 项目中压缩静态资源(CSS、JavaScript、图片等)主要有以下几种常用方法,从简单的手动操作到自动构建流程都有覆盖。
使用 PHP 库动态压缩
使用 Minify 库(推荐)
这是一个专门用于合并和压缩 CSS/JS 的 PHP 库。
安装:
composer require matthiasmullie/minify
使用示例:
require 'vendor/autoload.php';
use MatthiasMullie\Minify;
// 压缩 CSS
$minifier = new Minify\CSS('src/style.css');
$minifier->minify('dist/style.min.css');
// 压缩 JS
$minifier = new Minify\JS('src/script.js');
$minifier->minify('dist/script.min.js');
// 合并并压缩多个文件
$minifier = new Minify\CSS();
$minifier->add('src/style1.css');
$minifier->add('src/style2.css');
$minifier->minify('dist/combined.min.css');
使用 JShrink 压缩 JS
composer require tedivm/jshrink
use JShrink\Minifier; $js = 'var x = 1; var y = 2;'; $minifiedJS = Minifier::minify($js);
使用构建工具(推荐)
Gulp + PHP 项目
这是最灵活的方案,可以自动化整个流程。
安装 Gulp:
npm install -g gulp-cli npm init -y npm install gulp gulp-uglify gulp-clean-css gulp-concat gulp-imagemin --save-dev
gulpfile.js:
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const cleanCSS = require('gulp-clean-css');
const concat = require('gulp-concat');
const imagemin = require('gulp-imagemin');
// 压缩 JS
gulp.task('scripts', function() {
return gulp.src('src/js/**/*.js')
.pipe(concat('all.min.js'))
.pipe(uglify())
.pipe(gulp.dest('dist/js'));
});
// 压缩 CSS
gulp.task('styles', function() {
return gulp.src('src/css/**/*.css')
.pipe(concat('all.min.css'))
.pipe(cleanCSS())
.pipe(gulp.dest('dist/css'));
});
// 压缩图片
gulp.task('images', function() {
return gulp.src('src/images/**/*')
.pipe(imagemin())
.pipe(gulp.dest('dist/images'));
});
gulp.task('default', gulp.parallel('scripts', 'styles', 'images'));
Webpack(适用于前后端分离)
// webpack.config.js
module.exports = {
entry: './src/js/app.js',
output: {
filename: 'bundle.min.js',
path: path.resolve(__dirname, 'dist')
},
optimization: {
minimize: true
}
};
使用 CDN 和版本号
如果项目不大,可以手动压缩后添加版本号:
<!-- 在模板中 -->
<link rel="stylesheet" href="/css/style.min.css?v=<?= filemtime('css/style.min.css') ?>">
<script src="/js/script.min.js?v=<?= filemtime('js/script.min.js') ?>"></script>
使用在线压缩工具(简单项目)
- CSS/JS: https://www.minifier.org/
- 图片: https://tinypng.com/ 或 https://squoosh.app/
图片压缩优化
PHP 中使用 GD 库或 Imagick
// 使用 GD 库压缩图片
function compressImage($source, $destination, $quality = 80) {
$info = getimagesize($source);
if ($info['mime'] == 'image/jpeg') {
$image = imagecreatefromjpeg($source);
} elseif ($info['mime'] == 'image/png') {
$image = imagecreatefrompng($source);
imagepalettetotruecolor($image);
imagealphablending($image, true);
imagesavealpha($image, true);
}
imagejpeg($image, $destination, $quality);
}
使用第三方服务
// 使用 TinyPNG API
require_once("vendor/autoload.php");
\Tinify\setKey("YOUR_API_KEY");
$source = \Tinify\fromFile("input.png");
$source->toFile("output.png");
自动化部署方案
使用 Laravel Mix(适用于 Laravel 项目)
// webpack.mix.js
const mix = require('laravel-mix');
mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.version(); // 添加版本号
使用 Docker + Nginx
在 Nginx 配置中添加 gzip:
server {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript image/svg+xml;
gzip_min_length 1000;
gzip_comp_level 6;
}
推荐方案
根据项目规模选择:
- 小型项目: 使用在线工具 + PHP 库动态压缩
- 中型项目: Gulp/Webpack 自动化构建
- 大型项目: Laravel Mix + CDN + 版本控制
- 极致优化: 结合 Nginx gzip + 图片 CDN + Service Worker
最终建议:使用 Gulp 或 Laravel Mix 构建自动压缩流程,配合版本号防止缓存问题,这是性价比最高且维护性最好的方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播