CloudFlare ma przełomową technologię o nazwie Rocket Loader (zarówno na kontach darmowych, jak i płatnych). Ale jak to właściwie działa?
Mają kilka z stron , które opisują technologię , ale nie wiele szczegółów technicznych. Jedną z kluczowych cech jest to, że sprawia, że wszystkie JavaScript ładowane są w sposób nieblokujący (asynchronicznie) , co jest niesamowitym wyczynem! Oznacza to, że HTML / CSS można renderować bez czekania na załadowanie i uruchomienie skryptów.
Jak to możliwe?
Z pewnością nie można po prostu zmienić wszystkie <script>
znaczniki do użycia async="true"
lub defer="true"
jak to złamie kilka rzeczy ...
- Skrypty nadal muszą ładować się w odpowiedniej kolejności (na przykład nie można załadować wtyczek jQuery, dopóki biblioteka jQuery nie zostanie załadowana).
document.write()
Wywołania w tych skryptach muszą działać ( najwyraźniej nie robią nic w typowych skryptach asynchronicznych ).- Co ze zdarzeniem DOMContentLoaded? Jeśli niektóre skrypty zostaną załadowane po uruchomieniu, czy ich procedury obsługi zdarzeń nie zostaną uruchomione?
A jako programista, czy jest coś jeszcze, o czym muszę wiedzieć, aby zapewnić zgodność moich stron / skryptów / wtyczek z programem Rocket Loader?
źródło
document.write
jest rzeczywiście zmutowana. Otrzymujęfunction (b,d,e,g,h){if(u.getActivated())return c.apply(f,arguments);try{return j[a].apply(f,arguments)}catch(i){return j[a](b,d,e,g,h)}}
jako wartość ciągu. Tak więc hipoteza, któradocument.write
została zastąpiona, jest rzeczywiście poprawna.