注意:我们在这里讨论的是permalinks之间的区别/%ID%/%name%/
和%/name/%
. 如果我们比较一下,情况就完全不同了/%ID%/%name%/
和%/ID/%
.
现在,有两个影响性能的用例:
One. You have a permalink and WP needs to resolve it in order to serve the page requested.
这意味着设置
WP class. main函数位于代码的底部。初始化后,这涉及调用
parse_request
. 这将检查此特定页面是否存在重写规则,并检查查询变量的有效性。在这种情况下,我们想知道
example.com/123/slug
花费的时间比
example.com/slug
. 为此,您必须假设需要多处理几个字节的PHP字符串函数对性能有重大影响。
一旦请求的url被切分为可用的块,操作将移动到parse_query
, 在这种情况下,将传递一个查询对象,该对象包含name
或两者兼有name
和ID
(令人困惑的是,在查询对象中调用了IDp
). 进行了大量处理,但在查询中没有额外的ID。
接下来跟随两个挂钩(pre_get_posts
和posts_selection
) 这是插件领域,所以对性能的影响是未知的。
现在主要的问题来了:使用一个变量还是两个变量查询数据库需要更多的时间?二者都ID
和name
存储在wp_posts
数据库中的表。因此,要查询的表的大小没有差别。此外,两者都是唯一的,因为在存储帖子时,这是经过检查的(OP的假设是,在url中包含ID将消除-2
in posts是错误的,除非你破解了保存过程)。因此,是否必须查询所有数据库行以获取唯example.com/123/slug
四 还是独一无二的name
. 提供两者时,性能上的唯一区别是在ID
将检查name
匹配项。这真的微不足道。
Two. You need to generate a permalink on a page.
这是由
get_permalink
作用对于标准post类型,如果使用
%category%
. 对于
ID
和
name
这只是在这一行代码中搜索和替换的问题:
$permalink = home_url( str_replace( $rewritecode, $rewritereplace, $permalink ) );
的效率
str_replace
取决于传递给它的参数的大小,但由于传递了所有可能的重写参数,而不仅仅是实际使用的一个或两个,因此这不会影响性能。
对于自定义帖子类型get_permalink
指get_post_permalink
, 无论如何,这涉及到更多的计算,但本质上归结为相同的搜索和替换。