我为我的网络应用写了一个相当小的骨架,并认为我还会为它添加一个小缓存。
这很简单:
如果当前页面作为缓存中的文件存在且文件不是太旧,请将其读出并退出而不是重建页面
如果当前页面未缓存/过时,请重新显示页面并保存
然而,关于它的坏处是:
我通过MySQL查询收到40个相对较长的帖子的页面的性能测试表明使用缓存,处理单个请求需要更长的时间(每个1000个测试)
怎么会发生这种情况?
如何进行MySQL查询,第一次循环结果,将结果传递给模板,然后第二次循环结果,比filemtime()
检查和读数快
我是否应该删除完整的原始PHP缓存并减轻某些PHP缓存(如memcached等)的可用性?
答案 0 :(得分:2)
过早优化是万恶之源。如果您不需要缓存,请不要使用缓存。
话虽如此,如果您满足于不为每个请求提供动态内容,您可能需要考虑使用诸如清漆之类的缓存代理并完全删除PHP和Web服务器。甚至连第一行PHP都有相当多的开销,通过PHP提供静态文件有点脏。
如果您只想缓存元素,可以使用memcached或APC缓存等方法。 APC具有更容易获得的优势(如果您完全关心性能,则应该在服务器上安装APC用于操作码缓存)并且memcached可以选择让您拥有可由多个Web服务器访问的缓存(和/或多个缓存)
答案 1 :(得分:0)
我不这么认为,根据您的实施情况,似乎还有其他一些问题。以下是一些关于它的更多资源:
http://www.mnot.net/cache_docs/
http://blog.digitalstruct.com/2008/02/27/php-performance-series-caching-techniques/
答案 2 :(得分:0)
可能 -
如果你正在使用apc和mysql查询缓存(默认开启),那么你的php代码已经被执行并作为操作码存储在apc中,如果你反复点击同一个查询,那么mysql查询缓存也会缓存数据库结果。在这种情况下,大多数数据来自内存,因此您的文件读取速度可能会变慢。这种方法的真正好处是你将保存mysql连接的数量,但可能不是性能。
使用像squid这样的缓存代理应该是您的理想解决方案,以便直接从缓存中提供页面直到它过期。针对上述情况的另一个优化是在memcache中缓存mysql输出,这比命中mysql和查询缓存的大小要好。最后,如果您确实想要缓存生成的标记,可以使用输出缓冲(ob_start)并将输出直接存储在memcache中。
答案 3 :(得分:-4)
我想不是。
应用程序中最慢的部分可能是数据库流量。
如果包含HTML / PHP缓存文件,它应该更快。