[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Асинхронная загрузка css
Владимир55
В сети обнаружил вот такой скрипт, который позволяет осуществлять асинхронную загрузку файла css:

<script>
function
b(){
var a=document.createElement("link");
a.rel="stylesheet";
a.href="/my-files/contacts/subscribe.css";
document.getElementsByTagName("head")[0].appendChild(a)
}
var c=requestAnimationFrame||mozRequestAnimationFrame||webkitRequestAnimationFrame||msRequestAnimationFrame;
c?c(b):window.addEventListener("load",b);
</script>


В процессе оптимизации общего кода страницы выяснилось, что есть и второй файл subscribe-2.css, который тоже можно загружать асинхронно.

Каким образом можно вписать в этот скрипт загрузку второго файла subscribe-2.css?
FatCat
Цитата (Владимир55 @ 8.12.2016 - 00:37)
асинхронную загрузку файла css

1. Чем это лучше чем write()?
2. А нафига вообще?

_____________
Бесплатному сыру в дырки не заглядывают...
sergeiss
Владимир55, погугли на тему 'lazy loading'. Эта штуковина позволяет подгружать необходимые файлы по мере необходимости, а не все сразу. Можно применить к любому файлу, будь то JS или CSS. При этом, естественно, осуществляется контроль, был ли уже загружен этот файл.
Затем, после загрузки, когда она заведомо завершена, можно вызвать callback, который уже будет использовать данные из этого файла.
Lazy loading в чем-то похож на require_once в ПХП. И это название lazy loading не относится к какому-то определенному скрипту, это скорее название алгоритма/паттерна.

Цитата (FatCat @ 8.12.2016 - 02:30)
1. Чем это лучше чем write()?
2. А нафига вообще?

1. Потому что надо осуществлять контроль, не был ли уже загружен этот файл. Если уже загрузили - ничего не делаем. Иначе грузим. В итоге получаем lazy loading, описанный мной в предыдущем абзаце smile.gif
2. Чтобы увеличить скорость начальной загрузки страницы. И чтобы уменьшить трафик: если что-то не потребуется, то это вообще не будет загружено.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Владимир55
Сама идеология lazy loading мне представляется верной и весьма своевременной. И она, конечно же, способна дать гораздо больше, чем просто упорядочивание загрузки CSS. Полагаю, что на графике и видео выиграть можно больше.

Коды не очень сложны, но в организационном плане её реализовать крайне сложно, поскольку она требует участия программиста при наполнении сайта, а это нереально.

У операторов есть норма выработки за день и девочки не будут заниматься никакими кодами. Им нужно вносить инфу с помощью редактора - быстро и много.

Но, в принципе, надо эту идею иметь в виду.

А если сейчас, применительно к поставленному вопросу, подкачку двух файлов сделать так:
function loadCss(href) {
var link = document.createElement("link");
link.rel = "stylesheet";
link.href = href;
document.head.appendChild(link);
}
loadCss('file1.css');
loadCss('file2.css');
FatCat
Цитата (sergeiss @ 8.12.2016 - 08:02)
Потому что надо осуществлять контроль, не был ли уже загружен этот файл.

С контролем через DOM? Месье знает толк в извращениях.

_____________
Бесплатному сыру в дырки не заглядывают...
sergeiss
Цитата (FatCat @ 8.12.2016 - 12:40)
Цитата (sergeiss @ 8.12.2016 - 08:02)
Потому что надо осуществлять контроль, не был ли уже загружен этот файл.

С контролем через DOM? Месье знает толк в извращениях.

CSS? Нет проблем :)

$('html').context.styleSheets


JS? Аналогично:
$('html').context.scripts


Анализируем и, если нету в списке, то грузим.

PS. Можно и без jQuery обойтись
document.getElementsByTagName('head')[0].childNodes


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.