Kích thước Gói & Định dạng Module
SDK cung cấp cả bản dựng CommonJS và ESM, và giữ hai phụ thuộc nặng — Zod và socket.io-client — ra khỏi đồ thị nhập khẩu cho đến khi chúng thực sự được sử dụng. Một dự án chỉ gọi một phương thức, không bật xác thực và không bao giờ mở socket tải 43 kB đã nén (9.7 kB gzip), giảm từ 536 kB (110 kB gzip).
Những gì được cung cấp trong gói
| Trường | Giá trị | Được sử dụng bởi |
|---|---|---|
main | dist/index.js | Node và bất kỳ người tiêu dùng CommonJS nào |
module | esm/index.js | Bundlers (webpack, Vite, Rollup, esbuild) |
types | dist/index.d.ts | TypeScript |
sideEffects | false | Bundlers, để loại bỏ các module không sử dụng |
Không có bản đồ "exports", vì vậy mọi nhập sâu hiện có — oneentry/dist/<module>/<module>Interfaces và phần còn lại — được giải quyết chính xác như trước đây. Node tiếp tục giải quyết bản dựng CommonJS thông qua main; không có gì trong thiết lập hiện tại của bạn cần thay đổi.
sideEffects: false cho biết bundler rằng việc nhập một module của SDK không bao giờ làm gì một mình, điều này làm cho việc tree-shaking trở nên khả thi: các module bạn không chạm vào sẽ bị loại bỏ khỏi đầu ra.
Zod chỉ được tải khi xác thực chạy
Xác thực phản hồi là tắt theo mặc định. Các sơ đồ phản hồi trước đây được nhập tĩnh bởi mọi module, điều này kéo Zod vào mọi gói ngay cả khi không có gì được xác thực. Các sơ đồ và các trợ giúp xác thực hiện được tải theo yêu cầu, lần đầu tiên một phản hồi thực sự cần được xác thực.
- Với
validation.enabled: false(mặc định), Zod và các sơ đồ theo module (341 kB) sẽ nằm trong các chunk không bao giờ được yêu cầu. - Với
validation.enabled: true, hành vi không thay đổi — các sơ đồ chỉ đơn giản được lấy về lần đầu tiên chúng cần. - Trong Node,
require('oneentry')không còn tải Zod khi khởi động.
Đối với một dự án chỉ gọi một phương thức với xác thực tắt, mã thực sự tải giảm từ 536 kB xuống 83 kB đã nén (110 kB → 22 kB gzip) — và giảm xuống 43 kB khi socket.io cũng bị loại bỏ (xem bên dưới).
ℹ️ Con số đó giả định một bundler thực hiện chia mã — mặc định trong webpack, Vite và Rollup. Một gói bị ép vào một tệp duy nhất vẫn co lại, nhưng chỉ còn ~427 kB, vì Zod sau đó được inlined mặc dù nó không bao giờ chạy.
Không có API công khai nào thay đổi. Trợ giúp nội bộ _validateResponse trở thành async, điều này chỉ liên quan nếu bạn tự mở rộng các lớp cơ bản của SDK.
socket.io chỉ được tải khi bạn mở một socket
WS.connect() giữ chữ ký đồng bộ của nó và vẫn trả về một Socket của socket.io, nhưng socket.io-client (~41 kB) hiện được nhập lần đầu tiên khi connect() được gọi.
Cho đến khi chunk được giải quyết, đối tượng trả về sẽ xếp hàng bất cứ điều gì bạn làm với nó — on, emit, disconnect — và phát lại nó lên socket thực trong cùng một tick mà socket được tạo, trước khi kết nối có thể cung cấp bất cứ điều gì, vì vậy không có sự kiện nào bị mất:
// Nothing changes in normal use — handlers registered here always fire.
const socket = WS.connect();
socket.on('connect', () => console.log('WebSocket connected'));
socket.on('my_event', (payload) => console.log(payload));
Đọc trạng thái kết nối sớm vẫn chính xác, vì một socket mới được tạo cũng không được kết nối: id là undefined và connected là false trong cả hành vi cũ và mới.
Sự khác biệt duy nhất: một phương thức phải trả về một cái gì đó (ví dụ listeners()) không thể trả lời trước khi chunk đến, và các đối tượng lồng nhau như socket.io chỉ có thể truy cập khi nó được tải. Đăng ký các trình xử lý và phát tín hiệu — việc sử dụng bình thường — không bị ảnh hưởng.
Kích thước gói qua một cái nhìn
| Tình huống | Đã nén | Gzip |
|---|---|---|
| Trước (mọi người tiêu dùng) | 536 kB | 110 kB |
| Xác thực tắt, không có socket | 43 kB | 9.7 kB |
| Xác thực tắt, socket đã mở | ~83 kB | ~22 kB |
| Gói tệp đơn, không chia mã | ~427 kB | — |
Để có bản dựng nhỏ nhất
- Giữ xác thực tắt trong sản xuất. Bật nó trong khi phát triển để phát hiện sự không nhất quán dữ liệu, sau đó tắt nó — các sơ đồ sẽ không nằm trong mã đã tải.
- Để bundler của bạn chia mã. Chia mã là mặc định trong webpack, Vite và Rollup; tắt nó sẽ inlined các chunk lười biếng và mang lại hầu hết lợi ích.
- Nhập các loại với
import type. Các nhập loại sẽ bị xóa tại thời điểm biên dịch — xem Nhập các loại. - Chỉ giải cấu trúc các module bạn sử dụng. Với
sideEffects: falsevà bản dựng ESM, các module không chạm vào sẽ bị loại bỏ khỏi đầu ra.
🔗 Tài liệu liên quan
- Nhập các loại - các điểm vào
oneentryvàoneentry/types - Xác thực phản hồi API - bật và cấu hình xác thực Zod
- Module WS - mở một kết nối thời gian thực