mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 04:08:41 +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.
30 lines
636 B
JSON
30 lines
636 B
JSON
{
|
|
"name": "@oxc-parser/binding",
|
|
"private": true,
|
|
"scripts": {
|
|
"build": "napi build --platform --release",
|
|
"test": "node test.mjs"
|
|
},
|
|
"devDependencies": {
|
|
"@napi-rs/cli": "^2.15.2",
|
|
"flatbuffers": "^23.5.26"
|
|
},
|
|
"engines": {
|
|
"node": ">=14.*"
|
|
},
|
|
"packageManager": "pnpm@8.2.0",
|
|
"napi": {
|
|
"name": "parser",
|
|
"triples": {
|
|
"defaults": false,
|
|
"additional": [
|
|
"x86_64-pc-windows-msvc",
|
|
"aarch64-pc-windows-msvc",
|
|
"x86_64-unknown-linux-gnu",
|
|
"aarch64-unknown-linux-gnu",
|
|
"x86_64-apple-darwin",
|
|
"aarch64-apple-darwin"
|
|
]
|
|
}
|
|
}
|
|
}
|