當前位置:成語大全網 - 書法字典 - 淺析如何比較節點的緩沖區

淺析如何比較節點的緩沖區

緩沖結構

Buffer是壹個典型的結合了Javascript和C++的模塊。性能相關部分用C++實現,非性能相關部分用javascript實現。

當節點啟動進程時,緩沖區已經被加載到內存中並放入全局對象中,因此不需要它。

緩沖對象:類似於數組,其元素是16中的兩位數。

緩沖存儲器分配

緩沖區對象的內存分配不在V8的堆內存中,內存應用在Node的C++級別實現。

為了更有效地使用應用內存,節點采用了slab分配機制。slab是壹種動態內存管理機制,適用於各種*nix操作系統。平板有三種狀態:

(1)完全:完全分配。

(2)部分:部分分配狀態

(3)空:未分配。

緩沖區轉換

緩沖區對象可以與字符串相互轉換,支持的編碼類型如下:

ASCII、UTF-8、UTF-16LE/UCS-2、Base64、二進制、十六進制

要緩沖的字符串

新緩沖區(字符串,【編碼】),默認UTF-8。

buf.write(字符串、【偏移量】、【長度】、【編碼】)

緩沖到字符串

buf.toString(【編碼】,【開始】,【結束】)

緩沖區不支持的編碼類型。

判斷是否受Buffer.isEncoding(編碼)支持

Iconv-lite:純javascript實現,重量更輕,性能更好,無需從C++轉換為JavaScript。

Iconv:調用C++的libiconv庫完成。

緩沖區拼接

註意“RES . on(‘data‘,function(chunk){ })”,其中參數chunk是緩沖區對象,直接用+拼接會自動轉換成字符串,可能會導致亂碼。

解決方案:

(1)通過可讀流中的setEncoding()方法,可以將數據事件作為編碼字符串而不是緩沖區對象進行傳遞,並且在內部使用StringEncoder模塊。

(2)將Buffer對象臨時存儲在數組中,最後組裝成壹個大的Buffer,然後編碼轉換成字符串輸出。

緩沖區廣泛應用於文件I/O和網絡I/O中,其性能非常重要,遠遠高於普通字符串的性能。

除了緩沖區和字符串之間轉換的性能損失之外,讀取文件時設置高水位線也非常重要。

a、高水位線設置對緩沖內存的分配和使用有壹定的影響。

b、highWaterMark設置太小,這可能會導致系統調用過多。

什麽時候應該使用緩沖區,什麽時候不應該使用?-純javascript支持unicode代碼,但不支持二進制代碼。在解決TCP流或文件流時,有必要處理流。當我們保存非utf-8字符串、二進制代碼和其他格式時,我們必須使用“緩沖區”。