|
|
最近帮朋友的论坛做优化,他用的是Discuz X3.4,首页打开要将近10秒,用户流失很严重。折腾了好几天,总算把加载时间压到了1.5秒以内,把过程记录下来分享给大家,希望对遇到同样问题的站长有用。
首先要搞清楚慢在哪里,不能盲目乱改。我用Chrome的开发者工具看了一下瀑布图,发现最大的问题是数据库查询太多,首页一个请求触发了将近200次SQL查询,这几乎是绝大多数Discuz站点卡顿的根源。Discuz的首页默认会去查很多版块的最新帖子、在线用户、统计数据等等,数据量一大,查询就非常慢。
解决数据库查询问题,最有效的办法是开启Discuz自带的缓存机制。进入后台,找到"全局"→"性能优化设置",把数据缓存相关的选项全部打开,同时把首页缓存时间设置为适当的值,比如60秒或者120秒。这样用户访问首页时,很多数据是直接读缓存的,不会每次都跑数据库。另外强烈建议安装Memcached或者Redis,把缓存从文件缓存升级成内存缓存,效果差异非常明显,文件缓存在高并发下本身也会成为瓶颈。
服务器环境这一块也别忽视。如果还在用PHP 5.x,赶紧升级到PHP 7.4或者PHP 8.x,同样的代码执行速度能快一倍不止。然后开启OPcache,让PHP脚本编译结果缓存在内存里,减少重复编译的开销。MySQL那边也要优化,检查一下slow query log,找出慢查询语句,给相关字段加索引。Discuz的帖子表、用户表数据量大了之后,缺少索引会非常致命。
首页显示内容也要精简。很多站长喜欢在首页加各种插件、挂各种数据调用,什么最新回复、热门帖子、积分排行、在线会员列表一股脑全塞进去,每一块都要查数据库,叠加起来就很慢。建议回到后台仔细审查首页都展示了哪些模块,没必要的全部关掉,能合并查询的尽量合并。Discuz模板里有些魔术变量每次调用都触发查询,改模板的时候要注意这个问题。
静态资源的优化也不能跳过。开启Gzip压缩,把CSS、JS文件合并压缩,图片走CDN。Discuz后台有"静态资源CDN"的设置项,填上CDN域名之后,头像、附件、JS这些资源就不走主服务器了,能大幅降低主服务器的压力和页面加载时间。如果预算允许,把整个站套一层CDN缓存更好,比如接入CloudFlare或者国内的腾讯云CDN。
还有一个经常被忽略的点,就是数据库定期维护。Discuz跑了几年之后,数据库碎片会非常严重,定期执行OPTIMIZE TABLE对主要的表做碎片整理,能明显提升查询速度。另外帖子软删除之后并不会真正删掉,时间长了数据库里堆了大量无效数据,可以定期清理一次。
总的来说,Discuz首页慢是个系统性问题,不是改一个地方就能搞定的。按照我说的这几个方向逐一排查优化,基本上都能把加载时间控制在2秒以内。有问题的朋友可以在评论里说一下你的具体情况,我看到了都会回复。 |
|