Tạm biệt Node.js Buffer. Đã đến lúc chuyển sang Uint8Array
(sindresorhus.com)- 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,
Uint8Arraylà kiểu JavaScript mặc định và cũng hoạt động đa nền tảng Bufferlà một instance củaUint8Array, 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
Buffercầ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
- Vì vậy, mã sử dụng các phương thức của
Kế hoạch
- Quyết định chuyển tất cả package từ
BuffersangUint8Array Buffercó 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
Uint8Arrayvà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
Buffernhưng không dùng các phương thức riêng củaBuffer, chỉ cần cập nhật tài liệu và kiểu sangUint8Array- Việc đổi kiểu đầu vào từ
BuffersangUint8Arraylà thay đổi không phá vỡ tương thích, vì buffer là một instance củaUint8Array
- Việc đổi kiểu đầu vào từ
- 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
Uint8ArraysangBuffer, bạn có thể dùngBuffer.from(uint8Array)(sao chép dữ liệu) hoặcBuffer.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
- Xóa mọi
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 khiUint8Arrayxuất hiện - Làm sao chuyển đổi from/to Base64 bằng
Uint8Array? : Hiện tại hãy dùnguint8array-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.