大型文件上传的GO Fiber的内存分配与Node.js不同:
1。内存分配:
- GO Fiber使用Fasthttp库来处理HTTP请求。 FasthTTP专为高性能和零内存分配而设计。但是,这意味着它不会有效地处理大型文件,因为它在处理之前将整个请求主体加载到内存中。
- 另一方面,node.js使用事件驱动的,非块I/O模型。这使其可以通过将文件数据直接流到目的地而无需将整个文件加载到内存中,从而更有效地处理大型文件。
2。Bodylimit:
- GO Fiber允许您设置身体限制,以防止大型文件上传消耗过多的内存。这可以通过在光纤配置中设置“ BodyLimit”来完成。
-node.js还具有一个类似的概念,称为“ http.maxheadersize”和“ http.maxbodysize”,可用于限制传入请求的大小。
3。流媒体:
- GO Fiber不支持开箱即用的流文件上传。但是,您可以使用``Compress/gzip''等库来压缩传入文件并减少内存使用量。
-node.js支持通过``multer'''and express-fileupload'的库上的流文件上传,它们允许您直接将文件数据流传输到目标而不将整个文件加载到内存中。
4。错误处理:
- GO Fiber提供了可靠的错误处理机制,以处理文件上传期间可能出现的任何问题。
-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处理 - golang-fiber-guide/
[3] https://stackoverflow.com/questions/34874511/node-js-is-is-not-a-good-agood-option-for-file-uploads--uploads---uploads-------------- and-all-event-language
[4] https://www.reddit.com/r/golang/comments/131bq42/need_to_to_stream_large_files_files_to_to_s3_using_using_go/
[5] https://dev.to/hackmamba/robust-media-upload-with-with-golang-and-cludinary-fiber-version-version-2CMF