perf: replace sync zip crate with async_zip in ZipService
ZipWriter<std::fs::File> performed every write_all() as a blocking write(2) syscall on the Tokio worker thread, sequestering it for 10-100ms per file (0.8-12s for a 100-file ZIP). Replace with async_zip::ZipFileWriter backed by a buffered tokio::fs::File: - All I/O (headers, deflate chunks, central directory) is fully async - 256 KB BufWriter minimises syscall count - Zero Tokio worker blocking during ZIP creation - Streaming per-chunk writes keep RAM O(1) regardless of archive size - Removed dead From<zip::result::ZipError> for DomainError impl - zip crate retained for batch_operations.rs (separate concern)
This commit is contained in:
+2
-1
@@ -8,7 +8,7 @@ default-run = "oxicloud"
|
||||
[dependencies]
|
||||
axum = { version = "0.8.8", features = ["multipart", "http1", "tokio", "macros"] }
|
||||
tokio = { version = "1.49.0", features = ["full"] }
|
||||
tokio-util = { version = "0.7.18", features = ["io", "codec"] }
|
||||
tokio-util = { version = "0.7.18", features = ["io", "codec", "compat"] }
|
||||
tokio-stream = { version = "0.1.18", features = ["fs"] }
|
||||
bytes = "1.11.1"
|
||||
tempfile = "3.25.0"
|
||||
@@ -49,6 +49,7 @@ reqwest = { version = "0.12", default-features = false, features = ["json", "rus
|
||||
base64 = "0.22.1"
|
||||
fs2 = "0.4"
|
||||
rayon = "1.10"
|
||||
async_zip = { version = "0.0.18", features = ["tokio", "deflate"] }
|
||||
|
||||
[features]
|
||||
default = []
|
||||
|
||||
Reference in New Issue
Block a user