Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Go Fiberのメモリ割り当ては、大きなファイルアップロードのnode.jsと比較してどうですか


Go Fiberのメモリ割り当ては、大きなファイルアップロードのnode.jsと比較してどうですか


大規模なファイルアップロードのファイバーのメモリ割り当ては、いくつかの方法でnode.jsとは異なります。

1。メモリの割り当て:
-goファイバーは、httpリクエストを処理するためにfasttttpライブラリを使用します。 fasttttpは、高性能およびゼロメモリ割り当てのために設計されています。ただし、これは、処理する前にリクエスト本体全体をメモリにロードするため、大きなファイルのアップロードを効率的に処理しないことを意味します。
-node.jsは、一方、イベント駆動型の非ブロッキングI/Oモデルを使用します。これにより、ファイル全体をメモリにロードせずにファイルデータを宛先に直接ストリーミングすることにより、大きなファイルをより効率的にアップロードできます。

2。Bodylimit:
-Goファイバーを使用すると、ボディの制限を設定して、大きなファイルのアップロードがメモリを消費しすぎないようにします。これは、ファイバー構成に「BodyLimit」を設定することで実行できます。
-node.jsには、着信要求のサイズを制限するために使用できる「http.maxheadersize」と「http.maxbodysize」と呼ばれる同様の概念もあります。

3。ストリーミング:
-Goファイバーは、ストリーミングファイルのアップロードをボックスからサポートしていません。ただし、「Compress/GZIP」などのライブラリを使用して、着信ファイルを圧縮し、メモリの使用量を削減できます。
-node.jsは、「Multer」や「Express-Fileupload」などのライブラリを介したストリーミングファイルのアップロードをサポートしています。これにより、ファイル全体をメモリにロードせずにファイルデータを宛先に直接ストリーミングできます。

4。エラー処理:
-Goファイバーは、ファイルのアップロード中に発生する可能性のある問題を処理するための堅牢なエラー処理メカニズムを提供します。
-Node.jsは堅牢なエラー処理メカニズムも提供しますが、イベント駆動型の性質のためにエラーを処理する方が難しい場合があります。

5。パフォーマンス:
-Goファイバーは、メモリの割り当てゼロと最適化されたパフォーマンスにより、一般にNode.jsよりも高速です。
一方、Node.jsは、イベント駆動型の非ブロッキングI/Oモデルにより、大きなファイルのアップロードを処理する方が効率的です。

要約すると、GO Fiberの大きなファイルアップロードのメモリ割り当ては、メモリの割り当てがゼロであり、ストリーミングファイルのアップロードのサポートが組み込まれていないため、node.jsよりも効率が低くなります。ただし、GOファイバーは、堅牢なエラー処理メカニズムと最適化されたパフォーマンスを提供します。

引用:
[1] https://github.com/gofiber/fiber/issues/272
[2] https://golang.withcodeexample.com/blog/file-upload handling-golang-fiberguide/
[3] https://stackoverflow.com/questions/34874511/node-js-is-not-a-good-option-for-file-uploads and-all-event-loopベースの言語
[4] https://www.reddit.com/r/golang/comments/131bq42/need_to_stream_large_files_s3_using_go/
[5] https://dev.to/hackmamba/robust-media-upload-with-cloudinary-fiber-version-2cmf