本文目录导读:

- 方案一:使用 CDN(内容分发网络) —— 最推荐、效果最好
- 方案二:Nginx 直接处理静态文件 —— 让 PHP 靠边站
- 方案三:开启 Gzip/ Brotli 压缩 —— 减少传输体积
- 方案四:配置浏览器缓存策略 —— 让用户本地缓存
- 方案五:资源合并与压缩(CSS/JS Sprites & Minify)
- 方案六:使用 PHP 缓存(如 OPcache) —— 对于PHP文件很有用
- 总结建议(按优先级)
针对 PHP 静态资源加速,核心思路其实与 PHP 本身关系不大,而是指将 PHP 网站中的图片、CSS、JS、字体等非动态文件,通过技术手段提升用户下载速度。
因为 PHP 本身处理这些静态资源时,如果通过 PHP 引擎(如 Nginx/FPM)读取,会浪费 CPU 资源且速度慢,正确的做法是让 Web 服务器(Nginx/Apache)或 CDN 直接处理静态文件,绕过 PHP 解释器。
以下是几种主流的 PHP 静态资源加速方案,按推荐度从高到低排列:
使用 CDN(内容分发网络) —— 最推荐、效果最好
这是目前最主流、最有效的方案,尤其适用于用户分布全国或全球的场景。
原理: 将静态资源上传到 CDN 厂商的节点上,用户访问时从离他最近的节点下载。
操作步骤:
-
上传资源: 将
static,assets,upload等目录下的文件上传到 CDN(如阿里云 OSS/CDN、腾讯云 COS/CDN、七牛云、又拍云)。 -
修改代码: 将页面中所有静态资源的 URL 从相对路径改为 CDN 绝对路径。
// 原来的写法: <link rel="stylesheet" href="/css/app.css"> // 加速后: <link rel="stylesheet" href="https://cdn.yourdomain.com/css/app.css">
-
(可选)使用 PHP 函数统一处理: 在项目中定义一个全局函数或配置常量来切换本地/CDN环境。
function asset($path) { $cdnDomain = 'https://cdn.yourdomain.com'; return $cdnDomain . '/' . ltrim($path, '/'); } // 使用:<link rel="stylesheet" href="<?= asset('css/app.css') ?>">
优点: 全球加速、降低服务器带宽压力、效果立竿见影。 缺点: 需要付费(但通常很便宜,且有免费额度)。
Nginx 直接处理静态文件 —— 让 PHP 靠边站
这是本地加速最核心、最有效的配置,如果你用 Nginx,必须配置这一点。
原理: 当请求的是 .js、.css、.png 等静态后缀文件时,让 Nginx 直接从磁盘读取返回,而不是转发给 PHP-FPM 处理。
操作步骤:
编辑 Nginx 配置文件(nginx.conf 或 vhost 配置):
server {
listen 80;
server_name yourdomain.com;
root /var/www/html/public; # 你的项目根目录
# ========== 关键配置:静态资源直接返回 ==========
location ~* \.(jpg|jpeg|gif|png|css|js|ico|svg|webp|woff|woff2|ttf|eot)$ {
expires 30d; # 设置强缓存,30天后过期
add_header Cache-Control "public, immutable";
try_files $uri /404.html; # 如果文件不存在直接返回404,不交给PHP
access_log off; # 静态文件访问日志可以不记录,节省IO
}
# ========== 其他请求交给 PHP ==========
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
优点: 零成本、大幅降低 PHP-FPM 进程负载、提高并发能力。 缺点: 只对本地服务器有效,无法解决跨地域延迟问题。
开启 Gzip/ Brotli 压缩 —— 减少传输体积
这个配置的性价比极高,几乎不消耗什么性能,但能显著减少静态文件大小(60%-80%)。
Nginx 配置示例:
# 开启 Gzip gzip on; gzip_min_length 1k; gzip_comp_level 6; gzip_types text/plain text/css application/javascript image/svg+xml application/json application/xml; gzip_vary on; # 如果支持 Brotli(需要安装模块),效果更好 brotli on; brotli_comp_level 6; brotli_types text/plain text/css application/javascript image/svg+xml application/json application/xml;
注意: 图片(jpg/png)本身已经是压缩格式,无需再 Gzip,Gzip 主要针对 CSS/JS/HTML/JSON。
配置浏览器缓存策略 —— 让用户本地缓存
通过设置 Expires 或 Cache-Control 头,告诉浏览器“这个文件30天内不用重新请求”。
在 Nginx 中(上面已经贴过):
location ~* \.(jpg|jpeg|gif|png|css|js|ico)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
在 PHP 代码中(如文件下载场景):
header("Cache-Control: public, max-age=3600");
header("Expires: " . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');
资源合并与压缩(CSS/JS Sprites & Minify)
这个属于规整资源,减少 HTTP 请求次数。
- 合并: 将多个 CSS 文件合并成一个,多个 JS 文件合并成一个。
- 压缩: 去掉空格、换行、注释。
- 工具: 可以在构建阶段用 Webpack、Laravel Mix、Vite,或者在 PHP 中实时处理(推荐前者)。
PHP 实现示例(如果你不想用构建工具):
// 使用 minify 库
require 'vendor/autoload.php';
use MatthiasMullie\Minify;
$minifier = new Minify\CSS();
$minifier->add(__DIR__ . '/css/style1.css');
$minifier->add(__DIR__ . '/css/style2.css');
$minifier->minify('css/combined.min.css');
使用 PHP 缓存(如 OPcache) —— 对于PHP文件很有用
虽然叫“PHP 静态资源加速”,但如果你讨论的是 PHP 文件本身如何加速,那核心就是 OPcache。
原理: PHP 每次请求都会将 .php 文件编译成 Opcode,OPcache 将编译后的 Opcode 缓存到共享内存中,下次直接执行,跳过编译。
配置(php.ini):
opcache.enable=1 opcache.memory_consumption=128 # 缓存大小 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=2 # 检查文件更新的时间间隔(秒) opcache.fast_shutdown=1
效果: 对于 Laravel、ThinkPHP 等框架,开启 OPcache 后 PHP 响应时间能缩短 50%-70%。
总结建议(按优先级)
- 确保 Nginx/Apache 直接处理静态文件(方案二),这是基础。
- 配置 Gzip/缓存过期时间(方案三、四)。
- 如果用户分布广: 引入 CDN(方案一)。
- PHP 本身慢: 开启 OPcache(方案六)。
- 如果资源请求过多: 做 合并压缩(方案五)。
这样一套组合下来,你的 PHP 网站的静态资源加载速度会有非常明显的提升。