缓存类的实例有什么好处?

时间:2013-06-20 16:45:11

标签: php oop caching apc

我有一个应用程序,我重复使用相同的(大)类。由于我为该App使用AJAX,我总是要创建这个类的新对象。有人建议我缓存这个类的一个实例,并在需要时使用它(在php环境中使用apc)

它有什么好处?它真的节省了一些时间吗?

    $this->tickets_persist = unserialize(@apc_fetch("Tickets"));

    if (!$this->tickets_persist) {
            $this->tickets_persist = new Tickets_Persistance(); // Take long time
            apc_store("Tickets", serialize($this->tickets_persist));
    } 

2 个答案:

答案 0 :(得分:5)

只有在处理具有昂贵实例化成本的类时,才能真正实现这些好处。如果有很多时间,内存或其他资源在类的构造函数中完成(例如:读取XML站点地图并构建复杂的数据结构以构建导航。)您可以通过利用缓存来避免这种情况。

还值得注意的是,资源(如数据库链接等)无法缓存,并且在对象被反序列化后必须重新建立它们(这里是__sleep和{{1魔法进来)。

答案 1 :(得分:4)

如果您的对象在实例化期间需要大量处理,那将是值得的。缓存不会帮助你处理“大”对象,当你想避免可以重复的处理时它会帮助你。在您的情况下,如果您的构造方法需要大量处理,那将是值得的。我们来举例说明缓存如何在网页的上下文中起作用:

  1. 在第一页加载,实例化并缓存对象x小时
  2. 在接下来的x小时的任何后续页面加载中,它将直接返回对象,而不处理实例化
  3. x小时后,缓存的对象将过期,下一页加载将重新实例化该对象并重新缓存它
  4. 您的应用程序将以相同的方式运行,唯一的区别是您将“重新使用”已经完成的实例化过程。