用于wp查询的临时缓存

时间:2013-10-08 作者:Iamzozo

我在抄本中读到了关于瞬态的内容,这里有一些问题和答案。

所以我正在开发一个基于wp的web应用程序。它现在可以工作了,但我想对它进行优化。用户定期管理内容,因此crud操作很常见。因此,我不想将页面缓存用于过期。

我想在“get”操作上实现一些缓存函数。这是我的想法:

用户添加一些内容,填充一个列表,我为该列表对象创建一个临时“记录”,并为项目本身创建一个临时“记录”,当列表更改(更新、删除、创建)时,我删除以前的缓存记录并添加新的缓存记录,我主要使用WP\\u查询(posts和meta)。问题:

Do i need this caching method, or using transient cache with wp_query won\'t take a large effet?

My other concern to put all results into another table feel a bit irrelevant..?!

1 个回复
最合适的回答,由SO网友:Michael Cannon 整理而成

对于我的WordPress推荐小部件插件,我已经成功地使用了带有过期日期的瞬态,将页面加载时间减少了0.1到0.5秒。

使用WordPress自己的瞬变是一个救命稻草。根据需要直接打包或使用,然后再次将精力集中在应用程序逻辑上,这样就容易多了。滚动另一个缓存系统是无用的。此外,当您开始使用像W3 Total Cache和WP Super Cache这样的缓存插件时,还有一些额外的缓存连接将进一步加快速度。

此时,过期的瞬态会填满您的wp_options 桌子WordPress的未来版本将更好地处理瞬态清理。现在,请检查https://gist.github.com/ScottPhillips/2907732 用于计划的瞬态清除或将其滚动到应用程序中。

因为我做免费和高级插件,所以我对缓存操作进行了抽象,但没有理由不能将我的抽象移到自己的工作中。

在您的例子中,您谈论的是用户创建数据,您可以将数据创建看作是传递到的小部件或短代码选项testimonialswidget_list$atts 在下面。

这个$content = apply_filters( \'testimonials_widget_cache_get\', false, $atts ); 正在检查给定的$atts. 因此,如果传入$atts 已更改,则缓存将失败,并且false 返回,以便创建新的数据集。

线$content = apply_filters( \'testimonials_widget_cache_set\', $content, $atts ); 是将新生成的数据保存回缓存以便快速、方便地重用的地方。

The data grabbing 从…起testimonials-widget.php.

public function testimonialswidget_list( $atts ) {
    self::add_instance();

    $atts = wp_parse_args( $atts, self::get_defaults() );
    $atts = Testimonials_Widget_Settings::validate_settings( $atts );

    if ( get_query_var( \'paged\' ) ) {
        $atts[\'paged\'] = get_query_var( \'paged\' );
    } elseif ( get_query_var( \'page\' ) ) {
        $atts[\'paged\'] = get_query_var( \'page\' );
    } else {
        $atts[\'paged\'] = 1;
    }

    $atts[\'type\'] = \'testimonialswidget_list\';

    $content = apply_filters( \'testimonials_widget_cache_get\', false, $atts );

    if ( false === $content ) {
        $testimonials = self::get_testimonials( $atts );
        $content      = self::get_testimonials_html( $testimonials, $atts );
        $content      = apply_filters( \'testimonials_widget_cache_set\', $content, $atts );
    }

    return $content;
}

The caching operations

add_filter( \'testimonials_widget_cache_get\', array( $this, \'cache_get\' ) );
add_filter( \'testimonials_widget_cache_set\', array( $this, \'cache_set\' ), 10, 2 );
public static function cache_get( $args ) {
    $hash     = self::create_hash( $args );
    $do_cache = apply_filters( \'testimonials_widget_disable_cache\', true );
    $no_cache = isset( $args[\'no_cache\'] ) && Testimonials_Widget_Settings::is_true( $args[\'no_cache\'] );
    if ( ! $do_cache || $no_cache ) {
        delete_transient( $hash );
        return false;
    }

    $data = get_transient( $hash );

    return $data;
}


public static function cache_set( $data, $args ) {
    $hash = self::create_hash( $args );
    set_transient( $hash, $data, self::$cache_period );

    return $data;
}
Note 上面的代码是碎片。复制和粘贴到您自己的应用程序将无法立即工作。我建议你看看self::Testimonials_Widget_Settings:: 用作更改代码以满足您的需要的可能点。

结束

相关推荐

运行flush_all时对象高速缓存(作为后端的Memcached)和wPMU的问题

我正在运行一个相当大的wpmu设置bloggersdelight。dk-在站点上进行更改时,我们有时需要重置对象缓存。当我们这样做的时候,事情就会一团糟。来自站点的选项值混合在一起,博客的homeURL重定向到错误的博客等。这是当前对象缓存。我正在使用php。http://pastebin.com/QgM5tR9n正如您所知,flush函数的创建方式不允许在多站点时进行刷新。这是wordpress上找到的插件的默认设置。组织。为了刷新博客缓存,我需要做一些“有趣”的事情,比如:switch_to_blog