Go Fiber'in büyük dosya yüklemeleri için bellek ayırması, Node.js'den birkaç açıdan farklıdır:
1. Bellek Tahsisi:
- Go Fiber, HTTP isteklerini işlemek için Fasthttp kitaplığını kullanır. Fasthttp, yüksek performans ve sıfır bellek tahsisi için tasarlanmıştır. Ancak bu, istek gövdesinin tamamını işlemeden önce belleğe yüklediğinden, büyük dosya yüklemelerini verimli bir şekilde işlemediği anlamına gelir.
- Node.js ise olay odaklı, engellemeyen bir G/Ç modeli kullanır. Bu, dosyanın tamamını belleğe yüklemeden dosya verilerini doğrudan hedefe aktararak büyük dosya yüklemelerini daha verimli bir şekilde gerçekleştirmesine olanak tanır.
2. Gövde Sınırı:
- Go Fiber, büyük dosya yüklemelerinin çok fazla bellek tüketmesini önlemek için bir gövde sınırı belirlemenize olanak tanır. Bu, Fiber yapılandırmasında 'BodyLimit' ayarlanarak yapılabilir.
- Node.js ayrıca, gelen isteklerin boyutunu sınırlamak için kullanılabilecek "http.maxHeaderSize" ve "http.maxBodySize" adında benzer bir kavrama sahiptir.
3. Akış:
- Go Fiber, kutudan çıktığı haliyle akışlı dosya yüklemelerini desteklemez. Ancak gelen dosyaları sıkıştırmak ve bellek kullanımını azaltmak için 'compress/gzip' gibi kütüphaneleri kullanabilirsiniz.
- Node.js, "multer" ve "express-fileupload" gibi kitaplıklar aracılığıyla dosya yüklemelerinin akışını destekler; bu, dosyanın tamamını belleğe yüklemeden dosya verilerini doğrudan hedefe aktarmanıza olanak tanır.
4. Hata İşleme:
- Go Fiber, dosya yüklemeleri sırasında ortaya çıkabilecek sorunların üstesinden gelmek için güçlü hata işleme mekanizmaları sağlar.
- Node.js ayrıca güçlü hata işleme mekanizmaları sağlar, ancak olaya dayalı yapısı nedeniyle hataların işlenmesi daha zor olabilir.
5. Performans:
- Go Fiber, sıfır bellek ayırması ve optimize edilmiş performansı nedeniyle genellikle Node.js'den daha hızlıdır.
- Öte yandan Node.js, olaya dayalı, engellemeyen G/Ç modeli sayesinde büyük dosya yüklemelerini yönetmede daha verimlidir.
Özetle, Go Fiber'in büyük dosya yüklemeleri için bellek ayırması, sıfır bellek ayırması ve akışlı dosya yüklemeleri için yerleşik desteğin olmaması nedeniyle Node.js'den daha az verimlidir. Ancak Go Fiber, güçlü hata işleme mekanizmaları ve optimize edilmiş performans sağlar.
Alıntılar:[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-language
[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