与我们合作
我们专注:网站策划设计、网络舆论监控、网站优化及网站营销、品牌策略与设计
主营业务:网站建设、移动端微信小程序开发、APP开发、网络运营、云产品·运维解决方案
有一个品牌项目想和我们谈谈吗?
您可以填写右边的表格,让我们了解您的项目需求,这是一个良好的开始,我们将会尽快与您取得联系。当然也欢迎您给我们写信或是打电话,让我们听到您的声音
您也可通过下列途径与我们取得联系:
地 址: 上海市长宁区华宁国际7L
电 话: 400-825-2717(咨询专线)
电 话: 13054973230(售后客户服务)
网 址: http://www.56gw.net
传 真: 021-61488448
邮 箱: admin@wumujituan.com
快速提交您的需求 ↓
WordPress优化,做好本地化优化和缓存,读写分离
发布日期:2024-06-12 浏览次数:17198
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官方出品的HyperDB 是一个非常的数据库类,它取代了一些 WordPress 内置的数据库功能。主要区别是:
* HyperDB 可以连接到任意数量的数据库服务器,
* HyperDB 检查每个查询以确定合适的数据库。
它支持:
读写服务器(复制)
可配置的读写优先级
本地和远程数据中心
私人和公共网络
不同数据库/主机上的不同表
智能后写主读
故障主机的故障转移
用于分析的统计信息
WordPress 多站点
docker管理系统的URLOS有相关解决方案:https://www.urlos.com/urlos-document/introduction/mysql-master-slave.html
数据库一主多备实现的数据库主从集群,修改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 ,当我们发布新文章,修改文章,通过评论,修改评论自动清理缓存.
Cache Master 是一个非常轻量级和高性能的缓存插件,可以动态加速您的 WordPress 网站。支持 File、Redis、Memcache、Memcached、APC、APCu、WinCache、MySQL、SQLite、MongoDB 等多达 10 种缓存驱动
wepublish耗子分享:
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 ();
请教大佬 Elasticsearch搜索 怎么搞,哪里有现成的源码?
挺复杂的,宝塔内置免费的elasticsearch
网上也有部署Elasticsearch的方法,因为和百度站内搜索引擎一样不支持Https,更好是docker部署,
IP:9200端口访问成功就是部署成功。
例外还要安装kibana、ik分词器
然后安装https://wordpress.org/plugins/elasticpress/ 插件设置索引。