асинхронная загрузка response.js через modernizr.load идет медленно?

Я использую метод Modernizr.load(), чтобы проверить, понимает ли браузер (то есть) медиа-запросы или нет, и если нет, я загружаю библиотеку response.js.

однако я вижу, что загрузка response.js с помощью метода modernizr.load дает мне FOUC, а метод встроенного скрипта - нет.

метод modernizr.load:

<script>
  Modernizr.load([{
    load: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
    complete: function () {
      if (!window.jQuery) {
        yepnope('js/libs/jquery.js?v=1.7.2');
      }
    }
  },
  {
    test: Modernizr.mq('only all'),
    nope: 'js/plugins/respond.js?v=v1.1'
  }])
</script>

встроенный метод:

<!--[if lte IE 8]>
  <script src="js/plugins/respond.js?v=v1.1"></script>
<![endif]-->

Почему это так? не должен ли асинхронный метод быть быстрее? или встроенный метод лучше, потому что скрипт блокирует DOM и ждет, пока скрипт загрузится...?


person Martin Broder    schedule 08.04.2012    source источник


Ответы (1)


Это зависит от того, насколько вы заботитесь о FOUC. Преимущество асинхронного метода в том, что он не блокирует. Я бы переключил его так, чтобы Respond был первым, чтобы вам не приходилось ждать, пока jQuery будет проанализирован. Это, вероятно, решило бы FOUC. Позвоните Modernizr.load в свой <head> (см. здесь) вот так:

Modernizr.load([{
    test: Modernizr.mq('only all'),
    nope: 'js/plugins/respond.js?v=v1.1'
  },{ 
    load: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
    complete: function () {
        window.jQuery || Modernizr.load('js/libs/jquery.js?v=1.7.2');
    }
}]);

Ваше условное выражение в IE тоже отличное решение — возможно, даже лучше. Если вы это сделаете, просто поставьте его перед jQuery, и все будет в порядке:

<!--[if lt IE 9]> 
    <script src="js/plugins/respond.js?v=v1.1"></script>
<![endif]-->

Modernizr.load([{
    load: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
    complete: function () {
        window.jQuery || Modernizr.load('js/libs/jquery.js?v=1.7.2');
    }
}]);
person ryanve    schedule 20.04.2012