Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions benchmark/grapheme/perf-porffor.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import * as path from 'node:path';
import { build } from 'esbuild';
import { $ } from 'zx';

let baseDir = import.meta.dirname;

let libs = [
['unicode-segmenter/grapheme', 'perf-porffor/unicode-segmenter.js'],
['graphemer', 'perf-porffor/graphemer.js'],
['grapheme-splitter', 'perf-porffor/grapheme-splitter.js'],
];

let benches = [];

for (let lib of libs) {
let libName = lib[0];
let libEntry = path.join(baseDir, lib[1]);

let bundleEntry = libEntry.replace(/\.js$/, '.bundle.js');

await build({
write: true,
bundle: true,
format: 'esm',
entryPoints: [libEntry],
outfile: bundleEntry,
});

benches.push({
libName,
libEntry,
bundleEntry,
});
}

console.log('\nExecuting Porffor benchmark...\n');

for (let bench of benches) {
console.log(`--- ${bench.libName} ---\n`);
await $({ stdio: 'inherit' })`yarn porf ${bench.bundleEntry}`;
}
26 changes: 26 additions & 0 deletions benchmark/grapheme/perf-porffor/grapheme-splitter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { inputs, simpleBench } from '../../_simple-bench.js';

import { GraphemeSplitter } from '../bundle-entries/grapheme-splitter.js';
let graphemeSplitter = new (GraphemeSplitter.default || GraphemeSplitter)();

{
let result = simpleBench(1000, () => {
void [...graphemeSplitter.iterateGraphemes(inputs.small)];
});

console.log(`grapheme-splitter (small input)`);
console.log(`samples: ${result.samples}`);
console.log(`duration (avg): ${result.avgDuration}`);
console.log();
}

{
let result = simpleBench(1000, () => {
void [...graphemeSplitter.iterateGraphemes(inputs.medium)];
});

console.log(`grapheme-splitter (medium input)`);
console.log(`samples: ${result.samples}`);
console.log(`duration (avg): ${result.avgDuration}`);
console.log();
}
27 changes: 27 additions & 0 deletions benchmark/grapheme/perf-porffor/graphemer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { inputs, simpleBench } from '../../_simple-bench.js';

import { Graphemer } from '../bundle-entries/graphemer.js';
let graphemer = new (Graphemer.default || Graphemer)();

{
let result = simpleBench(1000, () => {
void [...graphemer.iterateGraphemes(inputs.small)];
});

console.log(`graphemer (small input)`);
console.log(`samples: ${result.samples}`);
console.log(`duration (avg): ${result.avgDuration}`);
console.log();
}


{
let result = simpleBench(1000, () => {
void [...graphemer.iterateGraphemes(inputs.medium)];
});

console.log(`graphemer (medium input)`);
console.log(`samples: ${result.samples}`);
console.log(`duration (avg): ${result.avgDuration}`);
console.log();
}
25 changes: 25 additions & 0 deletions benchmark/grapheme/perf-porffor/unicode-segmenter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { inputs, simpleBench } from '../../_simple-bench.js';

import { graphemeSegments } from '../bundle-entries/unicode-segmenter.js';

{
let result = simpleBench(10000, () => {
void [...graphemeSegments(inputs.small)];
});

console.log(`unicode-segmenter/grapheme (small input)`);
console.log(`samples: ${result.samples}`);
console.log(`duration (avg): ${result.avgDuration}`);
console.log();
}

{
let result = simpleBench(10000, () => {
void [...graphemeSegments(inputs.medium)];
});

console.log(`unicode-segmenter/grapheme (medium input)`);
console.log(`samples: ${result.samples}`);
console.log(`medium input (avg): ${result.avgDuration}`);
console.log();
}
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@
"perf:grapheme": "node --expose-gc benchmark/grapheme/perf.js",
"perf:grapheme:browser": "vite -c benchmark/grapheme/vite.config.js",
"perf:grapheme:hermes": "node benchmark/grapheme/perf-hermes.js",
"perf:grapheme:quickjs": "node benchmark/grapheme/perf-quickjs.js"
"perf:grapheme:quickjs": "node benchmark/grapheme/perf-quickjs.js",
"perf:grapheme:porffor": "node benchmark/grapheme/perf-porffor"
},
"alias": {
"process": false
Expand All @@ -131,6 +132,7 @@
"metro": "^0.82.0",
"mitata": "^1.0.34",
"os-browserify": "^0.3.0",
"porffor": "^0.56.0",
"pretty-bytes": "^6.1.1",
"rimraf": "^6.0.1",
"typescript": "^5.7.3",
Expand Down
63 changes: 58 additions & 5 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ __metadata:
languageName: node
linkType: hard

"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.9":
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.9":
version: 7.26.9
resolution: "@babel/parser@npm:7.26.9"
dependencies:
Expand Down Expand Up @@ -1872,12 +1872,12 @@ __metadata:
languageName: node
linkType: hard

"acorn@npm:^8.4.0, acorn@npm:^8.8.2":
version: 8.14.0
resolution: "acorn@npm:8.14.0"
"acorn@npm:^8.14.0, acorn@npm:^8.4.0, acorn@npm:^8.8.2":
version: 8.14.1
resolution: "acorn@npm:8.14.1"
bin:
acorn: bin/acorn
checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7
checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123
languageName: node
linkType: hard

Expand Down Expand Up @@ -2932,6 +2932,13 @@ __metadata:
languageName: node
linkType: hard

"hermes-estree@npm:0.18.2":
version: 0.18.2
resolution: "hermes-estree@npm:0.18.2"
checksum: 10c0/6f3f53b8c9b48d75e682644eff1a35934d755df5532092c0248e1e59c305e55fceffc2396ac65377585ddeacc17cd7a3f0d2264565350661e13aa00a7c70b7d6
languageName: node
linkType: hard

"hermes-estree@npm:0.25.1":
version: 0.25.1
resolution: "hermes-estree@npm:0.25.1"
Expand All @@ -2948,6 +2955,15 @@ __metadata:
languageName: node
linkType: hard

"hermes-parser@npm:^0.18.2":
version: 0.18.2
resolution: "hermes-parser@npm:0.18.2"
dependencies:
hermes-estree: "npm:0.18.2"
checksum: 10c0/d06f79064448cc9240d00115083a9f0a795078b493f275b2bfe39ead0039dc7e6f13c1f8bc0027c1293779269212e008402365df59a9f2fdaa5e45fa4a515818
languageName: node
linkType: hard

"http-cache-semantics@npm:^4.1.1":
version: 4.1.1
resolution: "http-cache-semantics@npm:4.1.1"
Expand Down Expand Up @@ -3533,6 +3549,13 @@ __metadata:
languageName: node
linkType: hard

"meriyah@npm:^4.3.9":
version: 4.5.0
resolution: "meriyah@npm:4.5.0"
checksum: 10c0/184c9618a692d9a093c44d1fd8da66ec45035a5dd82574525560209356b200d7106155ad9773deaeaece564d250369fc6d2a4f9e4913221b2c145b3db1aac308
languageName: node
linkType: hard

"metro-babel-transformer@npm:0.82.0":
version: 0.82.0
resolution: "metro-babel-transformer@npm:0.82.0"
Expand Down Expand Up @@ -3988,6 +4011,13 @@ __metadata:
languageName: node
linkType: hard

"node-repl-polyfill@github:CanadaHonk/node-repl-polyfill":
version: 0.1.1
resolution: "node-repl-polyfill@https://github.com/CanadaHonk/node-repl-polyfill.git#commit=8d8a080a72971fefd822f41463d569a680632e3d"
checksum: 10c0/b559512406b40d27580819350c2c298090de4387e66955e9e4425bd86546d2aa8f992d5b9089bc0546e1e5502051e1e036dbf3d159af347caae81be122be3446
languageName: node
linkType: hard

"nopt@npm:^7.0.0":
version: 7.2.0
resolution: "nopt@npm:7.2.0"
Expand Down Expand Up @@ -4243,6 +4273,28 @@ __metadata:
languageName: node
linkType: hard

"porffor@npm:^0.56.0":
version: 0.56.0
resolution: "porffor@npm:0.56.0"
dependencies:
"@babel/parser": "npm:^7.24.4"
acorn: "npm:^8.14.0"
hermes-parser: "npm:^0.18.2"
meriyah: "npm:^4.3.9"
node-repl-polyfill: "github:CanadaHonk/node-repl-polyfill"
dependenciesMeta:
"@babel/parser":
optional: true
hermes-parser:
optional: true
meriyah:
optional: true
bin:
porf: runner/index.js
checksum: 10c0/6ccc4aa560e27fb8243dd07f5688fe2c992437923916a2cd1c0dfd29cbedbd5b1fbd2e7351efd7829f51eb1a17afd1961a4d2ce4199b8859d291976cd53f5151
languageName: node
linkType: hard

"postcss@npm:^8.5.3":
version: 8.5.3
resolution: "postcss@npm:8.5.3"
Expand Down Expand Up @@ -5020,6 +5072,7 @@ __metadata:
metro: "npm:^0.82.0"
mitata: "npm:^1.0.34"
os-browserify: "npm:^0.3.0"
porffor: "npm:^0.56.0"
pretty-bytes: "npm:^6.1.1"
rimraf: "npm:^6.0.1"
typescript: "npm:^5.7.3"
Expand Down
Loading