【问题标题】:TYPO3: what are the different kind of caches?TYPO3:有哪些不同类型的缓存?
【发布时间】:2014-12-05 16:55:56
【问题描述】:

在TYPO3后端,我可以清除不同类型的缓存:前端缓存、通用缓存、系统缓存……此外,安装工具中还有清除缓存的选项。

在很多情况下,尤其是在我开发扩展程序时,我需要清除缓存以反映我所做的更改。但是,我从来不知道我需要清除哪些缓存,而且大多数时候,我会清除每个缓存,直到在重新加载页面时看到正确的输出。在其他情况下,例如当我升级 TYPO3 时,我需要从安装工具中清除缓存,否则它会在旧安装路径中查找 php 文件。

可以清除哪些不同类型的缓存?他们每个人之间有什么区别?每个命令清除哪些文件或数据库项?在哪种情况下需要每个清除缓存命令(即修改哪种文件或信息时)?

【问题讨论】:

    标签: caching typo3


    【解决方案1】:

    在 TYPO3 6.2 和 7 中:

    您可以在SYS.caching.cacheConfiguration部分的后端系统>配置中看到所有缓存的配置。每个缓存都注册在一个或多个“组”中:所有、系统、页面。菜单项反映了这些组:

    • “刷新前端缓存”(cacheCmd=pages):清除前端和页面相关的缓存。这使得 TYPO3 重新渲染通常被缓存的内容(除了 USER_INT 对象之外的所有内容)
    • “刷新常规缓存”(cacheCmd=all):包括前端,以及一些由扩展注册的缓存clearAllCache_additionalTables(即新闻缓存、realurl 缓存)。尽管是all,它确实不包含系统缓存(这就是为什么它在菜单中被称为“一般缓存”而不是“所有缓存”)。
    • “刷新系统缓存”(cacheCmd=system):清除“系统相关缓存”,包括类加载器、本地化和扩展配置文件缓存。
    • 安装工具“清除所有缓存”:这是“删除所有typo3temp/var/Cache 文件”以及所有MySQL 缓存表(“cf_*”,即Extbase 反射)的硬连线。然后它会遍历所有注册的缓存并清除它们。

    所以最好让自己了解代码的哪些部分存储在哪个缓存中,以便了解更改某些内容时要刷新的内容:

    • Extbase 中的 PHP 类在所谓的“反射缓存”(即注释)中解析其内容 => 刷新系统缓存。
    • 您的扩展设置ext_tables.php、ext_localconf.php、TCA 缓存在cache_core => 刷新系统缓存。
    • 您的流体模板被编译成 PHP 代码 => 刷新系统缓存。
    • 您的 PHP 代码可能被 PHP 的“opcache”缓存。通常 opcaches 被配置为检查文件的修改时间,所以通常你不需要在修改 PHP 文件后刷新任何 opcache。在某些情况下可能不是这种情况,或者如果您通过系统时间不同步的符号链接工作,那么您可能需要在 PHP 代码更改后刷新 opcache => 安装工具清除所有缓存 .
    • 您的 TypoScript 也被缓存 (cache_hash) => 刷新前端缓存。请注意,如果您在 backed 中更改 TypoScript,这将自动刷新这些缓存。
    • 如果您的更改还会影响呈现到前端的缓存输出,您可能还需要刷新前端缓存。为避免这种情况,您可以在 TypoScript 中设置:config.no_cache = 1。

    请注意,从 TYPO3 8.1 开始,后台和整个系统的菜单都被简化了,所以我们只剩下了:

    • “刷新前端缓存”:像以前一样清除前端和页面相关的缓存。
    • “刷新所有缓存”:或多或少地执行安装工具之前所做的工作。因此,这也将包括所有扩展缓存、反射、系统缓存。由于它包括“opcache 刷新”,因此 PHP 文件更改也会在此处反映出来。

    为了在不关心其中一些缓存的情况下简化开发,您可能希望单独“关闭”它们。

    $TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = NullBackend::class;
    $TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['backend'] = NullBackend::class;
    $TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['backend'] = NullBackend::class;
    $TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object']['backend'] = NullBackend::class;
    $TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection']['backend'] = NullBackend::class;
    

    见:https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/CachingFramework/Configuration/Index.html?highlight=cache#how-to-disable-specific-caches

    【讨论】:

      【解决方案2】:

      一般来说,当记录中所做的更改(通过编辑)未反映在页面上(因为页面已缓存)时,您需要清除 frontend 和 general 缓存.

      系统缓存还保留了与扩展不同的配置(所有这些来自ext_tables.php、ext_localconf.php、语言文件等的东西),因此在对这些文件进行更改时需要清除它。 .. 还可以在向控制器注入示例新存储库时。

      提示:有一些浏览器插件会在地址栏中显示缓存清除图标(又名黄色 Flash),例如:Chrome 的 TYPO3 Clear Cache

      【讨论】:

      • 感谢您提供有关 Chrome 扩展程序的提示。我认为这将是有用的!您的回答并没有完全回答我的问题,但这是一个很好的开始。
      • 对不起,你的问题太宽泛了,我写的那是非常笼统的,描述TYPO3的整个缓存是整本书的好材料;)或者至少是大册子。
      【解决方案3】:

      因为还没有人提到这些文件: 有很多临时文件可以随时删除,有时必须删除。部分它们甚至包含在 BE 的缓存清除中。

      基本文件夹是/typo3temp/

      缓存在/typo3temp/Cache/中完成,分为/typo3temp/Cache/Code/和/typo3temp/Cache/Data/

      这里收集了一些 php 文件的连接(例如 ext_tables.php)

      从 7LTS 开始,有时需要手动删除另一个文件夹:typo3temp/autoload/,其中存储了类信息以供自动加载。特别是如果您开发新的扩展,此文件夹不会在每次编辑时自动清除。

      【讨论】:

        猜你喜欢
        • 2017-10-07
        • 1970-01-01
        • 2013-06-23
        • 2010-09-27
        • 2012-01-17
        • 2013-09-12
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多