前言:
优化网站速度是一个重要的任务,特别是当你的 WordPress 网站上有大量的文章时。文章过多可能导致网站变得慢卡顿,影响用户体验。为了解决这个问题,有几种方法可以帮助你优化网站速度。
首先,你可以使用缓存插件来提高网站的加载速度。缓存插件可以将你的网站内容存储在用户的浏览器中,这样当用户再次访问你的网站时,就可以直接从缓存中加载内容,而不需要重新从服务器下载。这可以大大减少网站的加载时间。
其次,你可以优化你的数据库。WordPress 文章存储在数据库中,如果数据库变得庞大而杂乱,会导致网站变慢。你可以使用数据库优化插件来清理和优化数据库,删除不必要的数据和修复数据库表。
另外,你还可以使用图片压缩插件来减小图片的文件大小。大型图片文件会增加网站的加载时间,因此压缩图片可以帮助你减少网站的负载时间。
最后,你可以考虑使用内容分发网络(CDN)。CDN 是一种将你的网站内容分发到全球各地服务器的技术,这样用户可以从离他们最近的服务器加载内容,从而提高网站的加载速度。
通过采取这些优化方法,你可以改善你的 WordPress 网站的速度,提供更好的用户体验。
WordPress 网站查询慢的原因是因为在查询帖子列表时,默认也会查询帖子数。使用 get_posts、query_posts 和 WP_Query 这些方法时会出现这个问题。尽管在 4.6.1+版本中 get_posts 方法已经不再使用 SQL_CALC_FOUND_ROWS,但是 query_posts 和 WP_Query 仍然使用,所以需要进行优化。
完全禁用 WordPress 的 SQL_CALC_FOUND_ROWS
将以下的代码放到functions.php文件中:
add_action('pre_get_posts', 'wndt_post_filter');
function wndt_post_filter($query) {
if (is_admin() or !$query->is_main_query()) {
return $query;
}
// 禁止查询 SQL_CALC_FOUND_ROWS
$query->set('no_found_rows', true);
}
EXPLAIN 方法代替 WordPress 的 SQL_CALC_FOUND_ROWS
如果您还需要查询文章数,请使用更高效的 EXPLAIN 方法代替 SQL_CALC_FOUND_ROWS,以更高效的方式禁用 SQL_CALC_FOUND_ROWS。这里我们使用 EXPLAIN 方法。具体代码如下,将以下的代码放在 functions.php 文件中。
if ( ! function_exists( 'zjck_set_no_found_rows' ) ) {
/**
* 设置 WP_Query 的 'no_found_rows' 属性为 true,禁用 SQL_CALC_FOUND_ROWS
*
* @param WP_Query $wp_query WP_Query 实例
* @return void
*/
function zjck_set_no_found_rows(\WP_Query $wp_query)
{
$wp_query->set('no_found_rows', true);
}
}
add_filter( 'pre_get_posts', 'zjck_set_no_found_rows', 10, 1 );
if ( ! function_exists( 'zjck_set_found_posts' ) ) {
/**
* 使用 EXPLAIN 方式重构
*/
function zjck_set_found_posts($clauses, \WP_Query $wp_query)
{
// Don't proceed if it's a singular page.
if ($wp_query->is_singular()) {
return $clauses;
}
global $wpdb;
$where = isset($clauses['where']) ? $clauses['where'] : '';
$join = isset($clauses['join']) ? $clauses['join'] : '';
$distinct = isset($clauses['distinct']) ? $clauses['distinct'] : '';
$wp_query->found_posts = (int)$wpdb->get_row("EXPLAIN SELECT $distinct * FROM {$wpdb->posts} $join WHERE 1=1 $where")->rows;
$posts_per_page = (!empty($wp_query->query_vars['posts_per_page']) ? absint($wp_query->query_vars['posts_per_page']) : absint(get_option('posts_per_page')));
$wp_query->max_num_pages = ceil($wp_query->found_posts / $posts_per_page);
return $clauses;
}
}
add_filter( 'posts_clauses', 'zjck_set_found_posts', 10, 2 );
转载请注明:汇站网 » WordPress 文章过多导致网站缓慢堵塞的优化方法