PHP项目怎样压缩静态资源?

wen PHP项目 12

本文目录导读:

PHP项目怎样压缩静态资源?

  1. 使用 PHP 库动态压缩
  2. 使用构建工具(推荐)
  3. 使用 CDN 和版本号
  4. 使用在线压缩工具(简单项目)
  5. 图片压缩优化
  6. 自动化部署方案
  7. 推荐方案

在 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 构建自动压缩流程,配合版本号防止缓存问题,这是性价比最高且维护性最好的方案。

抱歉,评论功能暂时关闭!