CloudFlare descreve o Rocket Loader como este ...
O Rocket Loader é um carregador JavaScript assíncrono de uso geral, associado a um navegador virtual leve, que pode executar com segurança qualquer código JavaScript após o window.onload.
O Rocket Loader faz várias coisas:
- Ele garante que todos os scripts da sua página não impeçam o carregamento do conteúdo da sua página;
- Carrega todos os scripts da sua página, incluindo scripts de terceiros, de forma assíncrona;
- Agrupa todos os pedidos de script em um único pedido, sobre o qual várias respostas podem ser transmitidas;
- Usa o LocalStorage na maioria dos navegadores e em quase todos os smartphones para armazenar scripts de forma mais inteligente, para que não sejam recarregados a menos que seja necessário.
Então isso é muito legal, mas como isso acontece?
Pelo que li e descobri ao executar o CloudFlare + Rocket Loader no meu próprio site, ele funciona aproximadamente assim ...
Quando uma página HTML é solicitada a partir de um servidor CloudFlare, após carregá-la no host de origem, ela reescreve todas as tags de script em <script type="
text/rocketscript
">
Os navegadores ignoram naturalmente as tags de script, pois não entendem o formato "text / rocketscript"
O CloudFlare também injeta um cloudflare.min.js
script adicional na página que executa a mágica ( veja a versão formatada aqui ). Este é o único script inicialmente carregado pelo navegador (assincronamente).
Este script analisa a página para qualquer script com o tipo "text / rocketscript".
Em seguida, verifica se algum desses scripts já existe no armazenamento local do navegador. Caso contrário, ele fará uma solicitação AJAX para eles (combinada em pacotes lógicos) da CDN do CloudFlare. Não sei ao certo como funciona como agrupar os scripts.
Os servidores CDN reúnem os scripts (que podem vir de vários servidores diferentes: Google, Twitter, Facebook, outros CDNs etc.), a partir do cache ou dos servidores de origem, e depois os combinam, minimizam e GZIP antes de enviá-los de volta. para o navegador.
Essa coisa de navegador virtual a que se referem deve ser simplesmente algum JavaScript que executa cada um desses scripts na ordem correta, fazendo coisas como:
- Captura de todas as chamadas
document.write()
e injeção desse conteúdo no local correto da página. (Possivelmente substituindo a write()
função do navegador por uma função personalizada?)
- Recuperando eventos como DOMContentLoaded e load .
Estou realmente muito chocado que ele funciona (embora talvez isso não sempre ). Mas, em circunstâncias normais, acho que os desenvolvedores não precisam fazer nada de especial para tornar seu JavaScript compatível.
Este é um wiki da comunidade, portanto, edite e adicione qualquer detalhe adicional que estiver faltando.