在MVC框架的缓存策略?(Caching strategies in MVC Framework?)

2019-08-01 17:43发布

我写我自己的小PHP MVC框架,现在林探索PHP MVC框架的缓存策略。 林思考什么可以被缓存,在哪里以及如何。

该框架我是简单的MVC框架。 我有前端控制器,即开机申请,登记类汽车装载,建立PHP运行时指令......,并在年底进行分析URL和调度请求适当的控制器,方法,动作控制器,无论你想怎么称呼它。 从控制器,我有机会到域对象和数据映射器,可以坚持域对象到一些存储,大部分时间的关系型数据库。 从控制器我有机会到域对象和数据映射器。

至于象缓存推移,这些都是我的东西,我知道我可以在此刻做的事情。 用PHP我可以使用APC缓存是操作码缓存,但我也可以用它来保存变量到RAM中。 然后,我可以使用内存缓存和Memcahed的作品过不去作为APC缓存,但我可以从不同的服务器访问存储缓存如果非要规模。 而这两个是不是操作码缓存。

据我知道我可以做这些事情:

  1. 当控制器,我能救域对象到缓存中,所以我不必每次都打开连接到数据库中,如果我已经在缓存中域对象。

  2. 我可以建立我的缓存系统,将分析的网址在系统启动,然后找到一些解释页面,查看URL,如果缓存,该页面的网址是否存在,如果不将处理请求,然后将该页面保存到缓存中,并与当前的URL关联

所以,你可以看到我真的不知道如何在我的MVC实现缓存,和我应该在哪里缓存东西,怎么了,有什么存在的可能性。

因此,有人可以解释这更好的,或重定向我的一些好文章,我可以了解cacheing?

谢谢!

Answer 1:

操作码缓存是有抵消解释你的PHP代码为每个请求的成本。 这是涉及到服务器基础设施。 有点像负载平衡。 它留给你的管理员(或多个)。 或者是有人谁使用* NIX发行,这不是Ubuntu Linux系统。

在MVC应用程序中有3个点,你可以缓存的东西:

  • 周边:

    应用程序的部分未真正与MVC模式本身,而是涉及到越来越MVC:路由机制和(如果您使用它)DIC。

    你可以缓存路由机制还挺取决于执行。 如果您使用的更易读的模式正则表达式的一些代,那么你可以缓存到生产的表情。 而且也有可能缓存将由航线正常生产参数的一部分。 这两个都在中/大型网站和合理完全没有意义的小的

    如果你决定使用DIC(我个人认为它是一个反模式,但所有时尚的年轻人不同意),然后缓存几乎是强制性的,因为正确书写DIC将利用反射。 与反思是缓慢的。

  • 响应

    有时,应用程序部分,需要大量的资源去创造。 如果你的MVC诠释了一个完全实现视图,则有可能缓存了一些模板,用于生成输出。

    例如,拿网站,如StackOverflow上。 如果你决定创建侧栏上的“在过去的24小时顶部标签”块就不可能再生,对于每个页面视图。 解决这一限制越来越的一种方式是述说标签仅在每个小时左右而产生的结果存储在一个HTML片段。 这个片段然后可以通过一个重用一遍。 如果缓存的片段是XHR使用的一些JSON,你甚至可以添加客户端到期头更是减少服务器的负载。

    您可以缓存或者只页面片段或整个事情。 这基本上是与MVC-充满架构一个交易的网站与具有静态内容部分如何。

  • 模型层

    这是有点棘手。

    首先你要明白,缓存是存储的只是另一种形式,这意味着缓存由特殊映射器处理。

     $user = new User; $cache = new UserCacheMapper; $user->setId( 42 ); if ( ! $cache->fetch( $user ) ) { $storage = new UserDbMapper( $pdo ); $storage->fetch( $user ); $cache->store( $user ); } // the $user object has been initialized 

    缓存映射器也是其中的缓存失效会发生这种方式,您可以在项目的任何阶段加入缓存机制的地方。

    虽然,我会建议停止使用控制器来处理域对象和存储之间的相互作用。 你基本上是泄露在表示层域的业务逻辑。 我建议创建一个包含应用程序的这一部分,让你隔离域逻辑控制器服务。



文章来源: Caching strategies in MVC Framework?