首页 > WordPress > 开发笔记 > WordPress网站地图(sitemap)性能优化

WordPress网站地图(sitemap)性能优化

一个老不正经 2023/07/03 1,701围观

之前一点优化用的是知更鸟的主题,不得不说SEO效果非常好,但是性能方面比较难受,承载不了太多,比如说网站地图使用的就是初始化查询,知更鸟写的是判断后台触发初始化查询,每一次点击都会查询整个网站的数据库,这样导致内容多了整个网站非常卡,接下来就是优化这个地图了。


WordPress网站地图(sitemap)性能优化目录

修改WordPress网站地图(sitemap)的查询方式

修改WordPress网站地图(sitemap)的执行方式

WordPress网站地图(sitemap)性能优化的整体代码


首先修改网站地图的查询方式

很多主题的网站地图功能都是初始化查询,拿本站作者熟系的知更鸟作为例子,他采用的是init作为钩子,直接初始化查询:

if ( is_admin() ) {
add_action( 'init', 'begin_sitemap_refresh' );
}

要把这个修改成publish_post钩子,触发发布按钮进行查询生成网站地图,这样网站后台的打开速度就不会这么尴尬;并且服务器也不会因为这个问题造成大量的运行,减轻了服务器压力;

if ( is_admin() ) { 
add_action( 'publish_post', 'begin_sitemap_refresh' );
 }

修改网站地图(sitemap)的执行方式

上面解决了网站后台的性能和服务器性能问题,但是这样会造成另一个问题,那就是点击发布文章或者更新文章后,会卡很久,这个时候就需要弄成异步执行,才不会影响网站后台性能;

这是知更鸟原来的生成代码:

function begin_sitemap_refresh() {
require_once get_template_directory() . '/inc/sitemap-xml.php';
$sitemap_xml = begin_get_xml_sitemap();
if ( ! zm_get_option( 'sitemap_m' ) ) {
file_put_contents( ABSPATH.'' . zm_get_option( 'sitemap_name' ) . '.xml', $sitemap_xml );
} else {
file_put_contents( ABSPATH.'' . zm_get_option( 'sitemap_name' ) . '-' . zm_get_option( 'sitemap_m' ) . '.xml', $sitemap_xml );
}
}
if ( is_admin() ) {
add_action( 'publish_post', 'begin_sitemap_refresh' );
}

需要增加一个执行时间,触发后延后一秒执行。

function delay_ydb_sitemap_xml() { //使用wp计划让触发后延迟一秒执行
wp_schedule_single_event( time() + 1, 'delayed_ydb_sitemap_xml' );
}

修改下来后,就完全不影响整个网站的运行了;(这里需要注意的是利用钩子大批量发布内容的时候,尽量间隔2分钟发布一篇,因为量太大的话,wp计划本身也是消耗资源会比较大,所以网站数据量越大,文章之间的发布间隔时间尽量长一些)


WordPress网站地图(sitemap)性能优化的整体代码:

if ( is_admin() ) {//判断后台触发后执行
add_action( 'publish_post', 'delay_ydb_sitemap_xml' );
}

//执行后这里利用wp计划延迟一秒后执行

function delay_ydb_sitemap_xml() { //使用wp计划让触发后延迟一秒执行
wp_schedule_single_event( time() + 1, 'begin_sitemap_refresh' );
}
//下面是知更鸟网站地图生成静态页面的执行代码
function begin_sitemap_refresh() {
require_once get_template_directory() . '/inc/sitemap-xml.php';
$sitemap_xml = begin_get_xml_sitemap();
if ( ! zm_get_option( 'sitemap_m' ) ) {
file_put_contents( ABSPATH.'' . zm_get_option( 'sitemap_name' ) . '.xml', $sitemap_xml );
} else {
file_put_contents( ABSPATH.'' . zm_get_option( 'sitemap_name' ) . '-' . zm_get_option( 'sitemap_m' ) . '.xml', $sitemap_xml );
}
}

这样网站在一定数量内就不会卡了,至少没有触发的情况下是不会卡的,但是数据量多了,还是会卡,最好的解决办法就是按照数量生成多个网站地图,才会顺畅。