CloudFlare memiliki teknologi yang sangat inovatif yang disebut Rocket Loader (baik pada akun gratis dan berbayar). Tetapi bagaimana cara kerjanya?
Mereka memiliki beberapa dari halaman yang menjelaskan teknologi , tetapi tidak banyak rincian teknis. Salah satu fitur utama adalah membuat semua Javascript memuat secara non-blocking (asinkron) , yang merupakan prestasi yang luar biasa! Ini berarti HTML / CSS dapat di-render tanpa menunggu skrip dimuat dan dijalankan.
Bagaimana mungkin?
Tentunya itu tidak bisa begitu saja mengubah semua <script>
tag untuk digunakan async="true"
atau defer="true"
karena ini akan merusak beberapa hal ...
- Skrip masih perlu dimuat dalam urutan yang benar (misalnya, Anda tidak dapat memuat plugin jQuery hingga pustaka jQuery dimuat.)
document.write()
panggilan dalam skrip ini perlu berfungsi ( tampaknya ini tidak melakukan apa pun dalam skrip async khas ).- Bagaimana dengan acara DOMContentLoaded? Jika beberapa skrip di-load setelah ini dipicu, apakah event-handler-nya tidak dipicu?
Dan sebagai pengembang, apakah ada hal lain yang perlu saya perhatikan untuk memastikan situs / skrip / plugin saya tetap kompatibel dengan Rocket Loader?
sumber
document.write
memang telah dimutasi. Saya dapatkanfunction (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)}}
sebagai nilai string. Jadi hipotesis yangdocument.write
telah ditimpa memang benar.