Asynchronous 如何在TYPO3中异步加载压缩文件?

Asynchronous 如何在TYPO3中异步加载压缩文件?,asynchronous,compression,typo3,Asynchronous,Compression,Typo3,如何在TYPO3中异步加载压缩(缩小)文件 通常的方式是: includeJSFooterlibs { jquery = fileadmin/JS/jquery.min.js jquery { async = 1 } } 然后压缩所有文件。如何以异步方式加载压缩文件 config { minifyJS = 1 minifyCSS = 1 compressJs = 1 compressCss = 1 concatenateJs = 1

如何在TYPO3中异步加载压缩(缩小)文件

通常的方式是:

includeJSFooterlibs {
  jquery = fileadmin/JS/jquery.min.js
  jquery {
    async = 1
  }
}
然后压缩所有文件。如何以异步方式加载压缩文件

config {
    minifyJS = 1
    minifyCSS = 1
    compressJs = 1
    compressCss = 1
    concatenateJs = 1
    concatenateCss = 1
    concatenateJsAndCss = 1
}
我需要一种方法,加载异步的“压缩”文件。 TYPO3生成了一个新闻文件


谢谢

如评论中所述,我也很确定你不能这么做。此外,如果它能工作,您就不会希望异步加载所有的js。(如果您的js合并到一个文件中,就会出现这种情况)

但是,您可以这样做:

config {
  concatenateJs = 1
  concatenateCss = 1

  compressJs = 1
  compressCss = 1
}

includeJSFooterlibs {
  jquery = fileadmin/JS/jquery.min.js
  jquery {
    async = 1
    disableCompression = 1
  }
  file00 = fileadmin/JS/foo.js
  file01 = fileadmin/JS/bar.js
}
对所有资产使用压缩和连接,然后对jquery include有选择地禁用它


我希望此解决方案适合您。

您可以做的是将压缩文件加载到模板中。以下是我对压缩CSS文件执行此操作的DefaultTemplate.html摘录:

<link rel="stylesheet" type="text/css" href="/typo3temp/assets/compressed/merged-3f4572cd49b959626fc38730095acbb0-23be5be3f22e030757a0bb134c3718a5.css?1514538093" media="all">

因为Google Pagespeed Insights会在速度优化方面抛出错误。通过这个小小的手动技巧,我成功地在Typo3 v8.7.9项目中获得了98/99:

当然,在更新CSS/JS时,手动执行此操作可能有点令人困惑,但这是最简单的方法。 在您的情况下,该行将如下所示:

<script src="/typo3temp/assets/compressed/merged-ffdbb82fe741d3f165401ef485235b9f-995014bd04096b10820bbc2df443a90b.js?1514463856" async></script>

希望这有帮助。哦,请记住,在清除缓存时不会更新文件,但是您可以很容易地在清除后附加一个变量?万一你需要的话

我建议使用grunt之类的工具来生成文件,而不是Typo3。这样,您就不必在每次更改时手动切换打字脚本、生成新文件并将其附加到模板

  • 级联而不是压缩正在禁用异步
  • 对加载到页脚中的脚本使用async可能没有多大意义。使用includejsfootelibs将脚本放在页面的页脚底部(在页面解析和加载之后加载)。(见和)
  • 此外,async可能会更改顺序,因此如果要加载多个脚本,请小心操作
  • 如果您使用的是TYPO3 9,您可能还需要查看
  • 最后但并非最不重要的一点是:您正在从fileadmin加载jquery,可能需要检查创建扩展以维护布局内容的可能性 还要澄清,

    • 连接:将所有源文件合并为一个文件
    • 缩小:删除不相关的字符(例如空格)。jquery.min已缩小,未压缩
    • 压缩:使用一些压缩算法(例如GZIP)
    文档目前解释
    config.compressCss
    表示缩小和压缩,但
    compressJs
    表示仅压缩。我发现这有点让人困惑,但如果你压缩一个文件,你基本上也会得到一个缩小

    回到你的问题:

    config {
      compressJs
      concatenateJs
    }
    page.includeJsLibs {
      jquery = EXT:mysitepackage/Resources/Public/JavaScript/jquery.min.js
      jquery.async = 1
      jquery.excludeFromConcatenation = 1
    }
    
    如果对所有文件都这样做,显然可以首先省略
    config.concatenateJs
    。但如上所述,它可能不是您想要的,请确保您的脚本将以正确的顺序加载

    (为了更简单,我省略了CSS内容。)


    打字稿参考:


    此外,我将通过删除minifyJS、minifyCSS和concatenateJsAndCss来简化问题

    • concatenateJsAndCss
    • minifyJS
      minifyCSS
      已被删除

    在任何情况下,您都不需要执行相同操作的多个选项(concatenateJsAndCssconcatenateJs,concatenateCss)。

    好的,您不能-您需要预压缩文件(例如使用grunt或gulp),然后使用您的方式将其包括在内,关闭了TYPO3压缩功能。@Jost:应该是答案,而不是注释。然后它可以帮助更多的人:)@AndrásOttó我不是100%确定,所以没有答案……好的,谢谢你的评论!我希望它适用于打字错误3:)我是唯一一个连这个问题都不懂的人吗?加载一个已经不是异步的Javascript文件怎么样?为什么要压缩已缩小的文件?谢谢,但我需要压缩文件的异步;)但是jquery.min已经被压缩了吗?您描述的用例对me.jep没有太大意义,但我需要一个文件中的所有内容。@SebastianSchmal仅供澄清:您想要的是异步加载合并(或连接)文件。看来你把它弄混了。杰普!我需要的;)