PHP性能:在Session中存储类对象与静态vs Globals

时间:2012-11-22 14:18:16

标签: php performance session web

我一直在寻找答案,到目前为止我一直无法找到答案。我的问题是;存储不需要任何动态输入的庞大全局类的最佳方法是什么,它只需要使用一次。

让我们以模板类为例:

<?php
class Design_API{
   function loadfile($file){
     //load file here
   }

   // do file manipulation here

   function presentfile(){
      echo($this->file);
   }

}
?>

利用此类作为布局的基本示例。使用它的最佳方式是性能和安全性。是否将它的实例创建为全局;将实例存储在会话中;或者简单地把它变成静态类。

另外,假设我们使用会话,如果2个客户端以相同的毫秒访问该站点,那么php会锁定会话文件,从而迫使客户端2的Web加载需要更长的时间吗?

2 个答案:

答案 0 :(得分:3)

这个问题有点过于混乱,无法以一致的方式回答,所以这里有一些观点:

  • 一个客户端不会阻止另一个客户端,除非他们正在访问共享资源
  • 会话不是不同用户之间的共享资源,忘记了这种误解
  • 无论您在何处存储物品,性能都不会产生任何影响
  • 它使得不同的请求和用户之间的差异更小,因为请求之间没有共享资源
  • 代码首先是什么意思,什么是最可维护的代码,以后在证明速度慢的时候优化它(可能不会这样)
  • 尽可能避免使用全局
  • 不要在不属于那里的会话中存储内容,例如代码
  • 尽可能避免static个类,它们导致代码耦合,应该减少
  • static课程不一定更快

答案 1 :(得分:2)

处理此问题的最佳方法是使该类成为Singleton类,并使用静态方法对其进行实例化。

将对象存储在会话中将涉及序列化和反序列化,这对性能非常不利。此外,如果您在课程中存储任何资源,则无法将其序列化。