NPM(Node.JS 包管理器)上是否有循环缓冲区/环形缓冲区的实现?我可以轻松地自己实现一个,但我希望有一个易于部署和维护的库。
我的用例是将时间序列存储在固定大小的内存数据库中,就像 RRDTool 一样,但是 RRDTool 及其在 Javascript 中的重新实现(我忘记了名字)都不适合。我需要存储大型 (50KB) JSON 对象。
意识到这个问题是在大约 4 个月前被问到的,但我想我不妨分享一下。
不久前我自己出于另一个目的写了一个,今天把它扔到了 npm 上。它被命名为CBuffer。 README.md 文件包含有关如何使用它的博客文章的链接。只需通过
安装即可npm install CBuffer
并通过以下方式在您的脚本中使用它:
var CBuffer = require( 'CBuffer' ).CBuffer;
我花了很多时间试图将 GC 降到最低,这是我能找到的最快的实现。
该线程重点介绍了 JavaScript 中循环缓冲区的经典用例。如果您正在探索用于固定容量数据管理的现代高性能解决方案,您可能会发现 Buflux [https://github.com/faizanu94/buflux] 非常适合。它是一个轻量级、事件驱动的缓冲区库,专为 Node.js 和浏览器环境设计,并且包含对循环缓冲区行为的内置支持。
Bflux 支持多种溢出策略:
以下是 Buflux 如何简化循环缓冲区管理的示例:
import { Buflux, OverflowMode } from 'buflux';
// Create a buffer with capacity 3 and eviction strategy
const buffer = new Buflux<number>({
capacity: 3,
overflow: OverflowMode.EVICT, // Automatically evicts the oldest item
});
buffer.enqueue(1); // [1]
buffer.enqueue(2); // [1, 2]
buffer.enqueue(3); // [1, 2, 3]
buffer.enqueue(4); // Evicts 1, buffer becomes [2, 3, 4]
console.log(buffer.toArray()); // Output: [2, 3, 4]
console.log(buffer.peek()); // Output: 2
Bflux 还发出入队、出队、溢出和拒绝等事件,因此您可以将其无缝集成到更大的系统中。
它非常适合任务队列、速率限制、缓存或任何需要高效数据处理的情况。