当我在GTmetrix.com上查看我的网站时,我得到了时间轴的以下屏幕截图.
如何减少接收时间,以便加快网站加载速度.
这是因为非优化的PHP代码吗?
问:62毫秒的接收时间很好.你怎么样减少1.5秒的等待时间?
S:等待时间是服务器编写页面所花费的时间.
-
问:你是否启用了平台?
S:启用平面表并确保所有自定义集合查询仍能正常工作(集合查询会自动从基于EAV资源的查询转换为基于平面资源的查询).
-
问:您是否启用了缓存(缓存服务器不是文件缓存)?
S:将Memcached或Redis或APC配置为缓存服务器local.xml
.
-
问:你的Magento更像是一个带有主题的开箱即用安装,还是主题,也许逻辑是大量定制的?
S:如果是OOTB主题 - 主题是否支持正确的缓存?
S:如果是大量定制的Magento,你是否考虑了必要的缓存支持代码?
背景资料:
Varnish是一个整页缓存,但是Magento是由块组成的 - 块独立到期 - 需要更频繁地重建整个页面的无关块.
Varnish(默认情况下)处理静态内容(JS,CSS,图像等).我不确定它是否(默认情况下)检查html文件是否使用eTags - 我认为它确实 - 所以你可以从配置html页面开始使用eTag标头并开始缓存(但要小心到期时间 - 如果是动态页面,访问者将看到旧信息,您必须决定哪些页面可以接受.
如果服务器上有Memcached,则可以配置local.xml文件以开始使用Memcached进行会话以及块缓存.但是由于你的Magento经过大量修改,你的Block类需要是可缓存的 - 它们需要覆盖getCacheKey
方法并返回一个字符串,该字符串需要根据渲染块的HTML内容而有所不同.
例子:
如果你有一个显示常量HTML片段的块,那么键可以是任何唯一的字符串,你可以"计算"而不实际重建/重新呈现块(例如你在layout.xml中给出块的名称).
如果您有一个显示"Hi {{username}}!"的块 然后密钥应该基于用户名或user_id,例如$key = "user_welcome_".$user->getId();
当前用户可以从会话中轻松获取,因此您不必运行数据库查询来获取它.
如果您有一个依赖于多个参数的块,则在构建缓存密钥时需要考虑所有这些参数,并且您需要考虑参数信息需要尽可能少的处理来访问的事实 - 如果您从数据库中获取信息只是为了计算缓存密钥,您可能会做错了 - 例如,根据当前的CMS page_id,块可能会有不同的内容,但您不需要从中加载Page对象DB要知道,您可以只处理URL或$_GET
变量并使用该信息来构建缓存密钥.