Можно ли асинхронный modernizr?
Тест Google PageSpeed говорит мне использовать async
Например, изменение
<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
К
<script async src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
Будет ли модернизатор по-прежнему работать нормально?
2 ответа:
Modernizr необходимо поместить в
<head>по двум причинам:
- html5shiv должен быть там для Олди.
- избегая FOUC при использовании modernizr-размещенных классов для особенность-условный стиль
Вы можете использовать асинхронный атрибут и/или поместить его в нижней части, если ни один из них не имеет для вас значения.
Посмотрите на этот номер, опубликованный в Modernizr
Modernizrне нужно помещать в
<head>.Modernizr будет работать в конечном счете прекрасно, когда вы его включаете.
Если вы делаете modernizr script асинхронным , или включаете его после некоторых значимых событий загрузки страницы(
DOMContentLoaded,window.onload...)
- применение специфических правил css (
feature,no-featureклассы в документеhead) задержится .- доступность
window.Modernizrтакже будет отложена вместе с ее объектом свойства (то естьModernizr.propery)Короче говоря,
- плохая вещь, которая может случиться с вашим
CSS, если вы используетеasyncзагрузку Modernizr-это неправильные стили (те, которые зависят от классов<html>), применяемые в течение некоторого времени- плохая вещь, которая может случиться с вашим
JSкодом, заключается в том, что если вы используетеModernizrглобальный объект, вы не можете использовать его напрямую, поскольку он может и не загружаться - вам придетсяждать его каким-то образом. Так что, нет еще:
if(Modernizr.cssanimations){ // your feature-dependant code }Но вместо этого:
if(typeof Modernizr !== "undefined"){ //uitilize Modernizr global object here } else { // implement waiting for this object, let's say write short onModernizrLoad() function... }