首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP对象缓存性能

PHP对象缓存性能
EN

Stack Overflow用户
提问于 2009-06-18 03:51:26
回答 7查看 4.7K关注 0票数 2

在磁盘上缓存PHP对象和不在磁盘上缓存PHP对象有区别吗?如果缓存,对象将只为所有站点访问者创建一次,如果没有,将为每个访问者创建一次。这样做会不会有性能上的差异,或者我这样做会浪费时间?

基本上,当涉及到它时,主要问题是:

每个用户在内存中有多个对象(每个用户都有自己的一组实例化对象)

VS

文件中为所有用户缓存的单个对象(所有用户使用相同的对象,例如相同的错误处理程序类、相同的模板处理程序类、相同的数据库处理程序类)

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-06-18 15:04:50

在磁盘上缓存

对象和不缓存对象有区别吗?

与所有的性能调整一样,你应该衡量你在做什么,而不是盲目地执行一些你不完全理解的巫术仪式。当您在$_SESSION中保存一个对象时,PHP将捕获对象状态并从它生成一个文件(序列化)。在下一次请求时,PHP将创建一个新对象,并使用此状态重新填充它。这个过程比仅仅创建对象的开销要大得多,因为PHP必须进行磁盘I/O,然后解析序列化的数据。这在读取和写入时都必须发生。

通常,PHP被设计为无共享架构。这有它的优点和缺点,但试图以某种方式避开它,通常不是一个很好的主意。

票数 3
EN

Stack Overflow用户

发布于 2009-06-18 04:37:58

要使用这些对象,每个PHP脚本都必须对它们进行反序列化。因此,将它们缓存在磁盘上绝对不是为了节省内存--它不会节省内存。

缓存这些对象的原因是创建对象的开销太大。对于普通的PHP对象,情况并非如此。但是,如果对象表示例如代价高昂的数据库查询的结果,或者从远程web服务获取的信息,则在本地缓存它可能是有益的。

基于磁盘的缓存不一定是一个大赢家。如果您正在使用PHP并关心性能,那么您必须在APC或Zend Platform等操作码缓存环境中运行应用程序。这些工具还提供了可用于在应用程序中保存PHP对象的缓存。Memcached也是为应用程序数据提供快速内存缓存的流行解决方案。

还要记住,并不是所有的PHP对象都可以序列化,所以将它们保存在缓存中,无论是基于磁盘的还是内存中的,都不可能适用于所有数据。基本上,如果对象包含对PHP资源的引用,则可能无法对其进行序列化。

票数 6
EN

Stack Overflow用户

发布于 2009-06-18 13:43:21

不幸的是,这个问题没有正确的答案。对于同一服务器上的同一网站,相同的解决方案可以提供更好的性能,也可以提供更差的性能。它确实取决于太多的因素(应用程序、软件、硬件、配置、服务器负载等)。

要记住的要点是:-服务器最慢的部分是硬盘。-对象创建比磁盘访问要好得多。

=>尽可能远离硬盘,并尽可能将数据缓存到内存中。

如果你没有性能问题,我会建议你做…没什么。

如果有性能问题: benchmark,benchmark,benchmark。(找到更好解决方案的唯一真正方法)。

关于这个话题的有趣视频:YouTube Scalability

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1010699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档