summaryrefslogtreecommitdiff
path: root/ext/node/ops/fs.rs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-07-17 05:35:51 -0700
committerGitHub <noreply@github.com>2024-07-17 18:05:51 +0530
commit078def0ff8501bb07f3f286515acd8c6a2181037 (patch)
tree6811ec33761ede11e5213393e7ea3732fd54f292 /ext/node/ops/fs.rs
parent568dd132fb0a47f9afb11bffec341c7481dda75c (diff)
perf(ext/node): optimize fs.exists[Sync] (#24613)
Use `access` on *nix and `GetFileAttributesW` on Windows. [Benchmark](https://paste.divy.work/p/-gq8Ark.js): ``` $ deno run -A bench.mjs # main (568dd) existsSync: 8980.636629ms $ target/release/deno run -A bench.mjs # this PR existsSync: 6448.7604519999995ms $ bun bench.mjs existsSync: 6562.88671ms $ node bench.mjs existsSync: 7740.064653ms ``` Ref https://github.com/denoland/deno/pull/24434#discussion_r1679777912
Diffstat (limited to 'ext/node/ops/fs.rs')
-rw-r--r--ext/node/ops/fs.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/ext/node/ops/fs.rs b/ext/node/ops/fs.rs
index 47b66ee1d..687903325 100644
--- a/ext/node/ops/fs.rs
+++ b/ext/node/ops/fs.rs
@@ -26,7 +26,28 @@ where
.borrow_mut::<P>()
.check_read_with_api_name(&path, Some("node:fs.existsSync()"))?;
let fs = state.borrow::<FileSystemRc>();
- Ok(fs.lstat_sync(&path).is_ok())
+ Ok(fs.exists_sync(&path))
+}
+
+#[op2(async)]
+pub async fn op_node_fs_exists<P>(
+ state: Rc<RefCell<OpState>>,
+ #[string] path: String,
+) -> Result<bool, AnyError>
+where
+ P: NodePermissions + 'static,
+{
+ let path = PathBuf::from(path);
+
+ let fs = {
+ let mut state = state.borrow_mut();
+ state
+ .borrow_mut::<P>()
+ .check_read_with_api_name(&path, Some("node:fs.exists()"))?;
+ state.borrow::<FileSystemRc>().clone()
+ };
+
+ Ok(fs.exists_async(path).await?)
}
#[op2(fast)]