0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

node-fetch use on unzipper

Posted at

Unzipperでrequestを使うかnode-fetchを使うかという問題

経緯

unzipperのopenメソッドを使う場合にrequestを要求される課題がある。
requestに限っているわけではないものの、node-fetchを入れることはできない。
node-fetchを入れても稼働するPRを送って今後改良を追っていくほど余裕はないので
既存のunzipper提供機能の範疇でなんとか使う方法を考えた

課題

次の3つの課題があった。
ECONNRESETがそこそこ頻発する
requestがdeprecatedになって2年が経過している。
制作物の都合上、requestを用いる限りネストが解消されない部分がある

やりたいこと

zipをダウンロードして展開する

deprecateになってしまっているrequestを利用せず、documentにnode-fetchを用いる方法が記載されていないが、bufferを用いる方法は記載されていたため、
bufferを用いたnode-fetchでの代用を試みた。

requestを用いる

    const directoryFromRequest = await unzipper.Open.url( request, zipURL);

node-fetchを用いる

    const fetchZip = await fetch( zipURL )
    const zipBuffer = await res.buffer()
    const directoryFromBuffer = await unzipper.Open.buffer( zipBuffer );

効果

処理速度が1.3倍くらい体感で高速化した。
node-fetchを用いる事により、そこそこ頻発していたECONNRESETは解消した。
asyncによるネストが1段減少した。
ESModuleが使えるようになった。

参考

unzipper https://www.npmjs.com/package/unzipper
request https://www.npmjs.com/package/request
node-fetch https://www.npmjs.com/package/node-fetch

パッケージの責務ではない

今現在、世界中の多くのプロジェクトで使われているrequestの功績は非常に大きく、
ネット上の多くのサンプルも、依存パッケージもrequestを参照していることは多い。

初めて使うパッケージのサンプルにrequestが使われていることがあり、
今回のプロジェクト(2021開始のプロジェクト)でも使ってしまっていた。

開発者に限った話では全くないのだが、何にしても
お前作れるのか?ということを全発言の前頭に置かなければならない。
そうでなければお猿さん♪でしょうか? 11年間も使わせてもらってきた感謝は大きい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?