LZP3(매우 강력한 알고리즘)을 사용하여 JS의 모든 데이터를 압축합니다.

사용 사례 예



https://pixa.pics/ 프로젝트에서 우리는 사람들이 픽셀 아트를 2d 캔버스에 그릴 수 있도록 합니다. 이미지 소스, 실행 취소/다시 실행을 위한 모든 수정 사항을 저장해야 합니다. 변경...) 및 메타데이터가 있는 썸네일, 압축된 블롭을 브라우저에 자동 저장하고 웹 작업자 내에서 매우 빠르며 UI를 동결하지 않습니다.

압축 벤치마크



다음은 원래 패키지( https://github.com/eladkarako/compressjs-flattened )에 구현된 다양한 알고리즘의 대표적인 속도 및 크기입니다. 시간은 내 랩탑의 노드 0.8.22에 있지만 알고리즘 간 비교에 유효해야 합니다.

텍스트 / 테스트



이것은 WikipediaTaoism 프로젝트에서 생성된 HTML 형식의 Simple English wikipediaParsoid 문서입니다.


유형
수준
크기(바이트)
압축 시간(들)
압축 해제 시간(초)


bwtc
9
272997
13.10
1.85

bzip2
9
275087
22.57
1.21

lzp3
-
292978
1.73
1.74

ppm
-
297220
42.05
44.04

bzip2
1
341615
22.63
1.40

bwtc
1
345764
12.34
0.80

디엠씨
-
434182
6.97
9.00

lzjbr
9
491476
3.19
1.92

lzjbr
1
523780
2.76
2.02

lzjb
9
706210
1.02
0.30

lzjb
1
758467
0.66
0.29

컨텍스트1
-
939098
5.20
4.69

펜윅
-
1440645
3.06
3.72

mtf
-
1441763
1.92
3.86

허프만
-
1452055
7.15
6.56

단순한
-
1479143
0.72
2.42

데프섬
-
1491107
3.19
1.46

아니요
-
2130648
0.80
0.92

-
-
2130640
-
-



var func = async function(uint8a_or_obj, mode) {return new Promise(function(resolve, reject){
...
if(mode === "COMPRESS_OBJECT") {
    //  JS -> json_str -> ui8a -> compressed ui8a
    resolve(Uint8Array.from(Lzp3.compressFile(new TextEncoder("utf-8").encode(JSON.stringify(uint8a_or_obj, null, 0)))));

}else if(mode === "DECOMPRESS_UINT8A") {
    // ui8a decompressed -> ui8a -> json_str -> JS
    resolve(JSON.parse(new TextDecoder().decode(Uint8Array.from(Lzp3.decompressFile(uint8a_or_obj)))));

}else {

    reject(null);     
}
})};


실제 구현: https://github.com/pixa-pics/pixa-pics.github.io/blob/main/src/js/utils/lzp3_json.js

var blob = new Blob([uint8a], {type : "application/octet-stream"}); /* ... */
blob.arrayBuffer().then((array_buffer) => {var uint8a = new Uint8Array(array_buffer); /* ... */ });

좋은 웹페이지 즐겨찾기