From ccf456357366f488d902232faf495d09b246a130 Mon Sep 17 00:00:00 2001 From: Martin Nordholts Date: Mon, 26 Jul 2021 12:59:39 +0200 Subject: [PATCH] Make loading of cached assets closer in performance to integrated assets Using BufReader makes sense for large files, but assets are never large enough to require buffering. It is significantly faster to load the file contents in one go, so let's do that instead. Closes #1753 --- CHANGELOG.md | 2 ++ src/assets.rs | 10 ++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e14ba84f..79481d87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ ## Other +- Load cached assets as fast as integrated assets, see #1753 (@Enselic) + ## Syntaxes diff --git a/src/assets.rs b/src/assets.rs index 3c125316..d9f4420d 100644 --- a/src/assets.rs +++ b/src/assets.rs @@ -1,7 +1,6 @@ use std::collections::BTreeMap; use std::ffi::OsStr; -use std::fs::{self, File}; -use std::io::BufReader; +use std::fs; use std::path::Path; use syntect::dumps::{dump_to_file, from_binary, from_reader}; @@ -298,15 +297,14 @@ fn asset_to_cache(asset: &T, path: &Path, description: &str } fn asset_from_cache(path: &Path, description: &str) -> Result { - let asset_file = File::open(&path).chain_err(|| { + let contents = fs::read(path).chain_err(|| { format!( "Could not load cached {} '{}'", description, path.to_string_lossy() ) })?; - from_reader(BufReader::new(asset_file)) - .chain_err(|| format!("Could not parse cached {}", description)) + from_reader(&contents[..]).chain_err(|| format!("Could not parse cached {}", description)) } #[cfg(test)] @@ -316,7 +314,7 @@ mod tests { use std::ffi::OsStr; use std::fs::File; - use std::io::Write; + use std::io::{BufReader, Write}; use tempfile::TempDir; use crate::input::Input;