Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

unzipper からの乗り換え検討 #1026

Closed
2 tasks
ties-makimura opened this issue May 28, 2024 · 3 comments
Closed
2 tasks

unzipper からの乗り換え検討 #1026

ties-makimura opened this issue May 28, 2024 · 3 comments
Labels
enhancement 新機能実装またはリクエスト

Comments

@ties-makimura
Copy link

どのような問題を解決する機能追加でしょうか?

unzipper は deprecated な fstream に depend しているので、他のパッケージへの乗り換えを検討するのが良さそうですが、短期的には様子見でよいのではと思います。
参考 ZJONSSON/node-unzipper#261

あなたが望む解決方法について書いてください

乗り換え先は以下も考慮されたものがよい

  • CHiLO-Speech(JSZip)で作成したZIPとの相性
  • 版管理のエクスポート/インポート機能(未実装)なども可能なら考慮

本 issue を close する条件

  • 議論の結論がでたか? (一定期間結論がでないものは、close 対象となりうる)
  • コードに実装された。

追記・備考

  • unzipperが直接の原因か分からないが,ブックインポート機能で,CHiLO-Speechで作成したZIPだと失敗して,ローカルで展開->圧縮しなおすだけで成功するような現象があった。(ただし毎回ではなくたまに発生したり,Node.jsのバージョンを最新にしたら失敗しなくなったりしていた)
  • JSZipはパフォーマンスの点で不安があるらしい去年のコメント
  • 候補に fflate を含めてはという意見もあった
@ties-makimura ties-makimura added the enhancement 新機能実装またはリクエスト label May 28, 2024
@acutus-fujii
Copy link

acutus-fujii commented Jun 6, 2024

2024/6/10 追記:
Compression Streams API は gzip, deflate で圧縮されたファイルを元に戻せますが、zip を解凍する機能は持たないので、下記の提案は撤回して他の方法を探ります。


現在、npm パッケージを使っているコードを、node 標準機能の Compression Streams API で書き換えるのが妥当だと思います。Compression Sterams API は規格としてはあたらしい(2023年)です。機能や性能が問題ないかどうかの事前調査は必要だと考えられます。

  • 現状

    • POST payload として zip ファイル全体をメモリーに取得
    • server/utils/book/importBooksUtil.ts parseJsonFromFile()
      • /tmp/chibichilo-import-xxx/file に zip ファイル全体を書き出す
      • unzipper で unzip しながらファイル毎に書き出す
      • json ファイルを読む, mp4 ファイルを wowza に転送する
  • unzipper (https://github.com/ZJONSSON/node-unzipper/) は js で unzip している

  • Compression Streams API
    https://developer.mozilla.org/ja/docs/Web/API/Compression_Streams_API

    • Baseline 2023 (since May 2023)
    • node.js 18.0.0 で gzip 形式に対応している
    • ブラウザ側ではまだ使わないほうが良さそう

@acutus-fujii
Copy link

2024年7月23日の打ち合わせメモからの転載です。

  • unzip 機能を持つ主なライブラリと週間ダウンロード数

https://www.npmjs.com/package/yauzl 15,926,948
https://www.npmjs.com/package/fflate 4,991,788
https://www.npmjs.com/package/adm-zip 4,966,594
https://www.npmjs.com/package/unzipper 2,880,906

  • 検討

    • yauzl
    • fflate
      • zip, compress などの機能もあり、規模が大きい
      • unzipper と API仕様が大きく異なり、書き換え範囲が大きい
  • unzipper, yauzl のパフォーマンス比較

                  real     user     sys
--------------------------------------------
unzipper vuca.zip 0m0.421s 0m0.183s 0m0.058s
yauzl    vuca.zip 0m0.155s 0m0.082s 0m0.070s
unzipper big.zip  0m0.834s 0m0.612s 0m0.282s
yauzl    big.zip  0m0.760s 0m0.599s 0m0.457s

@ties-makimura
Copy link
Author

#1029 で解消

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement 新機能実装またはリクエスト
Projects
None yet
Development

No branches or pull requests

2 participants