CloudFlare описує Ракетно Loader , як це ...
Rocket Loader - це асинхронний навантажувач JavaScript загального призначення в поєднанні з легким віртуальним браузером, який може безпечно запускати будь-який код JavaScript після window.onload.
Ракетний навантажувач робить купу речей:
- Це гарантує, що всі скрипти на вашій сторінці не заблокують завантаження вмісту вашої сторінки;
- Завантажує всі сценарії на вашу сторінку, включаючи сторонні сценарії, асинхронно;
- З’єднує всі запити сценарію в один запит, над яким можна передавати декілька відповідей;
- Використовує LocalStorage у більшості браузерів та майже на всіх смартфонах для більш розумного зберігання скриптів, щоб вони не перезавантажувались, якщо не потрібно.
Так це досить круто, але як цього досягти?
З того, що я прочитав і виявив із запуску CloudFlare + Rocket Loader на своєму власному сайті, він працює приблизно так ...
Коли на сервер CloudFlare запитується HTML-сторінка, після завантаження її з початкового веб-хоста він переписує всі теги скриптів у <script type="
text/rocketscript
">
Браузери, природно, ігнорують теги сценаріїв, оскільки вони не розуміють формат "текст / rocketscript"
CloudFlare також вводить додатковий cloudflare.min.js
скрипт на сторінку, яка виконує магію ( див. Відформатовану версію тут ). Це єдиний сценарій, спочатку завантажений браузером (асинхронно).
Цей скрипт аналізує сторінку для будь-яких сценаріїв з типом "текст / rocketscript".
Потім він перевіряє, чи існує якийсь із цих сценаріїв у локальній пам’яті браузера. Якщо ні, то він робить запит AJAX для них (об'єднаний у логічні пакети) з CloudFlare CDN. Я не зовсім впевнений, як це працює, як згрупувати сценарії разом.
Сервери CDN збирають скрипти (які можуть надходити з декількох різних серверів: Google, Twitter, Facebook, інші CDN тощо), або з їх кешу, або з початкових серверів, а потім комбінують, мінімізують і GZIP, перш ніж надсилати їх назад до браузера.
Ця віртуальна версія браузера , на яку вони посилаються, повинна бути просто JavaScript, який потім запускає кожен із цих сценаріїв у правильному порядку, виконуючи такі дії, як:
- Перехоплення всіх дзвінків
document.write()
та введення цього вмісту у правильне місце на сторінці. (Можливо, замінивши функцію браузера write()
на користувальницьку?)
- Повторні дії, такі як DOMContentLoaded та завантажуються .
Я насправді дуже вражений тим, що це працює (хоча, можливо, це не завжди ). Але за звичайних обставин, я не думаю, що розробникам не потрібно робити нічого особливого, щоб зробити їх JavaScript сумісним.
Це вікі спільноти, тому будь ласка, відредагуйте та додайте будь-яку додаткову деталь, яка відсутня.