mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 20:32:10 +00:00
Hi! I have created a proof of concept of improving using oxc in JavaScript. The method is not polished but it provides valuable insights for future direction! Feel free to close~ It is for reference only :) # Context This is a proof of concept implementation of passing binary AST to JavaScript. JavaScript can selectively read flexbuffers-based AST nodes on demand to avoid the deserialization toll. More context [here](https://dev.to/herrington_darkholme/benchmark-typescript-parsers-demystify-rust-tooling-performance-2go8). # Changes * Add a `parseSyncBuffer` napi method to return a binary AST from Rust to JavaScript. The AST is in flexbuffer format. * Add a `test_buffer.js` to test usage of flexbuffers in JavaScript. It is in cjs format because flexbuffers does not support ESM :/ # Result Some preliminary results, for reference only. ``` ~ node test_buffer.js testJSON: 4.043s testBuffer: 2.395s ``` Buffer based API is 100% faster than JSON. # Future Ideas * Flexbuffers itself is slow. A better binary protocol is desired! * Using binary reader to traverse AST is undesirable. A proxy-based API to emulate object behavior will be nice.
42 lines
1 KiB
TOML
42 lines
1 KiB
TOML
[package]
|
|
name = "oxc_napi_parser"
|
|
version = "0.0.0"
|
|
publish = false
|
|
authors.workspace = true
|
|
description.workspace = true
|
|
edition.workspace = true
|
|
homepage.workspace = true
|
|
keywords.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
rust-version.workspace = true
|
|
categories.workspace = true
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[lib]
|
|
crate-type = ["cdylib"]
|
|
test = false
|
|
doctest = false
|
|
|
|
[dependencies]
|
|
oxc_allocator = { workspace = true }
|
|
oxc_parser = { workspace = true }
|
|
oxc_ast = { workspace = true, features = ["serde"] }
|
|
oxc_span = { workspace = true }
|
|
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
flexbuffers = { version = "2.0.0" }
|
|
miette = { workspace = true, features = ["fancy-no-backtrace"] }
|
|
|
|
tokio = { workspace = true }
|
|
napi = { version = "2", features = ["serde-json", "async"] }
|
|
napi-derive = { version = "2" }
|
|
|
|
[build-dependencies]
|
|
napi-build = "2"
|
|
|
|
[package.metadata.cargo-machete]
|
|
ignored = ["napi"]
|