分享一个 javascript BitMatrix
发布于 5 个月前 作者 cnwhy 933 次浏览 最后一次编辑是 2 个月前 来自 分享

最近项目需要缓存一批二维码的点阵信息, 最开始用二维数组存,发现太占资源, 后来改用 Uint8Array 好了点,
想找个直接以bit为单元存储的类,结果没有; 然后就有这个 BitMatrix;

用 ArrayBuffer来存储数据, 并把每个byte再拆成bit来用. 最终效果还是可以的, 有兴趣的可以关注一下, API还在完善中

用 1 填充 2000 个 100*100 矩阵 内存占用情况:
┌─────────┬──────────────────────┬────────────┬────────────┬────────────┐
│ (index) │      className       │  heapUsed  │  external  │    sum     │
├─────────┼──────────────────────┼────────────┼────────────┼────────────┤
│    0    │     'BitMatrix'      │  '0.77MB'  │  '2.38MB'  │  '3.16MB'  │
│    1    │     'Int8Matrix'     │  '0.87MB'  │ '19.07MB'  │ '19.94MB'  │
│    2    │    'Uint8Matrix'     │  '0.81MB'  │ '19.07MB'  │ '19.89MB'  │
│    3    │ 'Uint8ClampedMatrix' │  '0.76MB'  │ '19.07MB'  │ '19.83MB'  │
│    4    │    'Int16Matrix'     │  '0.68MB'  │ '38.15MB'  │ '38.83MB'  │
│    5    │    'Uint16Matrix'    │  '0.68MB'  │ '38.15MB'  │ '38.83MB'  │
│    6    │    'Int32Matrix'     │  '0.51MB'  │ '76.29MB'  │ '76.80MB'  │
│    7    │    'Uint32Matrix'    │  '0.53MB'  │ '76.29MB'  │ '76.82MB'  │
│    8    │   'Float32Matrix'    │  '0.53MB'  │ '76.29MB'  │ '76.82MB'  │
│    9    │   'Float64Matrix'    │  '0.52MB'  │ '152.59MB' │ '153.11MB' │
│   10    │     'AnyMatrix'      │ '153.23MB' │  '0.00MB'  │ '153.23MB' │
│   11    │ 'AnyMatrixUseObject' │ '159.15MB' │  '0.00MB'  │ '159.15MB' │
└─────────┴──────────────────────┴────────────┴────────────┴────────────┘
7 回复

我比较好奇你这个统计信息是怎么写的

可以分析一个对象的内存占用

@pzzcn 运行信息写到一张表里

@pzzcn node是可以拿到内存占用信息的呀. 项目中 npm run test-memory 命令可以打印这个统计信息, 看下就知道怎么回事了.

更新: v0.4.0 新增 导入导出 打通存储问题;

回到顶部