• Не используйте @import

    Стив Саудерс (Steve Souders) — инженер из Yahoo! — написал прекрасную заметку о том, почему не стоит использовать @import для подключения CSS. Если коротко: @import в большинстве случаев блокирует параллельную загрузку CSS-файлов. А так как сама загрузка CSS блокирует отрисовку документа — пользователь будет долго видеть пустой экран.

    Метки: ,
  • 9 комментариев

    1. 9 апреля 2009

      Раньше его “любил” использовать, но уже давно не использую, и, как видно, не зря :)

    2. 9 апреля 2009

      По-хорошему, при выкладке на продакшен все импорты должны заменяться на их содержимое.

    3. Сергей Чикуенок
      9 апреля 2009

      По-хорошему, при выкладке на продакшен все импорты должны заменяться на их содержимое.

      Угу. У меня все руки не доходят в техногрете написать вторую часть про использование Ant и поделиться своим решением для объединения CSS-файлов.

    4. 9 апреля 2009

      Статья плохая. Судя по приведенным автором примерам проблема не в импорте, а:
      1) в том, что браузер не собирается грузить более двух внешних файлов одновременно
      2) пример с шестью импортами одновременно - приведен, а для шести линков нет - почему?

      Вывод: тема не раскрыта, исследование некорректно.

    5. Сергей Чикуенок
      9 апреля 2009

      проблема не в импорте, а в том, что браузер не собирается грузить более двух внешних файлов одновременно

      Как раз @import стал причиной того, что браузер не грузит 2 файла параллельно. И даже названа причина: сначала браузер грузит весь файл, потом парсит его и находит импорт.

      пример с шестью импортами одновременно - приведен, а для шести линков нет - почему?

      Чтобы показать …using @import in IE causes resources to be downloaded in a different order than specified когда example has six stylesheets followed by a script. Очевидно, что для линков таких проблем нет.

      Вывод? :)

    6. 9 апреля 2009

      Ну так смотрим приведенный пример под заголовком many @imports (фигура 6): грузится яваскрипт (который последний), и ОДНОВРЕМЕННО с ним первый файл из импорта. Потом, как только яваскрипт загрузился и освободился поток - грузится след. импорт и т. д.

      Подозреваю, что с линками будет тоже самое - будут цсски грузиться по 2 файла, только яваскрипт последним будет.

      Ну и потом, все же это примеры притянутые - показано, не что импорт использовать не нужно, а не нужно его использовать “криво”.

      П. С. А может просто переводы в наших головах разные?

    7. 9 апреля 2009

      а ещё не используйте * для больших корневых элементов

    8. Сергей Чикуенок
      9 апреля 2009

      грузится яваскрипт (который последний), и ОДНОВРЕМЕННО с ним первый файл из импорта.

      Так в этом вся и проблема. Особенно если этот скрипт начнет обращаться к элементам дерева документа и брать, например, их размеры.

      В jQuery 1.3, например, в несколько раз увеличили точность срабатывания события onDOMLoad. И сделали они это именно за счет того, что перестали проверять, доступны ли все CSS-файлы на странице. Побочный эффект — все CSS-файлы должны быть объявлены до того, как будет объявлен первый скрипт (и это правильно, иначе могут быть проблемы у Safari). Если же подключать CSS с помощью импортов, то, полагаю, будут проблемы в IE.

      Ну и потом, все же это примеры притянутые - показано, не что импорт использовать не нужно, а не нужно его использовать “криво”.

      А какой способ не является «кривым»: тот, который ломает параллельную загрузку или тот, из-за которого файлы грузятся в неправильном порядке? :)

    9. dr.kos
      18 декабря 2009

      Вот я люблю подключать 1 файл стилей через линк, а в него импортами включать несколько дополнительных через импорт, это тоже медленно будет работать?

    Комментировать

    Powered by Zen Coding