全方位站长技能、SEO优化学习平台
当前位置:网站首页 > WordPress笔记 > 正文

WordPress优化:做好本地化优化和缓存,读写分离是重点

作者:admin发布时间:2023-12-27分类:WordPress笔记浏览:386评论:0


温馨提示:手机扫码可阅读当前文章!
文章简介:WordPress生态更丰富,有点什么问题搜索就能解决。国内的所谓开源免费几乎都是养猪待宰,谨慎商用。 说wp卡顿的是没有优化好,wepublish的WP-China-Plus 就是解决引用国外Google字体和js、官方市场被qiang...

WordPress生态更丰富,有点什么问题搜索就能解决。国内的所谓开源免费几乎都是养猪待宰,谨慎商用。 说wp卡顿的是没有优化好,wepublish的WP-China-Plus 就是解决引用国外Google字体和js、官方市场被qiang造成的卡顿问题。 wp的主要瓶颈在mysql上,特别是wp-post数据表,如果能用云数据库MySQL 更好。 至于运行效率,用opcache缓存PHP脚本,加上Redis或者Memcached缓存数据库查询,可大幅提高速度。 如果有点技术,可以用WordPress自带的rest-api,做headless读写分离,再加上Elasticsearch搜索,都是很成熟的解决方案。 无交互的小网站就用WP-Super-Cache或或SIMPLY STATIC生成全站静态,套个CDN,利用不间断服务,缓存时间久一点。


WordPress优化:做好本地化优化和缓存,读写分离是重点

  江湖之上,  WordPress  生态犹如繁花似锦,诸多问题皆有解决方案,只需轻轻一搜,便能破解疑难。然而,国内诸多开源免费之系统,却似那养猪待宰,商用之际,不得不防。言及  WP  卡顿,皆因未得优化之功,Wepublish  之  WP-China-Plus,犹如神兵利器,专治  Google  字体、JS  与官方市场之卡顿病症。


WP  之瓶颈,在于  MySQL,尤其是  WP-Post  数据表,如能启用云数据库  MySQL,则更胜一筹。论及运行效率,opcache  犹如神秘高手,悄然现身,缓存  PHP  脚本,再加上  Redis  或  Memcached  助力,数据库查询速度大幅提升。若有技术傍身,还可运用  WordPress  自带之  rest-api,实现  headless  读写分离,再加上  Elasticsearch  搜索,犹如神助,攻城略地。


而对于无交互之小网站,WP-Super-Cache  或  SIMPLY  STATIC  犹如神秘宝物,全站静态生成,叠加  CDN  庇护,不间断服务,缓存时间更长。此等良策,犹如江湖奇遇,令众多侠客受益匪浅。


然则,世间繁华,难免纷扰,网站运营,安全为首。若想防患于未然,何不内外兼修,以  WordPress  为核心,搭配  Wp-China-Plus、opcache、Redis、Memcached、rest-api、Elasticsearch  诸多神功,加固防护,再借助  WP-Super-Cache  或  SIMPLY  STATIC,生成静态,加速访问,防御与攻击并重,岂不妙哉?


悠悠江湖路,繁华似锦,WordPress  生态犹如一部百科全书,藏有无尽奥秘。诸君只需用心探索,细心领悟,必能融会贯通,成为一代宗师。卡顿之患,亦可化为乌有,谈笑间,轻松解决。借此良机,让我们一起踏上  WordPress  之征途,开创新的篇章,共赏这绚丽多彩的江湖世界。


WordPress官方出品的HyperDB 是一个非常高级的数据库类,它取代了一些 WordPress 内置的数据库功能。主要区别是:
* HyperDB 可以连接到任意数量的数据库服务器,
* HyperDB 检查每个查询以确定合适的数据库。
它支持:
读写服务器(复制)
可配置的读写优先级
本地和远程数据中心
私人和公共网络
不同数据库/主机上的不同表
智能后写主读
故障主机的故障转移
用于分析的高级统计信息
WordPress 多站点


数据库一主多备实现的数据库主从集群,修改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;


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

<?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 ();


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

<?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 ();




欢迎 发表评论:

  • 请填写验证码
WordPress笔记排行
    随机文章 | 热门文章 | 热评文章

服务热线

1888888888

要发发发发发发

站长微信公众号

站长微信公众号