Nguồn: Jeroen’s Notes

Tóm tắt

Bài viết trình bày một kỹ thuật tối ưu hóa cho WebAssembly: thay vì giải nén toàn bộ file .tar.gz trước khi sử dụng, có thể tạo một file index nhỏ chứa thông tin về size và offset của từng file bên trong tar, sau đó mount trực tiếp tar blob qua Emscripten’s WORKERFS mà không cần copy dữ liệu.

Kỹ thuật này hoạt động được nhờ ba yếu tố: tar có cấu trúc flat với dữ liệu contiguous và byte-addressable; WORKERFS của Emscripten được thiết kế để serve reads từ Blob objects bằng cách slice blob theo offset mà không copy vào Wasm heap; và browser có sẵn native DecompressionStream API để gunzip hiệu quả. Kết hợp lại, hệ thống đạt được hiệu ứng “memory-mapping” — file content chỉ được truy cập khi C code thực sự đọc chúng.

Công cụ tar-vfs-index (npm package) thực hiện việc đọc tar/tar.gz stream và xuất ra JSON index theo đúng format của file_packager của Emscripten. Có thể lưu metadata như file riêng biệt, hoặc append trực tiếp vào cuối tarball (tar cho phép điều này), tạo ra một file self-contained duy nhất.

Kỹ thuật này đang được WebR (bản port của R language cho WebAssembly) sử dụng để phân phối R packages — toàn bộ package repository giờ đây hosted dưới dạng .tar.gz thông thường trên static server, nhưng tải nhanh hơn đáng kể vì không cần extract.

👉 Đọc bài gốc