所有脚本/会话中的静态变量php

时间:2018-04-26 15:38:49

标签: php

在php网页上,在PHP代码的开头,我声明并设置了许多在执行脚本期间不会改变的变量。

每次用户访问该页面时,都会执行该脚本,我猜这些变量的值是否存储在RAM中? 因此,如果100个访问者同时访问该页面,相同的静态变量将被存储在RAM中100次?

有没有办法将它们只存储在RAM中一次,并且有可能在任何脚本中使用它们的值而不在每个脚本中声明它们?就像PHP超级全球一样。

为了清楚起见:我要求这个的唯一原因是实现性能提升(通过不在RAM中加载相同的东西X次)。如果做我要求的方式不保存任何记忆或对性能产生其他积极影响,我认为没有理由改变我目前的方法。

谢谢!

1 个答案:

答案 0 :(得分:2)

您似乎在玩弄的概念可归纳为:

  

通过在PHP进程之间存储和共享PHP变量来防止内存开销,这样就不必为每个脚本重新初始化它们。

简短的回答是,由于PHP的范围性质,这根本不可能。每次执行PHP脚本时,都需要将变量的副本引入其自己的执行范围。

到目前为止,减慢服务器速度的最大罪魁祸首是磁盘访问时间。

如果你有:

<强> vars.php`

<?php
$var1 = 'hi';
$var2 = 20;
$var3 = 99;

<强>的index.php

<?php
require_once('vars.php');

然后index.php密集部分正在从磁盘读取vars.php

OpCache通过将vars.php的指令缓存到内存中来解决从磁盘读取的问题,以便下次请求vars.php时它可以提供它在内存中的内容并将副本提供给内存当前的PHP线程。

存在memcache类(以及许多其他解决方案),它们可以将变量值存储在专用数据库中,但需要设置内存缓存服务器。

问题是这仍然不会阻止内存开销,因为调用memcache::get( 'someVar' );仍然需要将该变量放入当前内存范围,以便PHP可以对其进行操作。

还有一件事......

硬件便宜,程序员则不便宜。除非您遇到导致系统崩溃的严重不受控制的内存问题,否则添加RAM总是比程序员花费数天时间尝试解决非问题更便宜。

但是,如果您希望为PHP的实际速度和内存消耗做出贡献,那么您需要学习一些C编程并深入挖掘核心。