Relevanssi可能会拖慢中文文章的保存速度

WARNING: This article may be obsolete
This post was published in 2020-12-29. Obviously, expired content is less useful to users if it has already pasted its expiration date.

虽然Relevanssi对中文的支持没有英文好,但还是能就中文索引进行一些基本设置的:

Relevanssi and languages

进行完这些设置以后,中文搜索也变得勉强能用了。但值得注意的是,Wordpress的性能会在某些方面受到影响。

Table of Contents

SQL

如果编辑一篇中文Post,每保存一次,Relevanssi都会执行至少1次这样的SQL语句,包含DELETE和INSERT:

如果保存的文章是长篇中文文章,这两句SQL执行所消耗的时间会非常长,稳定排在 performance_schema.events_statements_history_long SQL语句耗时排名的前2名,且远超第3名。第3名一般来说是一句操作wp_posts的SQL语句,比如:

SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_parent = 1  AND wp_posts.post_type = 'revision' AND ((wp_posts.post_status = 'inherit'))  ORDER BY wp_posts.post_date DESC, wp_posts.ID DESC

绝大多数wordpress database clean相关的插件都会从这里入手,通过删除post revisions来清理wp_posts表,进而提升性能。

而Relevanssi要比这些post revisions夸张得多。以这篇文章为例,在我的服务器里进行测试:

每保存一次,Relevanssi的SQL语句都要耗费约0.45秒,而wp_posts相关的文章更新SQL语句一般只需要0.025秒。(0.025已经很慢了,因为我从不清理posts revisions,wp_posts表很臃肿)

如果要一定要关闭Relevanssi-relevanssi_insert_edit:

Indexing with a cron job

但事实上这么做也不是很有必要,因为SQL执行的时间可能远不如wp rest api的响应时间长。

Relevanssi PHP

既然Relevanssi的索引是每次保存实时创建的,那么自然可以推断,执行Relevanssi的php script也占据了较多的系统资源。

事实也确实如此。根据New Relic监测的数据,在编辑、保存文章的时候,Relevanssi插件耗费的时间稳定排在所有插件的第1名。


 Last Modified in 2021-08-26 

Leave a Comment Anonymous comment is allowed / 允许匿名评论