【问题标题】:PHP performance (Opcode caching / function volatility)PHP 性能(操作码缓存/函数波动)
【发布时间】:2012-11-19 12:56:23
【问题描述】:

背景故事

我维护了一系列(网络)应用程序,这些应用程序都使用了一个大型的本土 PHP 库。其中一些应用程序是员工使用的传统桌面应用程序,但其他应用程序(也与这个问题更相关)是 PHP 网站,随着受欢迎程度的持续增长,性能正成为一个更重要的问题。

当前的 PHP 缓存方法

为了加快我们的一个网站(它是一家商店,将其视为thinkgeek.com),我使用 memcached 来缓存不需要不断动态构建的网站的某些部分(例如产品列表某个类别)。

我们还使用几乎出厂默认安装的 APC 作为 OPCode 缓存。

这两种方法都显着改善了网站的性能,但我非常希望在优化的道路上走得更远。

PHP 中的函数波动率

我本人拥有数据库背景,我非常喜欢 PostgreSQL 如何使用 function volatility 在保持可靠和准确结果的同时获得巨大的性能提升。

我的问题是,是否有任何 PHP 扩展允许开发人员将某些函数(或类方法)标记为 IMMUTABLE(意味着该函数的结果始终相同,当给定相同的输入参数时)。然后,此缓存扩展可以缓存该函数的结果,这在使用大型代码库时会带来巨大的性能提升。

一个简单的例子是像SomeClass::getWebsiteFooter(); 这样的方法,它返回一些始终相同的 HTML 代码,除非网站已被更改(在这种情况下缓存将被刷新)。

这样的东西存在吗?我一直无法在市场上找到任何类似的东西。是否有任何其他可能对我的情况有益的性能改进方法?

【问题讨论】:

  • 您要查找的技术名称是 memoize(这不是拼写错误,它没有 R)。您可以搜索“php memoize”,但最好实现自己的缓存版本(因为它本质上就是这样),因为您必须以某种方式使缓存无效,正如 Denis Ermolin 所说 - 您可以将其缓存到APC。
  • @N.B.谢谢!不知道memoize这个词。你自己做这件事可能是有道理的,但是由于它是一个相当大的框架,它会使代码库变得很混乱,不得不用几行 memcache 查找/存储代码来包装所有内容(即使每次只有 3 行) .我认为,能够将方法标记为不可变(如:public immutable function foo();)的主要优点是所有魔法都可以由扩展程序自动处理,而代码库不会变得混乱。

标签: php caching immutability opcode-cache


【解决方案1】:

我会说您将 php 应用程序视为 Web 应用程序并实现了多个级别的缓存。

IMMUTABLE 方法 - 我认为这不是好方法。在数据库级别、应用程序级别(memcached)使用缓存是一个好的开始。

然后我建议在视图级别缓存 Smarty caching 和缓存代理,如 SquidVarnish

【讨论】:

  • 好的,谢谢,我已经改了,编辑器没有按照我的意愿做。
  • 我已经使用 memcached(以及 APC 操作码缓存)在数据层和视图层上实现了缓存。但是由于该应用程序正在使用在多个应用程序之间共享的大型代码库,因此我正在尝试改进该代码库。 Memcached 完全可以做到这一点,但是我必须在一百种不同的方法中引入一些 memcached 代码才能全面应用效果。如果可以指示方法的可变性,那么代码本身就不需要修改,后端(PHP ext)可以完成所有工作。
猜你喜欢
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
相关资源
最近更新 更多