CloudFlare mô tả Rocket Loader như thế này ...
Rocket Loader là trình tải JavaScript không đồng bộ có mục đích chung được kết hợp với trình duyệt ảo nhẹ, có thể chạy bất kỳ mã JavaScript nào sau window.onload một cách an toàn.
Rocket Loader thực hiện một loạt điều:
- Nó đảm bảo rằng tất cả các tập lệnh trên trang của bạn sẽ không chặn nội dung trang của bạn tải;
- Tải tất cả các tập lệnh trên trang của bạn, bao gồm các tập lệnh của bên thứ ba, không đồng bộ;
- Gói tất cả các yêu cầu tập lệnh thành một yêu cầu mà qua đó nhiều phản hồi có thể được truyền phát;
- Sử dụng LocalStorage trên hầu hết các trình duyệt và gần như tất cả các điện thoại thông minh để lưu trữ tập lệnh thông minh hơn để chúng không bị tải lại trừ khi cần thiết.
Thật tuyệt, nhưng làm thế nào để đạt được nó?
Từ những gì tôi đã đọc và phát hiện ra khi chạy CloudFlare + Rocket Loader trên trang web của riêng tôi, nó hoạt động gần như thế này ...
Khi một trang HTML được yêu cầu từ máy chủ CloudFlare, sau khi tải nó từ máy chủ web gốc, nó sẽ viết lại tất cả các thẻ script vào <script type="
text/rocketscript
">
Trình duyệt tự nhiên bỏ qua các thẻ script vì chúng không hiểu định dạng "text / rocketscript"
CloudFlare cũng đưa một cloudflare.min.js
tập lệnh bổ sung vào trang thực hiện phép thuật ( xem phiên bản được định dạng ở đây ). Đây là tập lệnh duy nhất được trình duyệt tải ban đầu (không đồng bộ).
Tập lệnh này phân tích trang cho bất kỳ tập lệnh nào có loại "văn bản / tên lửa".
Sau đó, nó sẽ kiểm tra xem có bất kỳ tập lệnh nào trong số này đã tồn tại trong bộ nhớ cục bộ của trình duyệt hay không. Nếu không, nó sẽ tạo một yêu cầu AJAX cho chúng (được kết hợp trong các gói logic) từ CDN của CloudFlare. Tôi không chắc chắn làm thế nào nó hoạt động ra làm thế nào để nhóm các kịch bản lại với nhau.
Các máy chủ CDN thu thập các tập lệnh (có thể đến từ nhiều máy chủ khác nhau: Google, Twitter, Facebook, các CDN khác, v.v.), từ bộ đệm của họ hoặc từ các máy chủ gốc, sau đó kết hợp, thu nhỏ và GZIP chúng trước khi gửi lại vào trình duyệt.
Thứ trình duyệt ảo mà họ đề cập đến chỉ đơn giản là một số JavaScript sau đó chạy từng đoạn script này theo đúng thứ tự, thực hiện những việc như:
- Bắt tất cả các cuộc gọi đến
document.write()
và đưa nội dung đó vào đúng vị trí trên trang. (Có thể bằng cách ghi đè write()
chức năng của trình duyệt bằng một tùy chỉnh?)
- Đang tải lại các sự kiện như DOMContentLoaded và tải .
Tôi thực sự khá sốc khi nó hoạt động (mặc dù có lẽ nó không luôn luôn như vậy ). Nhưng trong các trường hợp thông thường, tôi không nghĩ các nhà phát triển cần phải làm gì đặc biệt để làm cho JavaScript của họ tương thích.
Đây là một wiki cộng đồng, vì vậy vui lòng chỉnh sửa và thêm bất kỳ chi tiết bổ sung nào còn thiếu.