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. O FASTHTTP foi projetado para alocação de memória de alto desempenho e zero. No entanto, isso significa que ele não lida com upload de arquivos grandes com eficiência, 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 acionado por eventos. Isso permite lidar com o upload 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. Bodylimit:
- GO Fiber permite definir um limite corporal para impedir que grandes uploads de arquivos consumam muita memória. Isso pode ser feito definindo o `Bodylimit` na configuração de fibra.
- O 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. Streaming:
- O GO Fiber não suporta uploads de arquivo de streaming provenientes da caixa. No entanto, você pode usar bibliotecas como `compact/gzip` para comprimir os arquivos de entrada e reduzir o uso da memória.
- Node.js suporta uploads de arquivo de streaming 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. Manuseio de erros:
- O GO Fiber fornece mecanismos robustos de manuseio de erros para lidar com quaisquer problemas que possam surgir durante os uploads de arquivo.
- O Node.js também fornece mecanismos robustos de manuseio de erros, mas pode ser mais desafiador lidar com erros devido à sua natureza orientada a eventos.
5. Desempenho:
- O GO Fiber é geralmente mais rápido que o Node.js devido à sua alocação de memória zero e desempenho otimizado.
-O Node.js, por outro lado, é mais eficiente no manuseio de grandes uploads de arquivos devido ao seu modelo de E/S sem bloqueio e acionado por eventos.
Em resumo, a alocação de memória do Go Fiber para uploads de arquivos grandes é menos eficiente que o Node.js devido à sua alocação de memória zero e falta de suporte interno para o fluxo de arquivos de streaming. No entanto, o GO Fiber fornece mecanismos robustos de manuseio 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 baseado em linguagem
[4] https://www.reddit.com/r/golang/comments/131bq42/need_to_stream_large_files_to_s3_using_go/go
[5] https://dev.to/hackmamba/robust-media-upload-with-golang-and-cloudinary-fiber-version-2cmf