- Kiểu
Buffer đã là nền tảng của việc xử lý dữ liệu nhị phân từ những ngày đầu của Node.js
- Nhưng ngày nay,
Uint8Array là kiểu JavaScript mặc định và cũng hoạt động đa nền tảng
Buffer là một instance của Uint8Array, nhưng đã đưa vào nhiều phương thức không thể dùng trong các môi trường JavaScript khác
- Vì vậy, mã sử dụng các phương thức của
Buffer cần polyfill, khiến nhiều gói quan trọng không tương thích với trình duyệt
- Ngoài ra,
Buffer#slice() và Uint8Array#slice() hoạt động khác nhau nên có thể dẫn đến kết quả khó đoán
Kế hoạch
- Quyết định chuyển tất cả package từ
Buffer sang Uint8Array
Buffer có lẽ sẽ không bao giờ bị loại bỏ, và cũng sẽ không hoàn toàn ngừng được dùng, nhưng ít nhất cộng đồng có thể dần dần rời xa buffer
- Hy vọng của tôi là đội ngũ Node.js ít nhất sẽ bắt đầu không còn khuyến khích dùng
Buffer
Cách thực hiện
- Trước tiên, hãy nắm rõ những điểm không tương thích tinh vi giữa
Uint8Array và Buffer
- Tôi đã tạo package
uint8array-extras để việc chuyển đổi trở nên dễ dàng hơn
- Nếu mã của bạn nhận
Buffer nhưng không dùng các phương thức riêng của Buffer, chỉ cần cập nhật tài liệu và kiểu sang Uint8Array
- Việc đổi kiểu đầu vào từ
Buffer sang Uint8Array là thay đổi không phá vỡ tương thích, vì buffer là một instance của Uint8Array
- Nếu đổi kiểu trả về từ buffer sang
Uint8Array, đó là thay đổi phá vỡ tương thích vì phía sử dụng có thể đang dùng các phương thức chỉ có ở buffer
- Nếu bắt buộc phải chuyển
Uint8Array sang Buffer, bạn có thể dùng Buffer.from(uint8Array) (sao chép dữ liệu) hoặc Buffer.from(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength) (không sao chép). Nhưng nhìn chung vẫn có cách tốt hơn
- Các bước chuyển đổi gồm
- Xóa mọi
import {Buffer} từ node:buffer
- Xóa mọi chỗ sử dụng
Buffer ở phạm vi toàn cục
- Ngừng sử dụng các phương thức đặc thù của
Buffer
Câu hỏi
- Vì sao ngay từ đầu lại có
Buffer? : Buffer được tạo ra từ rất lâu trước khi Uint8Array xuất hiện
- Làm sao chuyển đổi from/to Base64 bằng
Uint8Array? : Hiện tại hãy dùng uint8array-extras. Về lâu dài, rất có thể JavaScript sẽ hỗ trợ sẵn việc này
1 bình luận
Ồ, thư viện ở giữa bài rất hay.