有很多方法可以解决这个问题——如果不了解更多关于您工作的限制或服务的使用方式,我们不能说哪个是正确的。如果您使用的是 Joomla,那么您显然不会担心性能 - 编写任何对您的 html 生成时间有可衡量影响的东西真的很难。这不需要“用更快的语言编写”,但是......
- 你能安装额外的软件吗?
- 你可以访问 cron 吗?
- 服务的消耗率是多少?
- 您有多少个网络服务器在使用该服务 - 它们是否有共享文件系统?它们在同一个子网上吗?
- SOAP 响应是否可缓存?
- 您如何处理不可用的服务?
对于一个非常可扩展的解决方案,我建议运行一个简单的转发代理(例如 squid),但要确保它不能从 Internet 访问。Sven(参见其他地方的评论)关于 POST有时不可缓存是正确的 - 但您可以在您自己的站点上缓存来自代理脚本的响应,通过 GET 返回适当的缓存指令 - 这可以将数据作为序列化的 php 数组/对象返回处理起来要便宜得多。事实上,无论您选择哪种方法,我都建议缓存解析后的响应——而不是 XML。这也允许您覆盖来自服务的不良缓存信息。
如果速率低于每分钟 1 次左右,那么 cron 解决方案就过大了。但如果它每分钟超过 20 次,那就很有意义了。如果您无法访问 cron / 无法安装自己的软件,那么您可以考虑简单地缓存响应并按需刷新缓存。除非您已经在使用它,否则不要打扰 memcache。APC 在单个服务器上更快 - 但内存缓存是分布式的。如果您有多个服务器,则使用您当前在其中共享数据的任何集群存储(分布式文件系统/数据库集群/共享文件系统......)。
不要尝试在缓存刷新周围使用锁定/互斥锁,除非你真的必须这样做(即只有每 5 分钟访问一次以上的服务是一种致命的罪过)——这会很快变得非常复杂——引入错误太容易了.
请确保在将响应写入缓存之前缓冲并验证它们。