Zawsze wszystkie biblioteki js zwyczajnie dodawałem na koniec pliku, ale ostatnio tknęło mnie aby w dokumencie był tylko jeden mały skrypt, który załaduje mi wszystko w locie. Zanim zacząłem pisać, pierwsza myśl jaka mnie naszła to "ale po co?". Skoro dodaje wszystkie biblioteki na końcu pliku, to ta cała asynchroniczność to tylko bajer - a być może i wada o której jeszcze nie wiem. Nie dawało mi to spokoju no i napisałem idealną dla mnie implementacje. Moje wnioski są takie:
(wrażenia bez włączonego cachu)
- (to raczej oczywisty wniosek) readyDom jest szybsze. Po załadowaniu treści i CSS'ów brak lagów. Strona nie czeka na wykonanie wszystkich skryptów po kolei przez co nie zacina jej na tym etapie.
- Zdarza się że przy zwykłym wczytywaniu, treść strony pod koniec ładowania skryptów przeskakuje. Przy wczytywaniu skryptów w locie takiego efektu nie ma,
- dużą ilość bibliotek można załadować i wykonać prawie że na raz.
- użytkowo nie odczuwa się w żaden sposób tego że biblioteki się "doczytywane" niezależnie od ilości, tzn cały proces trwa maksymalnie tyle co najdłużej(największa) pobierana biblioteka.
- W firebugu Total Load wygląda podobnie, nie zmienia to faktu że strona jest gotowa szybciej. 3 laików których poprosiłem o wskazanie która wersja się szybciej i "ładniej" wczytuje, za każdym razem padło na async.
- jako bajer można dodać jakiegoś loadera który przykryje całą stronę i zniknie gdy wszystko będzie gotowe - choć i tak trzeba by było go specjalnie przedłużyć bo za szybko by znikał ;p
- ogólne wrażenia na +
Pomińmy fakt zależności pomiędzy skryptami js, bo to nie jest dla mnie problem.
Chcę to rozwiązanie wprowadzić komercyjnie w swoim szablonie na themeforesta z uwagi na dużą ilość bibliotek js. Sam dedykowany skrypt "uruchamiający" cały szablon zbudowany jest z kilku modułów podzielonych na kilka plików aby łatwiej to było ogarnąć. Wszystko co się da łącze w duże pliki przez postprocesory lecz i tak odbija się to na ładowaniu strony - wierze że zawsze można zrobić coś wydajniej. Być może ktoś z was miał podobną rozkmine ? Wg mnie asynchroniczność naprawdę daje rade, choć nie mam wiedzy czy np dla jakiś FW typu angular to będzie jakiś problem do zaimplementowania - bo z tym też muszę się liczyć. Ważna jest też strona użytkowa. Dla z wizualizowania idei, mój cały skrypt js na stronie przykładowo wygląda tylko tak:
//bardzo mały i głupi skrypt na końcu strony, ma za zadanie tylko załadować niezbędne biblioteki podane w kodzie funkcji + ewentualne te które mu wskaże przy inicjacj. <script> theme({ // ładowanie ewentualnych dodatkowych bibliotek load: ["costam.js", ... ], // inne ewentualne opcje }) .done(function(){ //cała strona obsłużona, wszystkie biblioteki załadowane. Miejsce na swoje skrypty }); </script>
edit: nie mam podglądu, localhost