Php 重新创建对象或将其存储在会话变量中是否更快?

Php 重新创建对象或将其存储在会话变量中是否更快?,php,performance,object,session-variables,Php,Performance,Object,Session Variables,对不起,如果这对非noob来说是显而易见的。是不是更快: 在会话期间,每当有人转到页面时,重新创建对象实例 或 在首次创建对象实例时,将其存储在会话变量中,然后在再次访问页面时始终从那里获取它 我不确定这是否会成为一个“一段字符串有多长?”之类的问题,但如果是这样,那么也许您可以让我知道决策涉及哪些因素?会话数据存储为文本,而不是二进制数据,因此,当您将其放入会话中时,会在后台的某个地方重新创建对象。它可能比自己初始化要慢一点,因为它必须进行一些字符串解析,但我怀疑这有多大问题需要担心。

对不起,如果这对非noob来说是显而易见的。是不是更快:

  • 在会话期间,每当有人转到页面时,重新创建对象实例

  • 在首次创建对象实例时,将其存储在会话变量中,然后在再次访问页面时始终从那里获取它

我不确定这是否会成为一个“一段字符串有多长?”之类的问题,但如果是这样,那么也许您可以让我知道决策涉及哪些因素?

会话数据存储为文本,而不是二进制数据,因此,当您将其放入会话中时,会在后台的某个地方重新创建对象。它可能比自己初始化要慢一点,因为它必须进行一些字符串解析,但我怀疑这有多大问题需要担心。简而言之,这两种方式可能都没有区别。

这当然取决于创建对象时完成了多少逻辑。您应该对这两种变体进行一些基准测试。

如果不进行测量,我会说存储和检索在大多数情况下应该更快。
对于重新创建对象,您可能需要调用多个构造函数等,而检索时不应调用任何函数调用。

这显然取决于对象中的字段、字段数量以及填充方式。不管怎样,每次加载页面时都会发生对象的实例化,因此这是字段及其来源的问题。

请注意不要过于努力地优化它。请记住,在会话中存储项目可能会很繁重,特别是当您的站点流量很大时

另外,我看到很多人创建了一个对象,该对象访问数据库并加载其属性。然后将其存储在会话中,在回发时更新,然后保存回数据库

这很好,但会导致并发检查困难——比如说,对象具有上次保存时间的时间戳——如果每次保存前都重新加载它,则可以轻松检查自上次加载以来时间戳是否已更改,在这种情况下,您可能需要停止保存


无论哪种方式,差异都不会很大。

反序列化将内容直接放入属性中,而无需调用构造函数,因此速度也会更快。不过,它可以调用一个_wake()方法。最后,性能在这里几乎不是一个争论点,更多的是关于应用程序设计的。@molf,我对这个完全陌生,我花了两天的时间才让XAMPP开始工作。我想很快学会如何进行基准测试,但我还没有准备好再花几天时间研究如何进行基准测试。放松点!此外,这里的人告诉我的不仅仅是什么,还有为什么。我不会从基准测试中发现这一点。这很公平,但如果你不确定如何进行基准测试,那么我认为你还不必担心这种性能。@molf,说得好,但是我想从正确的方式开始,这样我就不会养成坏习惯。记住PHP没有像ASP.NET那样的公共内存来存储请求之间的实例。对象在文本中序列化和反序列化,因此每次都会重新创建实例。