A alocação de memória do Go Fiber para uploads de arquivos grandes é diferente do Node.js de várias maneiras:
1. Alocação de memória:
- Go Fiber usa a biblioteca Fasthttp para lidar com solicitações HTTP. Fasthttp foi projetado para alto desempenho e zero alocação de memória. No entanto, isso significa que ele não lida com uploads de arquivos grandes de forma eficiente, pois carrega todo o corpo da solicitação na memória antes de processá-lo.
- O Node.js, por outro lado, usa um modelo de E/S sem bloqueio e orientado a eventos. Isso permite lidar com uploads de arquivos grandes com mais eficiência, transmitindo os dados do arquivo diretamente para o destino, sem carregar o arquivo inteiro na memória.
2. Limite Corporal:
- Go Fiber permite definir um limite de corpo para evitar que uploads de arquivos grandes consumam muita memória. Isso pode ser feito definindo `BodyLimit` na configuração do Fiber.
- Node.js também possui um conceito semelhante chamado `http.maxHeaderSize` e `http.maxBodySize` que pode ser usado para limitar o tamanho das solicitações recebidas.
3. Transmissão:
- Go Fiber não suporta uploads de arquivos por streaming prontos para uso. No entanto, você pode usar bibliotecas como `compress/gzip` para compactar os arquivos recebidos e reduzir o uso de memória.
- Node.js suporta streaming de uploads de arquivos por meio de bibliotecas como `multer` e `express-fileupload`, que permitem transmitir os dados do arquivo diretamente para o destino sem carregar o arquivo inteiro na memória.
4. Tratamento de erros:
- Go Fiber fornece mecanismos robustos de tratamento de erros para lidar com quaisquer problemas que possam surgir durante o upload de arquivos.
- O Node.js também fornece mecanismos robustos de tratamento de erros, mas pode ser mais desafiador lidar com erros devido à sua natureza orientada a eventos.
5. Desempenho:
- Go Fiber é geralmente mais rápido que Node.js devido à sua alocação zero de memória e desempenho otimizado.
- O Node.js, por outro lado, é mais eficiente no tratamento de uploads de arquivos grandes devido ao seu modelo de E/S sem bloqueio e orientado a eventos.
Em resumo, a alocação de memória do Go Fiber para uploads de arquivos grandes é menos eficiente do que o Node.js devido à sua alocação zero de memória e à falta de suporte integrado para streaming de uploads de arquivos. No entanto, Go Fiber fornece mecanismos robustos de tratamento de erros e desempenho otimizado.
Citações:[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-linguagem
[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