1

我有一个应用程序,我在其中重复使用相同的(大)类。由于我对该应用程序使用 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));
    } 
4

2 回答 2

5

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

还值得注意的是,资源(如数据库链接等)无法缓存,并且必须在对象反序列化后重新建立(这里是__sleepand__wakeup魔术方法的用武之地)。

于 2013-06-20T16:55:56.160 回答
4

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

  1. 在第一页加载时,实例化并缓存对象 x 小时
  2. 在接下来 x 小时的任何后续页面加载中,它将直接返回对象,而不处理实例化
  3. x小时后,缓存的对象会过期,下一次页面加载会重新实例化对象并重新缓存

您的应用程序将以相同的方式运行,唯一的区别是您将“重用”已经完成的实例化过程。

于 2013-06-20T16:52:33.623 回答