TYPO3:Extbase 模型中的性能

TYPO3: Performance in Extbase Model

假设我有一个 属性:

的模型
/**
 * @var array
 */
protected $myProperty;

此 属性 没有数据库字段,此 属性 的数据是从其他地方检索的:

/**
 * @return array
 */
public function getMyProperty() {
    return getDataFromSomewhere();
}

我在这里看到的问题是,如果我多次使用此 属性,该函数将被调用多次。如果此函数检索数据,例如来自不同的 table 和 mysql 加入或做一些广泛的计算,这是低效的。

我在这里有什么可能性?增强getter一点点?

/**
 * @return array
 */
public function getMyProperty() {
    if($this->myProperty === NULL) {
        $this->setMyProperty(getDataFromSomewhere());
    }
    return $this->myProperty;
}

我知道我可以使用缓存框架并缓存函数 "getDataFromSomewhere" 返回的值,但我正在寻找更简单的解决方案。

您可以让 getter 方法执行 return $this->myProperty ?? ($this->myProperty = getDataFromSomewhere());。然后它在返回值之前填充本地 属性 如果它是 null - 你当然要确保 属性 被初始化为.

您提出的 getter 方法的第二种变体是个好主意,通常称为 "lazy loading"。字段 myProperty 仅在访问时填充数据。另一方面,如果从未调用 getter 方法,则根本不需要加载数据。

您可以选择其他编码风格,例如使用 the ternary- or null coalescing operators, but the scheme is the same. You can find more examples of your idea on the web