【发布时间】:2010-11-14 12:13:04
【问题描述】:
我有一个在 PHP 脚本中创建的复杂对象。我正在寻找一种存储此对象的方法,以便后续请求不必重新创建它,或者花时间反序列化和重建它。使用 xdebug 我发现我花费了整个请求时间的一半来构建这个对象。即使我将对象显式存储在 APC(或 memcache)中,反序列化和加载所有类的时间几乎与最初创建对象的时间一样长。
我不知道是否可以在 PHP 中存储并稍后加载“已编译”对象。这可能吗?还有其他解决方案吗?
我不确定这是否可行,但我想我应该问问社区。
编辑:对象是二叉树,用作决策树。该代码基本上是从树中快速返回答案所需的 API。这一切都需要以不断增加的速度执行,因此我试图尽可能地最大化性能。
【问题讨论】:
-
并不是说这是一种“不”序列化的方法。但可能想研究 __sleep() 和 __wakeup() 方法,以便它可以自动重建类。 us3.php.net/manual/en/…
-
@Chacha 感谢您提供的信息。我不确定这是一个解决方案,但我肯定从中学到了一些新东西!谢谢。
-
根据定义,存储对象需要序列化。如果您确实需要重复、快速地访问内存中的大型二叉树,那么在每个请求上调用 PHP 脚本并不是正确的解决方案。
-
你不能将大对象存储在APC中而不序列化它吗? php.net/manual/en/function.apc-store.php#73560
-
@rcourtana 当您将对象存储在 APC 中时,会调用内部序列化。如果您启动分析器并观看从 APC 执行此存储/检索,您会发现您花费大量时间进行序列化
标签: php caching serialization