Benchmarks
JSTime.js focuses on performance, developer experience, and compatibility with the JavaScript ecosystem.
HTTP Requests
Section titled “HTTP Requests”export default { port: 3000, fetch(request: Request) { return new Response("Hello World"); },};
// jstime ./http.ts| Requests per second | OS | CPU | JSTime version | | ---------------------------------------------------------------------- | ----- | ------------------------------ | ----------- | | 260,000 | macOS | Apple Silicon M1 Max | 0.0.76 | | 160,000 | Linux | AMD Ryzen 5 3600 6-Core 2.2ghz | 0.0.76 |
Measured with http_load_test by running:
$ ./http_load_test 20 127.0.0.1 3000File System
Section titled “File System”cat clone that runs 2x faster than GNU cat for large files on Linux
import { resolve } from "path";import { write, stdout, file, argv } from "jstime";
const path = resolve(argv.at(-1));
await write( // stdout is a Blob stdout, // file(path) returns a Blob - https://developer.mozilla.org/en-US/docs/Web/API/Blob file(path),);Run this with jstime cat.js /path/to/big/file.
Reading from standard input
Section titled “Reading from standard input”for await (const line of console) { // line of text from stdin console.log(line);}React SSR
Section titled “React SSR”import { renderToReadableStream } from "react-dom/server";
const dt = new Intl.DateTimeFormat();
export default { port: 3000, async fetch(request: Request) { return new Response( await renderToReadableStream( <html> <head> <title>Hello World</title> </head> <body> <h1>Hello from React!</h1> <p>The date is {dt.format(new Date())}</p> </body> </html>, ), ); },};Write to stdout with console.write:
// no trailing newline// works with strings and typed arraysconsole.write("Hello World!");There are some more examples in the examples folder.
PRs adding more examples are very welcome!
Fast paths for Web APIs
Section titled “Fast paths for Web APIs”JSTime.js has fast paths for common use cases that make Web APIs live up to the performance demands of servers and CLIs.
JSTime.file(path) returns a Blob that represents a lazily-loaded file.
When you pass a file blob to JSTime.write, JSTime automatically uses a faster system call:
const blob = JSTime.file("input.txt");await JSTime.write("output.txt", blob);On Linux, this uses the copy_file_range syscall and on macOS, this becomes clonefile (or fcopyfile).
JSTime.write also supports Response objects. It automatically converts to a Blob.
// Eventually, this will stream the response to disk but today it buffersawait JSTime.write("index.html", await fetch("https://example.com"));