Skip to content

Commit 3394392

Browse files
committed
refactor couple of things
1 parent 7e8bca1 commit 3394392

File tree

5 files changed

+68
-68
lines changed

5 files changed

+68
-68
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
node_modules
2+
fixtures

bench_url.js

+35-60
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
"use strict";
22

33
import { bench, run } from "mitata";
4-
import { existsSync, createWriteStream, readFileSync } from "node:fs";
4+
import { existsSync, createWriteStream, readFileSync, mkdirSync } from "node:fs";
55
import axios from "axios";
66

7-
var urls = [
7+
const fixturesFolderPath = new URL('fixtures', import.meta.url).pathname;
8+
const urls = [
89
"https://raw.githubusercontent.com/ada-url/url-various-datasets/main/files/linux_files.txt",
910
"https://raw.githubusercontent.com/ada-url/url-various-datasets/main/others/kasztp.txt",
1011
"https://raw.githubusercontent.com/ada-url/url-various-datasets/main/others/userbait.txt",
@@ -13,10 +14,10 @@ var urls = [
1314
];
1415

1516
function get_filename(url) {
16-
return url.substring(url.lastIndexOf("/") + 1);
17+
return `fixtures/${url.substring(url.lastIndexOf("/") + 1)}`;
1718
}
1819

19-
const downloadFile = async (url) => {
20+
async function downloadFile(url) {
2021
const response = await axios({
2122
method: "GET",
2223
url: url,
@@ -34,67 +35,41 @@ const downloadFile = async (url) => {
3435
reject(err);
3536
});
3637
});
37-
};
38-
39-
async function download(urls) {
40-
const urls_for_download = urls.filter((url) => {
41-
return !existsSync(get_filename(url));
42-
});
43-
var all_promises = urls_for_download.map((url) => downloadFile(url));
44-
return axios.all(all_promises);
4538
}
4639

47-
await download(urls);
48-
49-
async function download_and_run(filename, url) {
50-
if (existsSync(filename)) {
51-
run_bench(filename);
52-
} else {
53-
get(url, (res) => {
54-
const file = createWriteStream(filename);
55-
res.pipe(file);
56-
file.on("error", (err) => {
57-
console.error(err);
58-
});
59-
file.on("finish", async () => {
60-
file.close();
61-
run_bench(filename);
62-
});
63-
});
64-
}
40+
if (!existsSync(fixturesFolderPath)) {
41+
mkdirSync(fixturesFolderPath)
6542
}
66-
67-
var length = 0;
68-
var bad_url = 0;
69-
var good_url = 0;
70-
71-
async function run_bench(urls) {
72-
for (let url of urls) {
73-
const filename = get_filename(url);
74-
const file_content = readFileSync(filename, "utf-8");
75-
const lines = file_content.split("\n");
76-
77-
bench(filename, () => {
78-
for (var i = 0; i < lines.length; i++) {
79-
try {
80-
length += new URL(lines[i]).href.length;
81-
good_url++;
82-
} catch (e) {
83-
bad_url++;
84-
}
43+
const urls_for_download = urls.filter(url => !existsSync(get_filename(url)))
44+
const all_promises = urls_for_download.map((url) => downloadFile(url));
45+
await axios.all(all_promises);
46+
47+
let length = 0;
48+
let bad_url = 0;
49+
let good_url = 0;
50+
51+
for (let url of urls) {
52+
const filename = get_filename(url);
53+
const file_content = readFileSync(filename, "utf-8");
54+
const lines = file_content.split("\n");
55+
56+
bench(filename, () => {
57+
for (let i = 0; i < lines.length; i++) {
58+
try {
59+
length += new URL(lines[i]).href.length;
60+
good_url++;
61+
} catch (e) {
62+
bad_url++;
8563
}
86-
return length;
87-
});
88-
}
89-
90-
await run();
64+
}
65+
return length;
66+
});
9167
}
9268

93-
await run_bench(urls);
69+
await run();
9470

95-
console.log("Average URL size: " + Math.round(length / good_url) + " bytes");
96-
console.log(
97-
"Ratio of bad URLs: " +
98-
Math.round((bad_url / (good_url + bad_url)) * 10000) / 100.0 +
99-
"%"
71+
console.info("Average URL size: " + Math.round(length / good_url) + " bytes");
72+
console.info(
73+
"Ratio of bad URLs:",
74+
`${Math.round((bad_url / (good_url + bad_url)) * 10000) / 100}%`,
10075
);

package-lock.json

+13-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
{
2+
"name": "@ada-url/js-url-benchmark",
3+
"version": "0.1.0",
4+
"description": "URL benchmarks in JavaScript",
25
"type": "module",
36
"dependencies": {
47
"axios": "^1.3.6",
58
"mitata": "^0.1.6"
9+
},
10+
"devDependencies": {
11+
"@types/node": "^18.16.0"
612
}
713
}

script.sh

+12-7
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,27 @@ if ! $(command -v deno &> /dev/null); then
1919
fi
2020

2121
for version in 16 17 18.15 18.16 20; do
22-
nvm install $version
22+
nvm install $version --silent
2323
done
24-
npm install
24+
npm install --ignore-scripts --no-audit --no-fund --silent
2525
current_node_version=$(nvm current)
2626

2727
function cleanup {
28-
echo "Restauring node version to $current_node_version"
28+
echo "Restoring node version to $current_node_version"
2929
nvm use $current_node_version
3030
}
3131

3232
trap cleanup EXIT
33+
34+
# Clear terminal output
35+
printf "\033c"
36+
3337
deno run -A bench_url.js
38+
echo ""
3439
bun run bench_url.js
40+
echo ""
3541
for version in 16 17 18.15 18.16 20; do
36-
nvm use $version
42+
nvm use $version
3743
node bench_url.js
38-
done
39-
40-
44+
echo ""
45+
done

0 commit comments

Comments
 (0)