因为Wordpress程序注重扩展性与兼容性,执行过程中包含大量的钩子、判断、文件加载等操作,会导致系统资源占用高,执行速度缓慢的情况。 在访问量少的时候感觉不明细,一旦访问量较多的时候,Wordpress对CPU与内存的占用率是相当高的,所以Wordpress优化工作是必不可少的。
PHP Opcache
Opcache的全称是: Opcode cache,其前生是Optimizer+,它是PHP的官方公司 Zend 开发的一款闭源但可以免费使用的 PHP 优化加速组件。 Opcode cache 的目地是避免重复编译,减少 CPU 和内存开销。
在PHP 7中, Opcache 是默认安装的,无需另外安装,但需要手动开启。在PHP.ini文件中找到[opcache],参照以下内容进行开启。
[opcache] ;开启opcache opcache.enable=1 ;CLI环境下,PHP启用OPcache opcache.enable_cli=1 ;OPcache共享内存存储大小,单位MB opcache.memory_consumption=128
开启成功后,在PHPinfo中能看到以下内容:
WP Super Cache缓存插件
WP Super Cache 是WordPress 最佳的缓存优化插件,另外的W3 Total Cache与它类似, W3 Total Cache虽然功能更强大,但一般的网站使用 WP Super Cache 足够了。相对于 W3 Total Cache ,WP Super Cache的配置更简单。
在Wordpress后台插件 — 安装插件,输入WP Super Cache关键词进行查找,即可安装插件。
安装并启用插件后,在后台的设置菜单中会出现WP Super Cache选项,进入配置页面,参照下图进行设置。
开启专家模式后,如果是 Apache 环境, WP Super Cache 会自动修改 .htaccess文件,或者根据提示修改 .htaccess文件内容。如果是 Nginx 环境,需要用以下内容替换Wordpress的伪静态规则。
rewrite /wp-admin$ $scheme://$host$uri/ permanent; location ~ .*\.(oft|eot|svg|ttf|woff|woff2)$ { add_header Access-Control-Allow-Origin *; # 解决字体跨站问题 add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,OPTIONS; expires max; error_log off; access_log /dev/null; } # WP Super Cache rules. # Designed to be included from a 'wordpress-ms-...' configuration file. set $cache_uri $request_uri; #POST请求和带有查询字符串的网址应始终转到PHP if ($request_method = POST) { set $cache_uri 'null cache'; } if ($query_string != "") { set $cache_uri 'null cache'; } #不要缓存包含以下段的uri if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { set $cache_uri 'null cache'; } #不要将缓存用于登录的用户或最近的评论者 if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { set $cache_uri 'null cache'; } # 移动设备支持 # 移动浏览器部分可将其存储为非缓存版本。 默认情况下,由于包括21个在内的大多数现代wordpress主题都具有响应性,因此被评论。 如果要使用WP-Touch之类的插件,请在本节中取消注释配置行 # if ($http_x_wap_profile) { # set $cache_uri 'null cache'; #} #if ($http_profile) { # set $cache_uri 'null cache'; #} #if ($http_user_agent ~* (2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800)) { # set $cache_uri 'null cache'; #} #if ($http_user_agent ~* (w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-)) { # set $cache_uri 'null cache'; #} #END 移动设备支持 # 使用缓存或实际文件(如果存在),否则将请求传递给WordPress location / { try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args ;}
如果网站没有开启https访问,最后的部分用以下代码替换:
location / { try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args ;}
如果开启了移动设备支持(非响应式主题建议开启,PC端和移动端将缓存不同的内容),需要在以上 Nginx 配置中将相应行的#去掉。
WP Super Cache 缓存预加载配置:
Autoptimize插件
插件的作用是通过优化CSS,JS,图像,Google字体等来使您的网站更快。
这个部分是优化js代码的,其中Aggregate JS-files选项勾选的话,有可能会造成部分主题或插件的兼容性问题,如果出错,可以去掉勾选,或者在排除脚本中排除相应的js代码。
CSS优化的部分如上图选择即可。
至于内联和推迟CSS的选项,可以酌情开启(限高级用户)。
开启 Memcached 对象缓存
首先需要安装Memcached服务器与PHP的Memcached扩展,这个步骤本文暂不介绍。
宝塔面板中在软件商店中安装Memcached即可。
启用 MemcacheD Is Your Friend 插件后,可以在后台 工具 – Memcached 中查看到类似以下的信息。
如果 MemcacheD 服务器的IP地址与端口不是默认的 127.0.0.1:11211 ,可以在WP-config.php文件顶部添加以下内容(10.10.10.30:11211根据实际情况修改):
$memcached_servers = array( 'default' => array( '127.0.0.1:11211', '10.10.10.30:11211' ) );
666666666