Alokasi memori Go Fiber untuk unggahan file besar berbeda dari Node.js dalam beberapa hal:
1. Alokasi Memori:
- Go Fiber menggunakan perpustakaan Fasthttp untuk menangani permintaan HTTP. Fasthttp dirancang untuk kinerja tinggi dan alokasi memori nol. Namun, ini berarti ia tidak menangani unggahan file besar secara efisien, karena ia memuat seluruh isi permintaan ke dalam memori sebelum memprosesnya.
- Node.js, sebaliknya, menggunakan model I/O non-pemblokiran yang digerakkan oleh peristiwa. Hal ini memungkinkannya menangani unggahan file besar secara lebih efisien dengan mengalirkan data file langsung ke tujuan tanpa memuat seluruh file ke dalam memori.
2. Batas Tubuh:
- Go Fiber memungkinkan Anda menetapkan batas isi untuk mencegah unggahan file besar memakan terlalu banyak memori. Hal ini dapat dilakukan dengan mengatur `BodyLimit` dalam konfigurasi Fiber.
- Node.js juga memiliki konsep serupa yang disebut `http.maxHeaderSize` dan `http.maxBodySize` yang dapat digunakan untuk membatasi ukuran permintaan masuk.
3. Streaming:
- Go Fiber tidak mendukung pengunggahan file streaming secara langsung. Namun, Anda dapat menggunakan pustaka seperti `compress/gzip` untuk mengompresi file masuk dan mengurangi penggunaan memori.
- Node.js mendukung pengunggahan file streaming melalui perpustakaan seperti `multer` dan `express-fileupload`, yang memungkinkan Anda melakukan streaming data file langsung ke tujuan tanpa memuat seluruh file ke dalam memori.
4. Penanganan Kesalahan:
- Go Fiber menyediakan mekanisme penanganan kesalahan yang kuat untuk menangani masalah apa pun yang mungkin timbul selama pengunggahan file.
- Node.js juga menyediakan mekanisme penanganan kesalahan yang kuat, namun menangani kesalahan bisa lebih sulit karena sifatnya yang didorong oleh peristiwa.
5. Kinerja:
- Go Fiber umumnya lebih cepat daripada Node.js karena alokasi memori nol dan kinerja yang dioptimalkan.
- Node.js, di sisi lain, lebih efisien dalam menangani unggahan file besar karena model I/O non-pemblokiran yang digerakkan oleh peristiwa.
Singkatnya, alokasi memori Go Fiber untuk unggahan file besar kurang efisien dibandingkan Node.js karena alokasi memori nol dan kurangnya dukungan bawaan untuk unggahan file streaming. Namun, Go Fiber menyediakan mekanisme penanganan kesalahan yang kuat dan kinerja yang optimal.
Kutipan:[1] https://github.com/gofiber/fiber/issues/272
[2] https://golang.withcodeexample.com/blog/file-upload-handling-golang-fiber-guide/
[3] https://stackoverflow.com/questions/34874511/node-js-is-not-a-good-option-for-file-uploads-and-all-event-loop-based-bahasa
[4] https://www.reddit.com/r/golang/comments/131bq42/need_to_stream_large_files_to_s3_using_go/
[5] https://dev.to/hackmamba/robust-media-upload-with-golang-and-cloudinary-fiber-version-2cmf