Answers:
Varnish并不是Magento表演的全部和全部。它可以很好地抵消来自漫游器和购物者的负载-但这不应该成为真正提高商店速度的第一步。
实际上,实施Varnish应该是您商店的最后一项性能改进。仅当看到页面加载时间时,才将其放入。Magento可以在没有页面加载时间的情况下进行交付(例如,<600ms页面加载时间)。
由于Varnish仍然至少需要加载一个页面才能启动缓存,因此,您的未缓存性能仍然需要非常出色。绝大多数独特的URL(分层导航命中,搜索查询等)永远不会真正从Varnish中获得,除非以下任何一种情况:
一种)您的TTL是如此之高,从3天前搜索查询今天仍然有效
B)网站上的脚步是如此巨大,网址已经时间很短的填充量
您还必须考虑到 并非每个商店都适合Varnish。任何鼓励用户在客户旅程的早期就创建个人会话(例如,登录,添加购物车等)的网站都将意味着Varnish最终将是多余的。
例如,私人购物网站鼓励用户从一开始就登录,但是这样做意味着Varnish永远不会真正拥有可缓存的非唯一内容。因此,您的命中率将大大降低,并且使用Varnish绝对不会带来任何好处。
图片由 magestack.com提供
有效地使用Varnish就是在过时的内容和网站上的访问者之间取得平衡。
如果您的网站繁忙 -很有可能您可以使用较低的TTL来解决,但仍然具有较高的清漆命中率-并且还可以继续使用较低的TTL-因此,内容会更新鲜。因此,您的库存/价格变化会迅速反映出来,并且缓存将继续由人流量引起。
如果您的网站流量少,那么您将不得不做出让步。要么增加您的TTL以确保更高的命中率,要么拥有最新的内容。你们不能两者兼得。是的,您可以连续运行爬网/蜘蛛工具-但是这会消耗资源,而且可以爬网的数量或URL庞大(对于小型商店,通常为数万个)意味着它根本无效。因此,通常情况下,较小的商店会从优质商品中受益更多 FPC扩展和高度优化的服务器配置中。
ESI是一种出色的实用程序,能够将内容保留在缓存中,并且仍然能够在页面上具有动态块。但是要有效使用,您需要将回调的数量减至最少。您可以使用一些简单的入门模块作为此过程的基础-只需确保收紧其中的安全漏洞,默认情况下它是非常不安全的-对可以/不能加载的布局处理没有任何限制
每次加载Magento引导程序时,都会损失大约200毫秒的性能-甚至还没有加载一个集合/渲染一个块等。因此,如果您的ESI超过3倍,那么最终结果是使用Varnish + ESI获得动态内容的页面加载时间要比仅绕过Varnish并将请求直接传递给Magento本身要慢。
因此,要真正有效地使用ESI,您必须能够将多个请求合并到一个请求中。
例如,列出20种产品的类别视图页面需要显示准确的库存水平。因此,您将ESI用于页面上的每个块。那将是ESI股票需求的20倍。尽管库存需求非常轻巧,但同时运行20倍的库存需求会降低性能。因此,相反,您可以提供20种产品的整个商品/集合,而只是得到那个1x请求。但是无论如何,加载和呈现集合可能是页面上最慢的元素-因此您收获不多。
有效地使用ESI需要适当的计划和执行,否则您的站点将比根本不使用Varnish的站点慢。
然后,可以使用特定于用户的缓存。除非您的网站流量很少,否则这不是一个好主意。您的点击率将非常低-访客访问同一页面的几率非常低。对于每位客户,该6Kb页面将在您的Varnish存储箱中占据越来越多的空间。
例如,如果您为Varnish分配了1GB。在一个典型的网站上,用户每次访问可浏览8个页面,这些页面中平均有6个是唯一的。这样一来,每1MB的存储空间可容纳28位访问者。然后将图像,CSS和JS纳入考虑范围(很幸运),它们很常见,但可能仍会占用7-800MB的可用存储空间。这样就剩下200MB的存储空间,足以容纳5,600位唯一身份访问者。
好的,那么您需要执行以下操作:
X-Forwarded-For
正确配置由于前三点超出了此答案的范围,因此我将自己处理。第4点是儿童游戏,第5点是继续阅读。
Varnish实现最重要的事情是确保您永远不要缓存不应缓存的内容。
例如。
等等
对于核心的Magento URL,有一个相当标准的URI列表,您可以在Varnish中进行转义:
admin|checkout|customer|catalog/product_compare|wishlist|paypal
但是,您还需要考虑正在运行的具有自定义路由,路由器和名称空间的任何自定义/第三方扩展。不幸的是,没有一种简单的方法可以知道这些扩展名中的哪些URL可以缓存,也不能缓存。因此,您需要逐案评估。
通常,每当配置Varnish时,我们将从识别它们可能占用并从那里到达的各自的路由,路由器和名称空间开始。我们通过SSH执行此操作:
grep -Eiroh "<frontName>.*</frontName>" community | sed "s/<frontName>//gI;s#</frontName>##gI" | sort -u
grep -A10 -ir "<rewrite>" community | grep "<from>"
grep -A5 -ir "<routers>" community
grep -Eiroh "<frontName>.*</frontName>" local | sed "s/<frontName>//gI;s#</frontName>##gI" | sort -u
grep -A10 -ir "<rewrite>" local | grep "<from>"
grep -A5 -ir "<routers>" local
这不会为您提供确定的URL列表-但几乎可以肯定,它将为您提供一个入门指南。
我们不能强调永远不要缓存不应缓存的内容有多么重要。结果可能是灾难性的。
与其他任何Magento服务器一样,对性能进行优化,正确实施和调整确实可以带来好处。但是,只是在没有正确配置的情况下插入软件,不仅会使您的商店不再快,而且可能使速度更慢,更不安全且可靠性更低。