前言:
优化网站速度是一个重要的任务,特别是当你的
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
文章过多导致网站缓慢堵塞的优化方法