我正在尝试创建一个简单的linkroll小部件来显示最近的https://pinboard.in 通过API链接。为了最大限度地提高加载速度,我想在一个小部件字段中缓存链接列表,以及最后获取它的时间戳。
现在,如果定义的时间结束了,我想通过cURL重新加载链接列表,并将其再次保存在widget字段中。如何从update()函数外部执行此操作?
我的代码:
// display widget
function widget($args, $instance) {
extract( $args );
// get widget title
$title = apply_filters(\'widget_title\', $instance[\'title\']);
// get options
$token = $instance[\'token\'];
$tags = $instance[\'tags\'];
$unread = $instance[\'unread\'];
$range = $instance[\'range\'];
// update linklist based on cache validity
$isvalid = $this->_check_valid_cache( $instance[\'expires\'], $range );
if ( $isvalid === TRUE ) {
$cache = $instance[\'cache\'];
$expires = $instance[\'expires\'];
} else {
$cache = $this->_get_recent( $token );
$expires = $isvalid;
/* --> does not work!! */
$this->update($instance, $instance);
}
/* ...display widget... */
}
最合适的回答,由SO网友:Rarst 整理而成
嗯。实际上,我从未想过要将小部件实例用作缓存。我也从未见过这样的实现。
这是一个很有创意的想法,因此很难准确指出实施的好处和问题。对于初学者update()
实际上并没有保存任何内容,它只是用来检查实际的保存,我不会从快速查看中说出保存在哪里,因为它被抽象得更深。
根据我的经验,更为传统的实现是使用更为传统的方法(如瞬态)进行缓存,并将其绑定到API,而不是小部件。
假设用户将两个不同的小部件实例放在两个不同的侧栏中,但配置方式相同。他们将以双倍的速率轮询API,而实际上他们需要API中完全相同的数据,并且可以(而且应该)共享这些数据。