【问题标题】:When to use transients, when not to?何时使用瞬变,何时不使用?
【发布时间】:2012-03-24 18:30:56
【问题描述】:

我正在使用 Wordpress 并为其开发了一些特定于站点的插件,另外我的主题是定制的以适应后端插件的要求。

最后几天我在 Wordpress 中摆弄瞬态。在一些教程中,他们说“如果您使用自定义查询并且它们的结果是可缓存的:使用瞬态”。听起来不错,但我想知道何时使用瞬变来获得真正的优势。 我的意思是,即使使用瞬态,也必须在后台至少有两个查询,不是吗?第一个用于检查有效性,第二个用于瞬态本身。

那么使用瞬态(即用于自定义 WP_Query)真的有用吗? 非常感谢您的帮助和想法。

【问题讨论】:

    标签: php sql wordpress transient


    【解决方案1】:

    看起来相当简单。它是一个文字类助手,允许您以“memcache”类型的方式存储对象。你先设置瞬态

    function do_something_here($callback_param = 'value'){
      $key = 'do_something_' . $callback_param;//set the name of our transient equal to the value of the callback param being passed in the function.
      $my_query = get_transient($myKey);  //if we've stored this request before, then use it.
      if($my_query !=== false){
        //we found a previous existing version of this query. let's use it.
        return $my_query;
      }else{
        //it doesn't exist, we need to build the transient.
        //do our database querying here, global $wpdb; etc
        //We are going to pretend our returned variable is 'george'
        $value = george;
        $length = 60*60*24; //how long do we want the transient to exist? 1 day here.
        set_transient($key, $value, $length);
        return $value;
      }
    }
    

    现在我们已经创建了触发器并将其绑定到 '$key' 的名称,我们可以使用 key 所暗示的确切值(我们之前声明的)随时访问它。

    echo 'I wanted to do something, so : ' . do_something('value') . ' is what i did! ';
    

    通过使用这种格式,您可以将查询保存在类似“缓存”的世界中,并使用它们来生成响应。这在某种程度上类似于在 MySql 中使用“触发”事件。事实上,这是一种通常称为长轮询的技术的一部分。

    【讨论】:

    • 感谢您的回答。但问题是另一个问题,很抱歉误导您:使用瞬态是否比简单的 WP_Query() 更有效?在我的想象中,瞬态的使用比通过 WP_Query('cat=32'); 选择帖子需要更多的资源和查询;
    • 这取决于方法和数据。如果您有一个庞大且耗时的查询,我们可以将其存储为瞬态。然后,通过使用我们的瞬态调用,该值将始终可用,这不需要查询数据库,它只是监视它的值变化。正如我提到的,它的工作方式有点像 memcache。其中,瞬态是在有大量查询和多条数据的站点上使用它的更有效方式。或者,对于需要推送技术(Long Polling、Comet 等)之类的网站 -> en.wikipedia.org/wiki/Push_technology
    • 但是与查询本身相比,什么时候查询是“巨大的”,以及什么时候使用瞬态“巨大”?即从一个表中选择五个帖子,没有连接或子查询:即使五个选定的帖子保持不变,普通查询是否比在瞬态中缓存结果并请求瞬态更快更有效?
    • 根据您的示例,是的,直接查询是最好的。我怀疑它会击败瞬态数毫秒,但唉,它会。当我们说巨大时,我的意思是 17 个连接/联合、33 个跨表查询、推送技术、用于更新/删除/插入的 ajax。当您有 1000 多个用户同时执行所有这些操作时,您将看到为他们使用“瞬态”时性能的巨大提升。虽然,我想在这个阶段 memcache 会更快。无论如何,瞬变用于存储值和进行比较以使事情变得更快。不要将它们用于页面加载。
    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 2015-11-29
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2010-09-28
    相关资源
    最近更新 更多