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