怎样设置永久链接

在管理文章的时候,发现了两篇名字一模一样的文章。但是两篇文章的永久链接设定得不同,这很有可能是上次数据遭到黑客破坏后,搬家时造成的混乱,但是两篇文章都有不同的永久链接,我倒是不舍得删除了。既然这样,我就重新就同一主题,写一篇我当下的感想(2008年6月17日16:08:49),打个时间戳。

上一篇我说的同名文章在这里:http://sexywp.com/set-permanent-links.htm

写前面那篇文章的时候,我对WP的认识没有现在深,现在我来谈谈,经过了这两个多月后,我对永久链接的一些新看法。

我是学计算机的,所以对程序性能这种事情特别敏感,正好有幸在阅微堂(http://zhiqiang.org/blog/)看到了有关性能的文章,很感兴趣,最近一段时间,都致力于优化自己博客的性能。他其中有一篇文章提到,WP本身有些函数的撰写,是有性能问题的,比如很常见的一个函数叫get_permalink,这个函数非常好用,只要输入文章的ID,就可以得到文章的永久链接。但是此函数好用的背后,是从很大程度上牺牲了性能得来的。这个函数每调用一次,就要产生3次数据库查询。

  1. 查询option表,永久链接的格式什么
  2. 查询posts表,提取文章信息
  3. 根据永久链接格式,查询需要的表,提取字段

上述中,第三点不是必须的,为什么呢,这就牵扯到你永久链接的结构问题,如果你的永久链接结构里面,包含了一些posts表中没有的字段,那么就必须到那个字段所在的表里面去找,所以必须查询。

官方推荐的永久链接结构是这样的

/%year%/%monthnum%/%day%/%postname%

这个结构是没有问题,这些字段都在posts表中。但是,有些网友喜欢一种看起来很美丽的结构

/%category%/%postname%

这种结构不能说不好看,有着很明确的逻辑性,看着很亲切,但是这个却有性能上的牺牲,因为%category%代表了一个分类的名字,这个名字不是放在posts表中的,必须到另一张表去查询,这就使得多使用了一次MySQL查询。所以,从性能角度来看,这个结构绝对是不美妙的。同理,在永久链接中包含一些%tag%也是降低性能的。

然后来说说那个函数的问题,那个get_permalink函数,其实是个模板tag,我自己实际尝试过,如果在the loop中使用get_permalink函数,并不会增加查询次数,究其原因,是WP在内部使用缓存机制,the loop本质上是一个非常复杂的查询,几乎查出了所有需要的东西,为了能在模板标签中反复使用,缓存了查询结果。

问题出在哪里呢,主要就是侧边栏,侧边栏已经出了the loop的范围,缓存的查询也失效了,所以侧边栏上的任何东西都是直接查出来的,所以有人在侧边栏上放很多文章标题列表,比如,最近发表文章,访问最多文章,留言最多文章,随机文章,每个列表有十篇,然后每次都用get_permalink来取得永久链接,那是非常恐怖的一件事情,你的页面会被拖得非常慢。

有些SEO高手给出了永久链接结构的建议

/%ID%

或者

/%postname%

这些结构很简单,而且在SEO过程中有一定作用,也存在这优化查询次数的可能。

为什么说只是可能,其实,就算你把永久链接改得很简单,也是降低了get_permalink函数取得链接的难度,并不能从根本上减少查询,因为那个函数调用的查询并没有完全去除。唯一的法子其实是不调用get_permalink函数。所以,要手动修改代码。如果你的链接结构足够简单,你在取得文章列表的时候,得到的信息已经足够自己手动拼接永久链接了,但是如果你的永久链接结构很复杂,比如带有分类信息,那么就算是由你手动拼接永久链接,也免不了要多查一次数据库。

希望我写得条理足够清晰。

4 Comments


  1. 整个博客静态化处理,你所说的性能问题可以忽略不计了。


  2. 今天是遇到高手了
    无限景仰中….
    我以后会多跟你学习的!

Comments are closed.