之前王会博客分享过一篇给 WordPress 开启 Nginx 缩略图的教程,用着确实不错!但是总感觉清晰度不敢恭维,就算将裁剪质量调到 90 依然失镇严重,于是想另辟蹊径。
想起之前帮一个站长做 CC 防御的时候,发现他的网站就算被纯静态化,被攻击时 CPU 依然狂飙。最后分析请求日志发现,所有的压力来自网站的 PHP 缩略图功能。这个 PHP 缩略图虽然可以将实时生成的图片缓存成文件,但是第二次被请求,PHP 依然需要进行一些很简单的判断,比如这个缩略图是否被缓存、缓存文件是否过期等。在海量 IP 的请求下,这些简单的 PHP 动态判断就成为了拖沓大户了!
这也就不难理解 WP-Super-Cache 的 php 缓存模式比 Mod_Rewrite 模式要慢的原因了!所以,静态缓存最终都要完全抛弃掉任何简单计算才能算是淋漓尽致!
这玩意在访问量过大时是个拖沓大户,但如果我想办法去掉其中的 PHP 动态判断呢?自然就能发挥到淋漓尽致了!
一、加速思路
我顺藤摸瓜,找到了这个 PHP 缩略图的使用方法:
可以看到,这种传参肯定是存在动态判断的,所以要完全静态化,首先就要修改这个缩略图形式。
很简单,延续之前分享的 Nginx 缩略图思路,把上面的 url 改成在图片地址最后带参数的模式,然后伪静态重写为上面的形式,最后通过 Nginx 实现纯静态缓存。
二、部署方法
①、PHP 代码
下载后解压得到 thumb 文件夹,编辑里面的 timthumb-config.php,按照注释修改下(可选)。
然后将整个文件夹上传到网站根目录,现在按照倡萌给出的 url 形式肯定就可以看到缩略图了。
②、Nginx 规则
第①步能够正常看到缩略图效果后,我们接着部署 Nginx 规则。
在网站原有的 Nginx 规则中插入如下规则:
#Nginx重写PHP缩略图URL规则location ~ .*.(gif|jpg|jpeg|png|bmp)$ { set $width ''; set $height ''; set $width $arg_w; set $height $arg_h; #只要图片带上宽度(?w=)或高度(?h=)参数,都会将访问重写到/thumb/?src=* 这个动态缩略图生成的接口上 if ( $width != '' ) { rewrite ^(.*)$ /thumb/?src=http://$host/$1 last; } if ( $height != '' ) { rewrite ^(.*)$ /thumb/?src=http://$host/$1 last; } expires max;}
这样还只是重写了缩略图的 URL 形式,如果需要开启缓存,则需要用到 Nginx 的 fastcgi 缓存。
按照之前的文章部署 fastcgi 缓存规则后,这个缩略图就被 Nginx 缓存了(在 F12 开发者模式中查看 network 头部信息即可看到 HIT from yourdomain.com),加载速度自然也就上来了!
三、主题修改
做完上述操作之后,还只是具备了这个缩略图功能,而实际应用到博客文章,总不能手工一个一个输入图片带上尺寸吧?而且还有一堆老文章也不可能人工修改一遍吧?
实际解决很简单,请参考如下代码:
add_filter ('the_content', 'content_thumbnail');function content_thumbnail($content) { global $post; $pattern1 ="//i"; $pattern2 ="//i"; $pattern3 ="//i"; $replacement = ''; $replacement2 = 'post_title.'" tilte="'.$post->post_title.'"$7>'; $content = preg_replace($pattern2, $replacement, $content); $content = preg_replace($pattern3, $replacement, $content); $content = preg_replace($pattern1, $replacement2, $content); $content = preg_replace('//i', '', $content);return $content;}
修改原理:
①、将老文章中带尺寸的图片改成完整图片路径,我之前用的是 300 大小的图片缩略图,所以这里需要将高或宽 300 的全部去掉,变成完整尺寸图片路径;
②、最后将文章中所有图片路径上带上适合本文分享的尺寸规则,比如上述代码是?w=480,即图片缩略图统一改为 480px 大小。
好了,就分享这么多,有需求的朋友可以参考上面的代码,根据实际情况修改后加入到主题 functions.php 即可完美实现文章缩略图了。
扩展资料:强烈推荐3款静态网站生成器