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年間も使わせてもらってきた感謝は大きい。