Положить jsf.js в конце тела
У меня развернуто веб-приложение Java EE 8. он использует JSF 2.3. Я тестирую его с помощью Google PageSpeed Insights. и рекомендация гласит:
Устранить ресурсы, блокирующие рендеринг
…font/fonts-min.css.xhtml?ln=custom(**.com)
…fullcalendar/fullcalendar.bundle-min.css.xhtml?ln=vendors(**.com)
…base/vendors.bundle-min.css.xhtml?ln=vendors(**.com)
…base/style.bundle-min.css.xhtml?ln=demo(**.com)
…fix/poppins.css.xhtml?ln=custom(**.com)
/javax.faces.resource/jsf.js.xhtml?ln=javax.faces(**.com)
поскольку jsf.js по умолчанию добавляется фреймворком JSF. Есть ли решение, чтобы я загрузил его в конце тела рядом с другими javascript-кодами? И если это так, будет ли это хорошей идеей?
Благодарю.
2 ответа
Можно поместить скрипт в конец тела, используя target="body"
атрибут:
<h:head>
<h:outputScript name="jsf.js" library="javax.faces" target="body"/>
</h:head>
Но, как отмечает Кукельтье, имейте в виду, что это может иметь побочные эффекты, и выигрыш от оптимизации может быть ограничен первым запросом.
Реализованная реализация (mojarra) явно добавляет этот скрипт в <head>
элемент, который может иметь веские причины:
com.sun.faces.renderkit.RenderKitUtils.installJsfJsIfNecessary(FacesContext)
:
context.getViewRoot().addComponentResource(context, createJsfJs(), "head");
Если вы используете PrimeFaces, вы можете активировать функцию "MOVE_SCRIPTS_TO_BOTTOM" через context-param.
Это перемещает все включенные сценарии (script src="...") вниз, а также объединяет все встроенные сценарии (...) в один встроенный сценарий.
Это действительно отличный прирост производительности.
Смотрите: https://github.com/primefaces/primefaces/issues/2888