整体思路与优先级
从架构 → 缓存 → 数据库 → 代码 → 服务器与前端的顺序推进优化,先抓住高收益项(如OPcache、路由/配置/字段缓存、Redis/Memcached、SQL 索引与预加载),再处理低垂果实(如静态资源压缩与 CDN、Gzip/Brotli、HTTP 缓存头)。在 Linux/PHP-FPM 环境下,这些手段对首屏与并发性能的提升最为明显。
PHP 运行环境与框架层优化
- 开启并正确配置 OPcache(php.ini):加速脚本编译与执行,是 PHP 层面最有效的提速手段之一。
- 关闭调试与生成框架缓存:生产环境将 debug => false;执行命令生成缓存与映射,减少 I/O 与反射开销:
- 路由缓存:php think optimize:route
- 配置缓存:php think optimize:config(模块可用:php think optimize:config index)
- 数据表字段缓存:php think optimize:schema
- 类库映射:php think optimize:autoload
- Composer 自动加载优化:composer dump-autoload -o
- 视图层优化:启用模板缓存;将复杂逻辑移出视图,仅传递精简数据以减少渲染时间。
缓存策略落地
- 数据查询缓存:对高频、变化不频繁的查询使用缓存,示例:
- $data = cache(‘user_list’); if (!$data) { $data = User::select(); cache(‘user_list’, $data, 3600); }
- 选择合适的缓存驱动:文件缓存易用;高并发/分布式优先 Redis/Memcached,在 config/cache.php 配置驱动、主机与端口。
- 页面/片段缓存:对不常变的页面或区块使用页面缓存,示例:
- $this->view->cache(true, ‘cache_name’, 3600);
- 架构级缓存与异步:热点数据全量缓存;耗时任务(如发邮件、生成报表)放入队列异步处理,缩短请求响应时间。
数据库与 ORM 优化
- 索引与 SQL:为 WHERE/JOIN/ORDER BY 常用字段建立索引;避免全表扫描与过度复杂子查询;必要时使用原生 SQL 或查询构造器的高效写法。
- 解决 N+1:使用模型预加载避免循环查询,示例:User::with(‘posts’)->select();
- 查询缓存:对稳定结果集使用缓存,减少数据库压力。
- 连接与语句:合理使用数据库连接池降低连接开销;批量/大数据量操作使用chunk/cursor降低内存峰值。
- 大量数据处理:迁移、批量更新等尽量通过命令行执行,避免 Web 请求超时。
服务器、前端与架构优化
- Web 服务器与传输:选用 Nginx/Apache,开启 Gzip/Brotli;配置 Expires/Cache-Control 等 HTTP 缓存头;静态资源使用CDN与浏览器缓存。
- 资源合并与压缩:合并/压缩 CSS/JS,使用 图片压缩与 CSS Sprites,降低请求数与体积。
- 架构与并发:采用前后端分离便于独立优化与扩展;必要时引入负载均衡与多实例部署,提升整体吞吐与稳定性。
- 监控与持续优化:使用 Xdebug/Blackfire 做性能剖析,结合日志与监控定位瓶颈并迭代优化。