CloudFlare обладает довольно революционной технологией под названием Rocket Loader (как для бесплатных, так и для платных аккаунтов). Но как это на самом деле работает?
У них есть несколько из страниц , которые описывают технологию , но не много технических деталей. Одной из ключевых особенностей является то, что он загружает весь Javascript неблокирующим образом (асинхронно) , что является невероятным подвигом! Это означает, что HTML / CSS можно рендерить, не дожидаясь загрузки и запуска скриптов.
Как это возможно?
Конечно, он не может просто изменить все <script>
теги, чтобы использовать, async="true"
или defer="true"
как это может сломать несколько вещей ...
- Скрипты по-прежнему нужно загружать в правильном порядке (например, вы не можете загружать плагины jQuery, пока не загрузится библиотека jQuery).
document.write()
вызовы в этих скриптах должны функционировать ( очевидно, они ничего не делают в типичных асинхронных скриптах ).- Как насчет события DOMContentLoaded? Если некоторые сценарии загружаются после того, как это сработало, их обработчики событий остаются без запуска?
И как разработчику, есть ли что-то еще, что мне нужно знать, чтобы мои сайты / скрипты / плагины оставались совместимыми с Rocket Loader?
источник
document.write
действительно изменена. Я получаю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)}}
в качестве строкового значения. Таким образом, гипотеза,document.write
которая была переписана, действительно верна.