分享一个 javascript BitMatrix
最近项目需要缓存一批二维码的点阵信息,
最开始用二维数组存,发现太占资源,
后来改用 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' │
└─────────┴──────────────────────┴────────────┴────────────┴────────────┘