【问题标题】:caching snippets (modX)缓存片段 (modX)
【发布时间】:2021-09-09 11:44:21
【问题描述】:

我只是简单地浏览了 modx 选项,我注意到缓存 sn-ps 的选项。我想知道这会对我的网站产生什么样的影响(缺点)。我知道缓存会通过在第一次之后将它们保持“缓存”然后只重新加载更新来改善网站的加载时间,但这一切似乎都是真的。我的问题很简单:缓存 sn-ps 有什么缺点吗?干杯,马可。

【问题讨论】:

  • 我刚刚注意到无法缓存块,所以这个问题现在只适用于 sn-ps。

标签: caching modx


【解决方案1】:

好问题!

Modx 的第一条规则是(几乎)总是缓存。他们在自己的博客中这样说。

正如你所说,加载时间会更短。让我们先了解一下地板上的基础知识。当您选择缓存页面时,包含所有输出的页面将作为文件存储在缓存文件夹中。如果您有一个小而简单的站点,您可能看不到缓存的最大区别,但如果您有一个复杂的站点,其中包含很多块中的块、sn-ps 解析块等,则差异是巨大的。我制作的一些网站下降了 15-30 级来解析接下来的部分中的内容。从数据库中加载所有这些新文件可能需要几秒钟的时间,而加载一个平面文件只需要几微秒。有很大的不同(记住这一点)。

现在。您可以缓存 sn-ps 和块。重要的是要记住。您还可以在取消缓存下一级的同时缓存一个块。使用 Modx 的出色标记,您可以选择缓存什么和取消缓存,但通常您希望尽可能多地缓存。

你问的是缺点。没有,但是在某些情况下您不能使用缓存的 sn-ps/chunks。如前所述,缓存的响应被分为每一页。这意味着,如果您有一个页面(或 url 或任何您想要调用的名称),您可以根据例如 GET 参数在其中显示不同的内容。您不能缓存搜索结果(因为内容更改)或带有分页的页面(?page=1?page=2 等会在同一页面上产生不同的输出)。另一种情况是 sn-p 的输出每次都是随机/不同的。假设您在标题中放了一个随机引号,这需要取消缓存,否则您每次只会看到第一个随机结果。在所有其他情况下,使用缓存。

还请记住,每次您在管理器中保存更改时,缓存都会被清除。这意味着,例如,如果您在首页上显示最新的新闻文章,它仍然可以被缓存,因为在您添加/编辑资源之前它不会显示不同的内容,然后缓存将被清除。

总结一下。缓存很棒,您应该尽可能多地使用它。我通常会缓存我所有的 sn-ps/chunk,如果我遇到问题,这是我检查的第一件事。

使用缓存可以让您的网络服务器响应更快(对用户有利)并减少对数据库的查询(对您有利)。总而言之。缓存是一种礼物。使用它。

【讨论】:

    【解决方案2】:

    缓存没有缺点,老实说,我想知道是什么让您认为它有缺点?

    您应该始终缓存所有可以缓存的内容 - 在每次页面加载时都执行与以前完全相同的内容是没有意义的。通过缓存输出和源,您无需处理时间并提高性能。

    假设 MODX Revolution (2.x),您使用的所有模板标签都可以称为缓存和非缓存。

    缓存:

    [[*pagetitle]]
    [[snippet]]
    [[$chunk]]
    [[+placeholder]]
    [[%lexicon]]
    

    未缓存:

    [[!*pagetitle]] - this is pointless
    [[!snippet]]
    [[!$chunk]]
    [[!+placeholder]]
    [[!%lexicon]]
    

    在 MODX Evolution (1.x) 中,标签不同,您没有那么多控制权。

    前段时间我在我的博客上写了关于 MODX Revolution 中缓存的文章,我强烈建议您查看它,因为它提供了更多关于为什么以及如何有效使用缓存的见解:https://www.markhamstra.com/modx/2011/10/caching-guidelines-for-modx-revolution/

    (PS:如果您有特定于 MODX 的问题,我建议您将它们发布到 forums.modx.com - 那里有更多的 MODX 受众可以提供帮助)

    【讨论】:

    • 但是(例如)缓存用作博客的 Quip 表单是否明智。这可以每秒更新一次,因此您应该每隔这么多秒更新一次缓存,或者您应该让它不缓存,对吗?
    • @MarcoGeertsma:我没有使用过 Quip 表单,但一般来说,如果内容在同一页面上更改而不干扰管理器面板(编辑/添加资源),则必须取消缓存.表单(只是表单的标记)可以被缓存,因为它每次都是一样的。
    • Quip 通常应称为未缓存,因为内容可能会在不同的综合浏览量之间发生变化。如果你想进行微缓存(即缓存几秒钟),你可以将它包装在 getCache 中,但不要在 QuipReply 表单中,因为这可能会在人们发布回复时导致意外结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2014-07-04
    • 2012-03-07
    相关资源
    最近更新 更多