WordPress如何通过本地化优化和缓存,读写分离来为网站提速?

WordPress生态非常丰富,只要你善于利用搜索,几乎能解决建站中遇到的任何问题,这主要得益于它的用户群体十分庞大。然而在国内,所谓的开源免费的内容管理系统(CMS)往往不可靠,有些内容管理系统的开发者就把它的使用者当猪一样,需要谨慎商用,一旦觉得养肥养大了,就把你给宰了。

在众多使用WordPress的站长中,总是觉得WordPress有卡顿的问题,实际上是因为他们没有对其进行优化。幸运的是,WP-China-Plus的wepublish模块能够解决一些常见问题,比如引用国外Google字体和js以及官方市场被屏蔽导致的卡顿。除此此之外,WordPress的主要瓶颈在于mysql数据库上,尤其是wp-post数据表。经常会因为内容过多,导致加载缓慢、卡顿,这里建议你使用云数据库MySQL,或许能得到更好的体验。

要想提高WordPress脚本的运行效率,可以使用opcache缓存PHP脚本,并且结合Redis或者Memcached缓存数据库查询,这样能够大大提升速度。对于有一定技术能力的人来说,可以使用WordPress自带的rest-api实现headless读写分离。另外,结合Elasticsearch搜索引擎,这些都是非常成熟的解决方案。对于一些交互较少的小网站,可以使用WP-Super-Cache或者SIMPLY STATIC生成全站静态文件,并且利用CDN的不间断服务,提高页面加载速度,并且延长缓存时间。本文给出几个提高用WordPress系统搭建的网站如何提高网站访问速度的实用方法,不知道会不会对站长有些许帮助。

一、生成全站静态文件

生成静态文件,是大部分建站程序能快速提高访问速度的最佳方法。优点:无需频繁查询数据库,无需脚本运行处理,不仅提高了网站的访问速度,同时节省了服务器资源。缺点:数据更新可能不及时,同时生成的静态文件会占用服务器数据盘,如果你的数据盘空间不够大,可能会影响网站部分页面的正常访问。

如何生成全站静态文件?WordPress 提供了一个内置的功能来生成静态页面,叫做 "静态页面生成" (Static Page Generation)。这个功能可以在 WordPress 后台的 "设置" -> "静态页面生成" 中找到。但是不应该不够智能,需要手动生成!但是你可以使用一些相关插件来进行静态化,可以使用一些流行的插件,例如 "WP Super Cache" 或 "W3 Total Cache"。这些插件都可以帮助你将 WordPress 网站的页面生成为静态 HTML 文件,以提高访问速度。而且网上有很多相关插件,直接下载安装即可。当然也可以使用一些克隆工具,把网站页面保存为静态文件。我使用zblog建站的时候,曾经自己写过一个生成静态文件的脚本,配合宝塔面板的计划任务,每天定时定量生成并更新静态文件。脚本核心代码:

<?php
ob_start(); // 启动输出缓冲区
// 这里是您的动态网页代码
$content = ob_get_clean(); // 获取输出缓冲区内容并清空缓冲区
file_put_contents('static-page.html', $content); // 将内容保存为静态HTML文件
?>

 

我对不同的页面类型进行更新频率进行了控制,以便在节约服务器资源的同时让网站页面保持最新状态!如果你懂一些技术,你也可以自己开发一个满足自己需求的任务脚本来完成该工作,而且难度并不大!

二、读写分离

HyperDB是一个由WordPress官方推出的高级数据库类,它取代了一些WordPress内置的数据库功能。与传统的数据库功能相比,HyperDB具有以下主要区别和优势:

1. 连接数量灵活性:HyperDB可以连接到任意数量的数据库服务器。这意味着它可以实现数据库的横向扩展,提高系统的可靠性和性能。

2. 智能查询分配:HyperDB会检查每个查询,并根据查询的特点决定将其发送到哪个数据库。这种智能的查询分配机制可以确保每个查询都能被发送到最合适的数据库服务器上,提高系统的整体效率。

3. 支持读写服务器:HyperDB支持读写服务器(复制),这意味着可以实现读写分离,提高系统的负载均衡和并发性能。

4. 配置灵活性:HyperDB允许对读写优先级进行配置,这使得可以根据具体需求设置数据库服务器的访问优先级,提高系统的定制性和灵活性。

5. 支持多数据中心:HyperDB可以连接到本地和远程的数据中心,这使得可以实现数据的跨地域备份和冗余,提高系统的可用性和灾备能力。

6. 支持不同数据库/主机上的不同表:HyperDB可以在不同的数据库和主机上分别存储不同的表,这可以灵活地进行资源分配和扩展,提高系统的可扩展性。

7. 故障转移:HyperDB支持故障主机的故障转移,即当某个数据库服务器出现故障时,可以自动切换到备用服务器上,保证系统的可用性。

8. 高级统计信息:HyperDB提供了用于分析的高级统计信息,可以对数据库的性能和查询进行监控和分析,帮助优化系统的性能和可靠性。

如果你使用WordPress多站点docker管理系统的URLOS,你可以通过使用HyperDB来实现一主多备的数据库主从集群。具体的解决方案和配置方法请参考URLOS的官方文档。根据文档,你只需要修改db-config.php文件中的数据库读写分离配置即可实现这一功能。

$wpdb->add_database(array(
    'host'     => 'mysql57001_master', // 主要数据库地址
    'user'     => 'wordpress0_3c9db',
    'password' => 'V4ex41r^pGU2E^7TP7l;cUaqcHLxaGa7nQvzz6CPA',
    'name'     => 'wordpress0_3c9db',
    'write'    => 1, // 给主要数据可写入
    'read'     => !defined('DB_HOST_RPL1') ? 1 : 0, // 当从数据库不可用时主要数据库才可读取,如果从数据库可用则从从数据库读取。
));
if(defined('DB_HOST_RPL1')):
    $wpdb->add_database(array(
        'host'     => 'mysql57001_slave', // 从数据库地址
        'user'     => 'wordpress0_3c9db',
        'password' => 'V4ex41r^pGU2E^7TP7l;cUaqcHLxaGa7nQvzz6CPA',
        'name'     => 'wordpress0_3c9db',
        'write'    => 0,  // 从数据库不可写入
        'read'     => 1,  // 从数据库可读取
    ));
endif;

 

对于一般小网站,其实根本不需要那么多优化。如果你使用的是宝塔面板,可以用Nginx+Redis Cache缓存来为网站提速。配合WordPress插件Nginx Helper ,当我们发布新文章、修改文章、通过评论、修改评论的时候,还可以自动清理原有缓存。

WordPress 祖传使用SQL_CALC_FOUND_ROWS进行数量统计并计算分页,但是这个查询语句在大数据量 (W+) 的情况下是很慢的,一个比较好的解决方法是将其替换成更为现代的COUNT语句。根据wepublish耗子的分享:

<?PHP
/**
 * Plugin Name: Fix WordPress Slow Queries
 * Description: Fix WordPress Slow Queries
 * Author: Mahdi Akrami
 * Version: 1.0.0
 */
class FIX_WP_SLOW_QUERY {
        public static function init () {
                /**
                 * WP_Query
                 */
                add_filter ( 'found_posts_query', [ __CLASS__, 'add_found_rows_query' ], 999, 2 );
                add_filter ( 'posts_request_ids', [ __CLASS__, 'remove_found_rows_query' ], 999 );
                add_filter ( 'posts_pre_query', function ( $posts, \WP_Query $query ) {
                        $query->request = self::remove_found_rows_query ( $query->request );
                        return $posts;
                }, 999, 2 );
                add_filter ( 'posts_clauses', function ( $clauses, \WP_Query $wp_query ) {
                        $wp_query->fw_clauses = $clauses;
                        return $clauses;
                }, 999, 2 );
        }
        public static function remove_found_rows_query ( $sql ) {
                return str_replace ( ' SQL_CALC_FOUND_ROWS ', '', $sql );
        }
        public static function add_found_rows_query ( $sql, WP_Query $query ) {
                global $wpdb;
                $distinct = $query->fw_clauses['distinct'] ?? '';
                $join     = $query->fw_clauses['join'] ?? '';
                $where    = $query->fw_clauses['where'] ?? '';
                $groupby  = $query->fw_clauses['groupby'] ?? '';
                $count = 'COUNT (*)';
                if ( ! empty ( $groupby ) ) {
                        $count = "COUNT ( distinct $groupby )";
                }
                return "
                        SELECT $distinct $count
                        FROM {$wpdb->posts} $join
                        WHERE 1=1 $where
                ";
        }
}
FIX_WP_SLOW_QUERY::init ();

 

三、使用CDN内容分发

我相信对于做网站的朋友来说,CDN这个词并不陌生,一个好的CDN服务不仅能够提高网站的访问速度,同时还能在一定范围内提高网站的安全系数和起到一定防御流量攻击的效果。配置得当,当你搭建网站的服务器宕机了,网页还能正常访问。而且使用CDN内容分发功能,与上面的优化方案并不冲突,甚至可以达到锦上添花的效果。不过会额外增加一笔费用!

四、提高服务器配置

其实很多不是很大的性能问题,我们都可以通过优化代码和提高服务器配置来进行优化。为什么把这一项放到最后面呢?主要是觉得提高服务器配置和优化代码对网站的提速帮助是有限的,同时成本也是很高的。成本主要考虑技术成本和资金成本,资金成本就不用说了,你想用虚拟主机的预算来完成高配置独立服务器的性能那是不可能的;技术成本更是一笔无头账,不仅消耗人力、精力,也需要消耗大量时间,就算很多技术精湛的大佬,也不会有那么多时间和精力去把一个网站程序的代码优化一遍。

转自:https://mp.weixin.qq.com/s/U-bc7xjutzyPH-VFOsjAsg

文章版权归原作者所有或来自互联网,未经允许请勿转载。如有侵权请联系我删除,谢谢!
THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录