今天,我对数据库进行了测试,以探讨从选项,自定义表和瞬态访问键之间的速度差异。我运行了1000次测试,以下是运行1000次get操作所花费的时间:
请记住,选项表在大多数系统上都用于选项和瞬态,并且该表已经过优化,并添加了索引。所以这不是一个公平的比较
get_transient()0.0245秒get_option()0.0068秒来自自定义表的简单选择操作0.65秒
这也是一个不公平的比较,带有autoload
选项集的选项将在早期的单个查询中提前加载。所以get_option
从WP_Cache
,该选项已被检索。
TLDR:它实际上不是在获取选项,它已经被获取,只是由于该autoload
选项而将其从内存中拉出
我还检查了此测试过程中瞬态未过期。
这毕竟不会影响正常系统的瞬时检索,毕竟它直到被检索之前才知道它是否过期。
所以问题是,get_option()比get_transient()更快还是我在测试中弄乱了某些东西?
这取决于:
- 在大多数系统上,瞬态是使用选项存储的,它们都涉及一个
get_option
调用
autoload
设置为true的选项会在开始时全部加载到单个调用中,因此它们会保留在内存中,此后不会发生任何查询
- 对象缓存同时缓存自动加载的选项和瞬态
自定义表格是否由于WordPress默认缓存的选项而延迟?
很有可能,但是选择需要花多长时间取决于查询和表设计
另外,选项是否也由瞬态等不同的缓存插件缓存?
是,WP_Cache
已使用,它将在其余请求中将其存储在内存中。出于性能原因,缓存插件可能会保留这些值。
重复性
这些都是通过缓存的,WP_Cache
因此在您第二次请求时,不涉及数据库。
可变性及其取决于
所有这些都假设有共同的基础,但是对象缓存又如何呢?
让我们介绍一个MemcacheD实例或Redis实例(如果可以选择的话,我强烈建议您这样做,对于精心构建的网站,尤其是如果将它们用于页面缓存,除非使用类似Varnish的东西,否则,它们可以极大地提高性能)
现在我们有了一个新情况:
- 现在,数据存储在RAM中,并且一旦从数据库中获取了数据,便会对其进行初始化,从而大大减少了访问时间。仍比变量慢,但比数据库查询快得多
WP_Cache
通常不会存储很多新数据。例如WP_Post
对象,发布元等
WP_Cache
现在在请求之间仍然存在
- MemcacheD等可以消除过期的瞬变等
因此,现在瞬态和选项具有相同的访问成本。它们已经关闭,但是现在可以忽略不计了,它们与发出请求时的CPU负载有更多关系。
因此,为了提高性能,我应该使用瞬态还是选项?
虽然这是一个值得思考的问题,但答案是,差异可以忽略不计并且在误差范围内
因此,停止微优化,因为它们是相同的存储介质,所以这不值得您花时间
- 如果您需要存储整个站点的内容,请使用选项
- 使用瞬态来临时存储计算成本高的事物,因此您无需下次
您不值得花时间根据性能选择一个,而没有有意义的区别。
有很多要做的优化工作,可以大大节省开支,例如在后查询中使用分类法而不是元数据,不使用__not
样式参数,在页面上执行更少的操作,安装对象缓存,每页上的帖子更少,避免远程请求等等
定制表会如何...
不,选项表已经过优化,使用自定义表会将操作简单地移到WP Caching系统之外,从而迫使您编写自己的表