我有一个VPS的4核和5 GB内存与Windows 2012和IIS8。我在它上运行一个WordPress站点,MySQL作为InnoDB数据库,给MySQL大约70%的可用内存用于缓存/缓冲区,这非常好。我启用了Wincache,基本上为除了.php文件之外的所有内容启用了输出缓存。我第一次拜德的时间是1400-1800毫秒,这在我看来太慢了。
我为所有PHP文件启用了输出缓存,从而将其减少到8ms。太棒了!或者我是这么想的。当然,因为它现在正在缓存整个PHP文件,所以不会加载任何后续页面。这是因为WordPress将后续页面作为查询加载,而不是作为新文件加载。
我不得不完全关闭PHP文件的输出缓存,但在缩短第一字节/响应时间方面似乎找不到任何其他解决方案。这里有人有什么好的建议,使用Wincache或输出缓存来实现我以前的~8ms结果吗?
任何开箱即用的建议也受到高度赞赏!
发布于 2014-05-25 19:19:12
在经历了许多头痛之后,我终于找到了这种缓慢的TTFB的大部分来源。PHP/ is 8的MySQL驱动程序MySQLnd出错了。由于AAAA ( IPv6 )记录优先于A (IPv4)记录,“localhost”将返回IPv6地址。而且,由于PHP中的MySQL驱动程序(mysqlnd)无法处理IPv6地址,因此在尝试通过IPv4连接之前,它必须先超时。
我把我的TTFB从1400到1800 ms削减到了200到400 ms。已经好多了。其余的我可能可以归因于..css/..js调用和其他事情。
为了解决上面的问题:不要使用'localhost‘,而是使用127.0.0.1或gethostbyname('localhost'),因为这个函数总是返回一个IPv4地址。后者是更好的解决方案,因为有一天您可能希望使用主机名连接到外部MySQL DB。
希望这将有助于其他人与TTFB的问题!
https://stackoverflow.com/questions/23857809
复制相似问题