Положить 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

Другие вопросы по тегам