wordpress加速优化最有效的7大方法
文章图片
本人反复折腾了wordpress很久,折腾了很多东西。
现在秉承「简单,少即是多!」的理念,把对wordpress速度最有效的方法,总结分享。
说点题外话,现在对于很多人来说,修复自己生命当中因欲望产生的各种漏洞,是当务之急!我以前经常用较多资源做较少资源能做好的事,因此财富漏洞很大,现在逼得往内走,一切只需向内寻找,转变心念,转变自己。
好了,说正事,说到优化,我认为是『以少博多』,就是以有限较少资源实现相对较好的性能。
我的优化思路,干活前先把思想阐述清楚:
1、动静态资源分离
源站服务器主要存储网站的动态数据,存储空间则用来存储网站的静态文件如:图片,css,js,字体等。从而实现网站的动静分离,当用户访问一个网站时,分别从源站服务器和存储空间的服务器同步读取数据,可以大幅的提升网页性能。
同时,存储空间结合CDN内容分发网络来使用,效果最好。让用户可以从离自己最近的CDN节点上获取静态资源。
2、图片优化
一般图片的大小可能占页面总大小的60%以上,因此网站图片的优化,是网站速度优化的重中之重。在网站图片的格式上,优先推荐使用jpg格式的图片,在同样文件大小的情况下,jpg格式的图片清晰度是最好的。
另外,在上传图片前,尽量的裁剪,一般情况下1000*1000够用。除了裁剪,在图片上传之前,一定要用无损压缩工具对你的图片压缩一下。如:
Google推出在线图片压缩工具Squoosh,可裁剪转换多种格式
https://squoosh.app/
同时,嫌麻烦可以安装Compress JPEG & PNG images插件,可以在上传的同时裁剪过大图片和压缩图片。
3、缓存
WP Super Cache通过将网页文件生成静态的HTML文件来实现全站的静态加速。
Opcode「PHP缓存加速」,PHP编译后的中间文件,缓存给用户访问。节省了PHP引擎重复编译的时间,降低了服务器负载,同时减少了CPU和内存的开销。
4、css,js压缩合并
在测试没有问题的前提下,合并和压缩脚本、CSS文件、JS文件等,减少文件体积,减少HTTP请求数。如:插件Autoptimize
5、启用Gzip压缩
启用GZIP压缩Html文件,css,js可以使得传输过程的流量大大减少,加速网站加载速度。
查你的网站是否开启了压缩?https://www.giftofspeed.com/gzip-test/
6、精简「断舍离」
精简掉WordPress不常用的,Google字体,禁用emoji,移除头部不必要的链接等。
减少插件的使用,停用或及时删除不使用的插件。
7、浏览器缓存和懒加载
浏览器缓存指的是:当我们浏览网站的时候,静态资源如JS和CSS文件、图像文件等浏览器存储会在本地存储一个副本,以便下次访问同个网址的时候可以不再连接服务器,直接使用本地的缓存。服务器端程序可以通过 HTTP Cache Headers 来设置一个较长的缓存过期时间,减轻服务器的负担,缩短了响应时间,显著得提高网站的性能。
图片延迟加载,又叫懒加载。懒加载就是等到让图片出现在浏览器中的窗口的时候再去加载该图片资源。这样避免网页在同一时间加载过多资源导致页面卡顿,从而直接提升网页打开速度。现在一般的主题可能支持了图片延迟加载,如果没有可以安装懒加载插件如:a3 Lazy Load。
8、服务器软件尽量升级到最新版本
Linux操作系统升级命令:yum update
PHP7.3对网站性能的提升还是非常显著的,而且都是有真实数据作为支撑的。
Nginx,MariaDB等也一样。我是1G内存一样可以运行的很好。
建议使用LNMP安装或升级都可以,https://lnmp.org/和https://github.com/licess/lnmp
优化完毕后,可以使用测试网站检查一下问题,
网站检测优化:网站速度诊断_网站性能测试_网站速度优化_卡卡网 pagespeed.webkaka.com
用测试网站测试一下速度或预加载CDN:https://www.17ce.com/
1、wordpress插件推荐
一些缓存和好用的插件对wordpress速度提升有很大帮助,但不要加载太多插件,安装过多的插件会让你的网站变的臃肿不堪,打开速度变慢。还是那句话「断舍离」,减少插件的使用,停用或删除不使用的插件。
1、「Autoptimize」 优化网站, 整合并压缩 CSS 和 JavaScript 代码。压缩js,css,html都没有问题。这个插件非常好用,特别是使用了CDN以后,以前没压缩css的时候,更新一个css很麻烦还得推送CDN刷新缓存,但这个插件在每次修改完某个css文件后会生成一个新的合并文件,每次调用最新的合并文件,这样CDN就不用刷新了。js也一样。
2、WP Super Cache超快而且配置简单的缓存插件,免费。通过将网页文件生成静态的HTML文件来实现全站的静态加速。由于生成了静态的HTML文件,访问者访问网站时不用再通过服务器解析PHP文件,大大减轻了服务器的压力。
3、Compress JPEG & PNG imagesWordPress上传图片压缩插件,每月500张限额。(2019-3-23注:上传的图片名不要用中文,否则选择在上传时压缩无效。同时发现wordpress中文图片名删除时也不会自动删除生成的缩略图。建议同时安装附件改名插件:CoolWP Pinyin Attachment Name(附件名中文改拼音))
4、Google XML SitemapsSEO优化 通过Sitemap插件提升搜索引擎收录。
5、SMTP by BestWebSoft配置邮件发送的。
6、WP-Optimize数据库清理和优化插件。使用的时候启用,清理完毕,停用即可。
基本建议的配置图如下:
Autoptimize配置
WP SUPER CACHE配置
2、静态资源使用CDN
CDN内容分发网络,就是把你源站的静态资源分发到cdn分布到全国的各个节点。用户访问资源时是从就近的缓存服务器上获取资源。内容分发网络CDN,相当于网络中的高速公路,可以对各类静态数据进行缓存,从而加速内容分发。
2.1 七牛云存储空间和融合CDN
免费的推荐七牛云,每个月10G空间+20G下载流量永久免费。
七牛云 - 国内领先的企业级云服务商
为什么建议大家使用对象存储?
答:网站数据动静分离,大幅提升网页性能
一般情况下,我们都是建议使用主机服务器和对象存储分工合作的方式来存储网站数据。主机服务器主要负责存储网站的动态数据,对象存储则用来存储网站的静态文件。从而实现网站的动静分离,当用户访问一个网站时,分别从主机服务器和对象存储的服务器同步读取数据,可以大幅的提升网页性能。
最理想的情况,结合CDN内容分发网络来使用。
创建存储空间
填写空间名字,另外就是镜像源,也就是这个存储空间的源站。
「镜像源」:
回源地址的作用?进行数据迁移。当 存储空间 上没有用户请求访问的资源时,会从回源地址拉取。
设置回源时,存储空间 上不存在回源地址的相应资源或路径时,存储空间 会在用户首次访问后自动创建目录吗?
会,存储空间 会自动拉取并创建目录。
2.2 绑定加速域名
因为此CDN加速域名读取的内容是七牛云空间的内容,所以加速域名的源站选择七牛云存储。
2.3 使用CDN后wordpress配置
WP Super Cache里有cdn配置,大概功能就是替换所有wp-content, wp-include带有这两个目录名的链接,把www.mida.xin替换为cdn域名cdn.mida.xin。也就是访问静态资源通过cdn加速域名访问。
Autoptimize也有cdn配置,使压缩合并后的文件可以使用cdn域名访问。
Autoptimize之CDN选项
2.4 CDN要解决的评论问题
使用CDN以后,如果出现评论问题,一般的原因是涉及评论相关的js文件里面的.php地址被替换为了cdn访问地址,结果如:cdn.mida.xin/wp-content/themes/xiu/modoles/comment.php,由于CDN源是对象存储,所以无法发表评论,需要把这些地址的cdn域名修改为源站域名。
以XIU主题为例,xiu主题的js/custom.js 里面的php文件地址需要把cdn地址替换为源站地址。一共2个带有.php的地方需要修改,
如:
jui.uri + '/actions/index.php
jui.uri + '/modules/comment.php
改为
jui.uri.replace('cdn.mitaa.cn','www.mitaa.cn') + '/actions/index.php
jui.uri.replace('cdn.mitaa.cn','www.mitaa.cn')+'/modules/comment.php
其他的主题,原理相同,以此类推!
若不能评论,检查问题方法:
使用chrome浏览器,点击右键『检查』,查看带叉号?的错误提示信息,具体查看分析即可。
3、PHP缓存加速
缓存操作码(opcode)
Opcode,PHP编译后的中间文件,缓存给用户访问
当客户端请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件,该文件是执行PHP代码后的一种二进制文件表现形式。默认情况下,这个编译好的操作码文件由PHP引擎执行后丢弃;而操作码缓存的原理就是将编译后的操作码保存下来,并放入到共享内存里,以便再下一次调用该PHP页面时重用它,避免了相同代码的重复编译。节省了PHP引擎重复编译的时间,降低了服务器负载,同时减少了CPU和内存的开销.
参考文章让PHP7达到最高性能的几个提示http://www.laruence.com/2015/12/04/3086.html
Opcache开启方法:
编辑php.ini
[opcache]
zend_extension=opcache.so
;
启用Zend Optimizer优化开关
opcache.enable=1
opcache.enable_cli=1
;
共享内存的大小, 总共能够存储多少预编译的 PHP 代码(单位:MB)
opcache.memory_consumption=64
;
暂存池中字符串的占内存总量.(单位:MB)
opcache.interned_strings_buffer=4
;
最大缓存的文件数目 200到 100000 之间
opcache.max_accelerated_files=10000
;
2s检查一次文件更新 注意:0是一直检查不是关闭
;
我把opcache.revalidate_freq设为2小时,就是说有php文件改动,需要2小时生效,着急的话可以通过重置opcache缓存。通过下载ocp.php放到自己网站上,访问页面操作。
opcache.revalidate_freq=7200
opcache.validate_timestamps=1
;
是否保存文件/函数的注释如果apigen、Doctrine、 ZF2、 PHPUnit需要文件注释,推荐 0
opcache.save_comments=0
;
让Opcache把opcode缓存缓存到外部文件中。通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升
opcache.file_cache=/tmp
最后,让配置生效,重新加载php-fpm。
service php-fpm restart
4、gzip传输压缩加速
启用GZIP压缩Html文件,css,js可以使得传输过程的流量大大减少,加速网站加载速度。
以nginx为例,编辑nginx.conf
gzip on;
gzip_min_length1k;
gzip_buffers4 16k;
gzip_http_version 1.1;
gzip_comp_level 4;
## 级别4
gzip_typestext/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxiedexpired no-cache no-store private auth;
gzip_disable"MSIE [1-6]\.";
5、关于浏览器缓存
浏览器缓存,又称 HTTP 缓存,指的是:当我们浏览网站的时候,静态资源如JS和CSS文件、图像文件等浏览器存储会在本地存储一个副本,以便下次访问同个网址的时候可以不再连接服务器,直接使用本地的缓存。服务器端程序可以通过 HTTP Cache Headers 来控制缓存行为,减轻服务器的负担,缩短了响应时间,显著得提高网站的性能。
当服务器发出响应的时候,可以通过两种方式来告诉客户端(浏览器)如何处理缓存:
第一种是Expires, 第二种是 Cache-Control
比如:一个缓存设置测试结果
[root@izbp14xsw00gvnuz88t34fz vhost]# curl -X GET -I localhost/wp-content/logo/logo.jpg
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 21 Jan 2019 05:38:59 GMT
Content-Type: image/jpeg
Content-Length: 7467
Last-Modified: Thu, 20 Dec 2018 07:17:55 GMT
Connection: keep-alive
ETag: "5c1b4223-1d2b"
Expires: Tue, 21 Jan 2020 05:38:59 GMT
Cache-Control: max-age=31536000
Cache-Control:public
Accept-Ranges: bytes
源站服务器的浏览器缓存如何设置
首先,要在源站,如nginx配置里设置浏览器缓存过期时间
编辑nginx.conf或虚拟vhost的conf配置文件:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires365d;
add_header Cache-Control "public";
}
location ~ .*\.(js|css)?$
{
expires365d;
add_header Cache-Control "public";
}
location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|swf|flv|eot|svg|ttf|woff)?$
{
expires 365d;
add_header Cache-Control "public";
}
6、关于缩略图设置
在wordpress后台的“设置->多媒体”中,我们将缩略图大小、中等大小、大尺寸三个选项的值都设置成了0,并保存,但我们在上传图片的过程中,发现依然会生成一个“图片名-768x576.jpg”的缩略图,这个要想取消,就必需在数据库中动刀了。
若不方便操作数据库,可以登录wordpress后台以后,然后打开https://www.xxx.com/wp-admin/options.php,会出现所有的设置,搜索“medium_large_size_w”,将值改为0,保存即可。
在wordpress后台的“设置->多媒体”中,我们将缩略图大小选项的值设置成了0,但是这样的话新上传的图片,添加到文章后,在主页列表当中显示缩略图不再显示xxx-240x180.jpg而是直接调用原图,这样反而不好。
所以,缩略图大小选项还是要设置好,并选择始终生成。
7、wordpress之必须精简优化
wodpress安装好后,为了适应国内网络环境,有些东西需要调整或是移除,可以有效的提高访问速度:
把下面的代码添加到主题目录下funtions.php即可。
/*
* wodpress安装好后,为了适应国内网络环境,有些东西需要调整或是移除,可以有效的提高访问速度
* ====================================================
*/
//1、替换头像网址,防止官方网址无法访问造成打开网页缓慢:
if (!function_exists('replace_to_v2ex_avatar')) {
function replace_to_v2ex_avatar($avatarUrl) {
return preg_replace(["/[0-9]\.gravatar\.com\/avatar/", "/secure.gravatar\.com\/avatar/"], "cdn.v2ex.com/gravatar", $avatarUrl);
}
}
add_filter('get_avatar', 'replace_to_v2ex_avatar');
// 2、移除谷歌字体,同样是为了防止官方网址打开缓慢,直接移除:
if (!function_exists('remove_wp_open_sans')) {
function remove_wp_open_sans() {
wp_deregister_style('open-sans');
wp_register_style('open-sans', false);
}
}
// 前台删除Google字体CSS
add_filter('wp_enqueue_scripts', 'remove_wp_open_sans');
// 后台删除Google字体CSS
add_filter('admin_enqueue_scripts', 'remove_wp_open_sans');
/*
// 3、替换默认的jquery,使用CDN上的jquery,提高加载速度:
if (!function_exists('register_my_jquery')) {
function register_my_jquery() {
if (!is_admin()) {
wp_deregister_script('jquery-core');
wp_register_script('jquery-core', '//cdn.bootcss.com/jquery/3.3.1/jquery.min.js', false, null);
wp_enqueue_script('jquery-core');
wp_deregister_script('jquery-migrate');
wp_register_script('jquery-migrate', '//cdn.bootcss.com/jquery-migrate/3.0.1/jquery-migrate.min.js', false, null);
wp_enqueue_script('jquery-migrate');
}
}
}
add_action('wp_enqueue_scripts', 'register_my_jquery');
*/
// 4、禁用emoji,这个真的是作用不大,感觉多余,直接移除:
function disable_emojis() {
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
}
add_action( 'init', 'disable_emojis' );
//Filter function used to remove the tinymce emoji plugin.
function disable_emojis_tinymce( $plugins ) {
if ( is_array( $plugins ) ) {
return array_diff( $plugins, array( 'wpemoji' ) );
} else {
return array();
}
}
// 5、禁用embeds,这个也没什么作用,虽然说只是移除wp-embed.min.js,但代码稍微有点多,直接应用没事:
function disable_embeds_init() {
global $wp;
// Remove the embed query var.
$wp->public_query_vars = array_diff( $wp->public_query_vars, array('embed',));
// Remove the REST API endpoint.
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
// Turn off
add_filter( 'embed_oembed_discover', '__return_false' );
// Don't filter oEmbed results.
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
// Remove oEmbed discovery links.
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
// Remove oEmbed-specific JavaScript from the front-end and back-end.
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' );
// Remove all embeds rewrite rules.
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
}
add_action( 'init', 'disable_embeds_init', 9999 );
function disable_embeds_tiny_mce_plugin( $plugins ) {
return array_diff( $plugins, array( 'wpembed' ) );
}
function disable_embeds_rewrites( $rules ) {
foreach ( $rules as $rule => $rewrite ) {
if ( false !== strpos( $rewrite, 'embed=true' ) ) {
unset( $rules[ $rule ] );
}
}
return $rules;
}
function disable_embeds_remove_rewrite_rules() {
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'disable_embeds_remove_rewrite_rules' );
function disable_embeds_flush_rewrite_rules() {
remove_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'disable_embeds_flush_rewrite_rules' );
//移除头部不必要的链接
remove_action( 'wp_head', 'wp_resource_hints', 2);
// 去除DNS预解析
remove_action( 'wp_head', 'wp_generator' );
//隐藏wordpress版本
remove_action( 'wp_head', 'rsd_link' );
//移除头部RSD链接
remove_action( 'wp_head', 'wlwmanifest_link' );
//移除头部wlwmanifest链接
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
//移除头部wp-json链接
remove_action( 'wp_head', 'wp_shortlink_wp_head');
//移除头部shortlink
remove_action( 'wp_head', 'rel_canonical' );
//移除canonical标记
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head');
//移除头部上下篇链接
remove_action( 'wp_head', 'feed_links_extra', 3);
// 移除额外的feed链接
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
//移除wp-embed.min.js
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );
//移除头部oembed链接
add_filter( 'show_admin_bar', '__return_false' );
//删除AdminBar
add_filter('xmlrpc_enabled', '__return_false');
//屏蔽 XML-RPC (pingback) 的功能
【wordpress加速优化最有效的7大方法】完毕,如果对你有帮助,请把你的感受分享出来!
推荐阅读
- 数据库设计与优化
- Improve|Improve Nested Conditionals(优化嵌套的条件语句) 面对大量的if-else语句
- 首屏时间,你说你优化了,那你倒是计算出给给我看啊!
- 数据库|SQL行转列方式优化查询性能实践
- #12-UITableView|#12-UITableView 优化方案
- 从前沿科技到现实应用,人脸识别智能门禁加速走进智慧社区
- KubeDL HostNetwork(加速分布式训练通信效率)
- 《加速》第四章
- WordPress安装后必须要做的10件事
- 加速(从拖延到高效,过三倍速度人生)