Bộ đệm luồng NodeJS

Hướng dẫn này nói về Bộ đệm trong Nodejs. Hãy nhớ rằng chúng tôi đã nói về các luồng? . Đi trước và đọc chúng. Phần 1 và Phần 2

Và nếu bạn đã hiểu Luồng là gì, thì bạn đã sẵn sàng, mi amigo

Quay lại vấn đề chính, để hiểu bộ đệm trong Nodejs là gì, trước tiên bạn cần hiểu luồng là gì

Tương quan các luồng với bộ đệm trong Nodejs

Giả sử bạn hiểu những gì tôi đang nói vào thời điểm này, bộ đệm trong Nodejs đề cập đến dữ liệu tạm thời mà một luồng lưu giữ trước khi nó được sử dụng

Kích thước của bộ đệm trong luồng được xác định bởi một thuộc tính trên phiên bản luồng được gọi là highWatermark. Thuộc tính này là một số xác định kích thước của bộ đệm theo byte

Theo hành vi mặc định, bộ nhớ đệm hoạt động trên Bộ đệm và Chuỗi. Chúng tôi cũng có thể chọn để nó hoạt động trên các đối tượng JavaScript. Trong trường hợp đó, chúng ta phải đặt thuộc tính objectMode trên luồng thành true

Nguồn. Hunk lập trình

Bây giờ, khi một số dữ liệu được đẩy vào luồng, dữ liệu đó sẽ nằm trong bộ đệm luồng cho đến khi luồng được sử dụng hết. Khi bộ nhớ đệm đầy và chúng tôi cố gắng đẩy mạnh dữ liệu vào luồng, dữ liệu sẽ bị từ chối và kết quả trả về là sai đối với hành động đẩy

Bộ đệm trong Nodejs – Định nghĩa độc lập

Lớp đệm có sẵn trong phạm vi toàn cầu trong Nodejs và do đó, bạn không bao giờ phải nhập nó bằng mô-đun yêu cầu

Có thể nói, bộ đệm trong Nodejs ít phổ biến hoặc quen thuộc hơn đối với các nhà phát triển Node vì họ không tương tác với bộ nhớ hệ thống hàng ngày

Các nhà phát triển làm việc với Go, C hoặc C++ hoặc bất kỳ ngôn ngữ lập trình hệ thống nào khác đều quen thuộc với khái niệm Bộ đệm

Bộ đệm trong Nodejs là một kích thước bộ nhớ cố định không thể thay đổi kích thước. Như đã đề cập ở trên, kích thước của chúng được xác định bởi thuộc tính highWatermark trên phiên bản luồng

Chúng ta có thể nghĩ về Bộ đệm trong Nodejs như một mảng các số nguyên, mỗi số xác định kích thước của bộ nhớ theo byte dữ liệu. Bộ đệm được đặt bên ngoài công cụ JavaScript V8

Tại sao sử dụng bộ đệm trong Nodejs lại hữu ích?

Bộ đệm trong nút. js không nên nhầm lẫn với khái niệm về bộ đệm. Đây chỉ là trường hợp khi bộ xử lý luồng nhận dữ liệu với tốc độ nhanh hơn mức nó có thể tiêu hóa

Bộ đệm trong Nodejs là JavaScript thuần túy. Mặc dù chúng hoạt động rất tốt với các chuỗi được mã hóa bằng Unicode, nhưng chúng không hoạt động tốt với dữ liệu nhị phân. Tuy nhiên, đối với trình duyệt thì không sao, vì hầu hết dữ liệu đều là chuỗi

Ban đầu, Nodejs sử dụng các chuỗi để xử lý các luồng TCP và đọc và ghi vào hệ thống tệp. Tuy nhiên, có một vấn đề với chuỗi. Cả hai nhiệm vụ này đều yêu cầu xử lý các luồng dữ liệu nhị phân

Mặc dù bạn có thể sử dụng dây, tuy nhiên, điều đó sẽ chỉ mang lại rắc rối cho bạn. Đầu tiên, cách tiếp cận này làm chậm quá trình vì bạn sẽ phải sử dụng API tương thích với chuỗi chứ KHÔNG phải dữ liệu nhị phân

Thứ hai, mã cũng có xu hướng bị hỏng theo những cách không mong muốn

Vì vậy, tại sao lại sử dụng chuỗi nhị phân, khi bạn có thể sử dụng bộ đệm trong Nodejs

Tạo bộ đệm trong Nodejs

Bộ đệm trong Nodejs có thể được tạo bằng Bộ đệm. từ [], Bộ đệm. cấp phát [] và Bộ đệm. phương thức allocUnsafe[]

const buf = Bộ đệm. from['Một số văn bản ngớ ngẩn. ’];

Bạn thậm chí có thể sử dụng cú pháp sau để tạo bộ đệm trong Nodejs

  • Đệm. từ [mảng]
  • Đệm. from[arrayBuffer[, byteOffset[, length]]]
  • Đệm. từ [bộ đệm]
  • Đệm. từ [chuỗi [, mã hóa]]

Chúng tôi cũng có thể phân bổ kích thước khi khởi tạo bộ đệm. Hãy tạo bộ đệm 2KB

const buf = Bộ đệm. alloc[2048]
//or
const buf = Bộ đệm. allocUnsafe[2048]

Lưu ý quan trọng

Một số điều bạn nên biết khi làm việc với bộ đệm trong Nodejs. Mặc dù cả alloc và allocUnsafe đều xác định kích thước cho Bộ đệm theo byte, nhưng có sự khác biệt giữa hai

Phương thức alloc[] được khởi tạo bằng 0 và phương thức allocUnsafe[] vẫn chưa được khởi tạo. Có nghĩa là, mặc dù allocUnsafe[] có thể tương đối nhanh hơn alloc[], nhưng phần dữ liệu được phân bổ có thể chứa dữ liệu cũ và có khả năng nhạy cảm

Nếu có dữ liệu cũ hơn trong bộ nhớ, có thể bị truy cập hoặc rò rỉ khi Bộ đệm được đọc. Đây chính xác là lý do tại sao nó được đặt tên là allocUnsafe và đây là điều khiến nó không an toàn

Bạn nên cẩn thận hơn khi sử dụng phương pháp này

Truy cập nội dung của bộ đệm

Trước đó trong bài viết này, tôi đã đề cập đến Bộ đệm trong Nodejs giống một mảng byte hơn. Do đó, khi chúng ta truy cập dữ liệu từ một mảng đơn giản, chúng ta có thể thực hiện tương tự ở đây để truy cập nội dung của bộ đệm bằng cách sử dụng chỉ mục

const buf = Bộ đệm. từ ['Này. ']
bảng điều khiển. log[buf[0]] //72
bảng điều khiển. log[buf[1]] //101
bảng điều khiển. log[buf[2]] //121

Các số bạn nhìn thấy là các byte UTF-8 xác định các ký tự trong bộ đệm đó [H → 72, e → 101, y → 121]. Bạn thấy điều này vì UTF-8 là bảng mã Unicode mặc định. Điều quan trọng cần lưu ý là một số ký tự có thể chiếm nhiều byte bộ nhớ hơn

Để in toàn bộ nội dung của bộ đệm, hãy sử dụng phương thức toString[]

bảng điều khiển. nhật ký [buf. toString[]]

Theo mặc định, buf. toString[] cũng sử dụng mã hóa UTF-8

Khi bạn khởi tạo bộ đệm với một số được chỉ định trước cho kích thước, bạn sẽ không nhận được bộ đệm trống, thay vào đó bạn sẽ tìm thấy một số dữ liệu ngẫu nhiên bên trong nó

Thay đổi nội dung của bộ đệm

Bạn có thể ghi toàn bộ chuỗi dữ liệu vào bộ đệm trong Nodejs bằng cách sử dụng phương thức write[]

const buf = Bộ đệm. cấp phát[4]
buf. viết ['Đan. ']

Giống như chúng ta thay đổi dữ liệu trong một mảng bằng cách truy cập nó lần đầu tiên, chúng ta có thể làm tương tự ở đây để thay đổi nội dung của bộ đệm trong Nodejs

const buf = Bộ đệm. from['dan. ']
buf[2] = 79 // y trong bảng điều khiển UTF-8
. nhật ký [buf. toString[]] //Ngày.

Phần kết luận

Để hiểu bộ đệm trong Nodejs là gì, trước tiên bạn cần hiểu luồng là gì. Đọc bài đăng này về bộ đệm trong Nodejs để giải thích nó là gì, cách thức hoạt động và cách bạn có thể sử dụng bộ đệm trong các dự án Nodejs

Sự khác biệt giữa bộ đệm và luồng là gì?

Bộ đệm là phương pháp tải trước các phân đoạn dữ liệu khi truyền phát nội dung video. Truyền trực tuyến — quá trình truyền liên tục các tệp âm thanh hoặc video từ máy chủ đến máy khách — là quá trình giúp xem video trực tuyến trở nên khả thi

Đệm một luồng có nghĩa là gì?

Vùng đệm suối là các khu vực cây cối rậm rạp dọc theo và liền kề với suối nơi việc dọn dẹp, san lấp, lấp đầy, xây dựng công trình và các hoạt động khác bị hạn chế hoặc bị cấm. Stream buffers protect water quality, reduce flooding, and provide other benefits.

Kích thước bộ đệm luồng là gì?

Kích thước mặc định của bộ đệm luồng là 4K .

Bộ đệm luồng hoạt động như thế nào?

Vùng đệm dòng chảy tạo khoảng cách giữa việc sử dụng nước và đất vùng cao . Vùng đệm càng rộng, nó xử lý chất dinh dưỡng càng hiệu quả và làm chậm trầm tích trong dòng chảy trước khi chúng đi vào dòng suối. Các nghiên cứu gần đây khuyến nghị 100 feet là chiều rộng vùng đệm tối thiểu để cải thiện môi trường sống của động vật hoang dã, chất lượng nước và khả năng phục hồi bão.

Chủ Đề