2014-04-19 57 views
1

我有大约100个字符串变量,需要在PHP网站的每个网页上提供。数据在运行时永远不会改变,但将来我需要多组数据并在用于页面请求的数据之间切换。字符串的长度从5到600个字符不等。我目前正在包含一个文件,其中包含这样的数据:使用opcache在PHP中缓存静态数据

$someStuff = "abc"; 
$otherStuff = "def"; 
// etc 

我正在使用opcache。这种方法会从opcache中受益多少?我看过this answer。如果缓存的好处值得做密钥查找,我可以更改为使用关联数组。但是,对于我而言,使用静态数组字段的类比声明变量更适合我的情况,这一点我不清楚。

也许一个函数与静态变量是一个好主意?这是否与静态类字段相同,更好还是更差?

function getItem ($name) { 
    static $items = array("someStuff" => "abc"); 
    return $items[$name]; 
} 

也许函数而不是每个字符串的变量?如果不是所有的字符串都用于给定的页面(通常是这种情况),这会更好吗?

function someStuff() { return "abc"; } 
function otherStuff() { return "def"; } 

什么是最佳解决方案?需要在每一页上的数据,所以我想尽可能高效,避免从磁盘/数据库中读取等

回答

2

在实践中并没有区别,你是否做这样的事情:

$someStuff = "abc"; 
$otherStuff = "def"; 
// ... 

$constants = array(
    'someStuff' => "abc"; 
    'otherStuff' = >"def"; 
    // ... 
); 

或根据我的其他答案将其封装到类中的静态数组中。使用OPcache将消除编译开销和磁盘I/O开销。它将实习字符串常量,因此这些对于Zend引擎是有效的静态可用的。类的版本做了一个单一的数组结构的副本,另外两个版本将会执行〜200个操作码exec来初始化〜100个变量,并且实际的被删除的字符串再次被引用复制。引擎通常每秒解释20-40M操作码可执行文件,所以数学运算也是如此:无关紧要。

我的建议是:不要担心运行时问题,只需选择您觉得最清晰,最易维护的方法即可。就我个人而言,我会使用从自己的配置类文件自动加载到类的类,但这是你的应用程序,并做你最清楚的。

顺便说一句,使用函数是凌乱的,他们确实有一个运行时成本,函数调用是最昂贵的PHP操作之一。对类常量的引用要便宜很多,但请尝试对这些进行基准测试。但是,除非您提到每个请求的这些10k +次,否则您将不会注意到实质性差异。太聪明只会让你“脚下射击”。 :-)

+0

感谢您的解释。我有一种感觉,现在担心还为时过早,但自从它在每一页上都很难阻止自己。我已经去了类和静态领域。干杯! – NateS

+1

顺便说一句,如果它们是真正的常量,那么请阅读[PHP类常量](http://www.php.net/manual/en/language.oop5.constants.php)。 – TerryE

+0

他们的确是。用一对正则表达式替换我的源代码,我切换到类常量。使用opcache和类常量时有什么开销?恐怕微基准可能会测量错误的东西,或者很难测量每页负载的开销。此外,它主要是为了满足我的好奇心。 :) – NateS