TYPO3:Extbase 模型中的性能



假设我有一个带有属性的模型:

/**
* @var array
*/
protected $myProperty;

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

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

我在这里看到的问题是,如果我多次使用此属性,则会多次调用该函数。如果此函数检索数据,例如从具有 mysql 连接的不同表中检索数据或进行一些广泛的计算,则这是不高性能的。

我在这里有什么可能性?稍微增强一下吸气剂?

/**
* @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 方法的第二个变体是个好主意,通常称为"延迟加载"。字段myProperty仅在访问时填充数据。另一方面,如果从不调用 getter 方法,则根本不需要加载数据。

您可以选择另一种编码样式,例如使用三元或空合并运算符,但方案是相同的。您可以在网络上找到更多您的想法示例。

最新更新