我在需要性能调整的项目中使用 Plone 3.1.7。其中一项调整要求 CSS 应位于页面顶部,而 JS 应位于底部。然而两者都位于
<div tal:replace="structure provider:plone.htmlhead" />
在 main_template 中。我如何拆分这些?
提前致谢
我的同事找到了解决方案:
plone.htmlhead 是一个由产品 plone.app.layout 注册的 viewlet,它会加载其他三个 viewlet:
我将以下内容放在 HEAD 标签中:
<div tal:replace="structure provider:plone.resourceregistries.styles" />
底部有以下内容:
<div tal:replace="structure provider:plone.resourceregistries.scripts" />
<div tal:replace="structure provider:plone.resourceregistries.kineticstylesheets" />
完毕!CSS 将位于页面顶部,JS 位于页面底部
您通常不必在 Plone 中执行此操作,因为它设置为异步触发 JS,因此它不应该阻止任何渲染(这是性能提示的内容)。
如果您直接在模板中插入内容,事情可能会改变 - 但默认设置会做正确的事情,除非我在这里误解了问题(可能是这种情况:)
这是最新版本的 Products.ResourceRegistries 中的一个已知错误。此问题已在 2.02b 版本中修复。您可以将该版本固定在您的构建中:
[versions]
...
Products.ResourceRegistries == 2.02b
...
然后,重新运行 buildout,这个问题就消失了。
上面用 3 个 viewlet 替换 plone.htmlhead 拆分的建议对我来说并不完全有效,因为我丢失了页面标题(对 SEO 不利)。我假设页面标题通常也包含在 plone.htmlhead 中。
更好的解决方案似乎是使用上面建议的较新的 Products.ResourceRegistries ,除了构建行略有错误。以下对我有用:
[版本]
... Products.ResourceRegistries=2.0b3 ...
在头部标签中除了
<div tal:replace="structure provider:plone.resourceregistries.styles" />
我放了
<title tal:define="page_title python: context_state.object_title()"
tal:content="page_title">page title</title>
....
但实际上我已经丢失了所有与关键字相关的元标记!