Отделение JSS от CSS в plone.htmlhead
Я использую Plone 3.1.7 в проекте, который требует настройки производительности. Один из твиков требует, чтобы CSS был вверху страницы, а JS - внизу. Однако оба расположены в
<div tal:replace="structure provider:plone.htmlhead" />
В main_template. Как я могу разделить эти?
заранее спасибо
5 ответов
Мои коллеги нашли решение:
plone.htmlhead - это viewlet, зарегистрированный продуктом plone.app.layout, который загружает три других вида:
- plone.resourceregistries.styles
- plone.resourceregistries.scripts
- plone.resourceregistries.kineticstylesheets
Я добавил в тег 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, и эта проблема исчезнет.
В заголовке тега в дополнение к
<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>
....
но на самом деле я потерял все метатеги, связанные с ключевыми словами!
Приведенное выше предложение заменить plone.htmlhead split на 3 вьювлета мне не сработало, так как я потерял заголовок страницы (не подходит для SEO). Я предполагаю, что заголовок страницы также обычно включен plone.htmlhead.
Лучшим решением, по-видимому, является использование более новых предложенных выше Products.ResourceRegistries, за исключением того, что строки компоновки немного ошибочны. Следующее работало для меня:
[версия]
... Products.ResourceRegistries=2.0b3 ...