Skip to content

Commit 0995fea

Browse files
committed
add even more BLAZINGLY FAST logs
1 parent 9b0af07 commit 0995fea

File tree

3 files changed

+95
-44
lines changed

3 files changed

+95
-44
lines changed

src/client/shared/sourcemaps.ts

Lines changed: 54 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,43 @@ function getEnd(rewrite: Rewrite): number {
3131

3232
const scramtag_ident = "/*scramtag ";
3333

34+
function registerRewrites(buf: Array<number>, tag: string) {
35+
const sourcemap = Uint8Array.from(buf);
36+
const view = new DataView(sourcemap.buffer);
37+
const decoder = new TextDecoder("utf-8");
38+
39+
const rewrites: Rewrite[] = [];
40+
41+
const rewritelen = view.getUint32(0, true);
42+
let cursor = 4;
43+
for (let i = 0; i < rewritelen; i++) {
44+
const type = view.getUint8(cursor) as RewriteType;
45+
cursor += 1;
46+
47+
if (type == RewriteType.Insert) {
48+
const start = view.getUint32(cursor, true);
49+
cursor += 4;
50+
const size = view.getUint32(cursor, true);
51+
cursor += 4;
52+
53+
rewrites.push({ type, start, size });
54+
} else if (type == RewriteType.Replace) {
55+
const start = view.getUint32(cursor, true);
56+
cursor += 4;
57+
const end = view.getUint32(cursor, true);
58+
cursor += 4;
59+
const len = view.getUint32(cursor, true);
60+
cursor += 4;
61+
62+
const str = decoder.decode(sourcemap.subarray(cursor, cursor + len));
63+
64+
rewrites.push({ type, start, end, str });
65+
}
66+
}
67+
68+
sourcemaps[tag] = rewrites;
69+
}
70+
3471
function doUnrewrite(ctx: ProxyCtx) {
3572
let stringified: string = ctx.fn.call(ctx.this);
3673

@@ -112,42 +149,25 @@ export default function (client: ScramjetClient, self: Self) {
112149
globalThis.$scramjet.config.globals.pushsourcemapfn,
113150
{
114151
value: (buf: Array<number>, tag: string) => {
115-
const sourcemap = Uint8Array.from(buf);
116-
const view = new DataView(sourcemap.buffer);
117-
const decoder = new TextDecoder("utf-8");
118-
119-
const rewrites: Rewrite[] = [];
120-
121-
const rewritelen = view.getUint32(0, true);
122-
let cursor = 4;
123-
for (let i = 0; i < rewritelen; i++) {
124-
const type = view.getUint8(cursor) as RewriteType;
125-
cursor += 1;
126-
127-
if (type == RewriteType.Insert) {
128-
const start = view.getUint32(cursor, true);
129-
cursor += 4;
130-
const size = view.getUint32(cursor, true);
131-
cursor += 4;
132-
133-
rewrites.push({ type, start, size });
134-
} else if (type == RewriteType.Replace) {
135-
const start = view.getUint32(cursor, true);
136-
cursor += 4;
137-
const end = view.getUint32(cursor, true);
138-
cursor += 4;
139-
const len = view.getUint32(cursor, true);
140-
cursor += 4;
141-
142-
const str = decoder.decode(
143-
sourcemap.subarray(cursor, cursor + len)
144-
);
145-
146-
rewrites.push({ type, start, end, str });
152+
const before = performance.now();
153+
registerRewrites(buf, tag);
154+
const after = performance.now();
155+
156+
const duration = after - before;
157+
158+
if (flagEnabled("rewriterLogs", new URL(location.href))) {
159+
let timespan: string;
160+
if (duration < 1) {
161+
timespan = "BLAZINGLY FAST";
162+
} else if (duration < 500) {
163+
timespan = "decent speed";
164+
} else {
165+
timespan = "really slow";
147166
}
167+
console.log(
168+
`js rewrite parsing for scramtag ${tag} was ${timespan} (${duration.toFixed(2)}ms)`
169+
);
148170
}
149-
150-
sourcemaps[tag] = rewrites;
151171
},
152172
enumerable: false,
153173
writable: false,

src/shared/rewriters/js.ts

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ Error.stackTraceLimit = 50;
2424

2525
const decoder = new TextDecoder();
2626

27-
function rewriteJsWrapper(
27+
function rewriteJsWasm(
2828
input: string | ArrayBuffer,
2929
source: string | null,
3030
meta: URLMeta,
3131
module: boolean
32-
): string | ArrayBuffer {
32+
): { js: string | ArrayBuffer; map: Uint8Array | null; tag: string } {
3333
initSync({
3434
module: new WebAssembly.Module(self.REAL_WASM),
3535
});
@@ -59,16 +59,18 @@ function rewriteJsWrapper(
5959
console.warn("failed rewriting js for", source, err1, input);
6060
err1.message = `failed rewriting js for "${source}": ${err1.message}`;
6161

62-
return input;
62+
return { js: input, tag: "", map: null };
6363
}
6464
const after = performance.now();
65-
const { js, map, scramtag, errors, duration } = out;
65+
let { js, map, scramtag, errors, duration } = out;
6666

6767
if ((flagEnabled("sourcemaps", meta.base), !globalThis.clients)) {
6868
globalThis[globalThis.$scramjet.config.globals.pushsourcemapfn](
6969
Array.from(map),
7070
scramtag
7171
);
72+
73+
map = null;
7274
}
7375

7476
if (flagEnabled("rewriterLogs", meta.base)) {
@@ -92,10 +94,14 @@ function rewriteJsWrapper(
9294
);
9395
}
9496

95-
return typeof input === "string" ? decoder.decode(js) : js;
97+
return {
98+
js: typeof input === "string" ? decoder.decode(js) : js,
99+
tag: scramtag,
100+
map,
101+
};
96102
}
97103

98-
export function rewriteJs(
104+
function rewriteJsInner(
99105
js: string | ArrayBuffer,
100106
url: string | null,
101107
meta: URLMeta,
@@ -104,10 +110,28 @@ export function rewriteJs(
104110
if (flagEnabled("naiiveRewriter", meta.origin)) {
105111
const text = typeof js === "string" ? js : new TextDecoder().decode(js);
106112

107-
return rewriteJsNaiive(text);
113+
return { js: rewriteJsNaiive(text), tag: "", map: null };
108114
}
109115

110-
return rewriteJsWrapper(js, url, meta, module);
116+
return rewriteJsWasm(js, url, meta, module);
117+
}
118+
119+
export function rewriteJs(
120+
js: string | ArrayBuffer,
121+
url: string | null,
122+
meta: URLMeta,
123+
module = false
124+
) {
125+
return rewriteJsInner(js, url, meta, module).js;
126+
}
127+
128+
export function rewriteJsWithMap(
129+
js: string | ArrayBuffer,
130+
url: string | null,
131+
meta: URLMeta,
132+
module = false
133+
) {
134+
return rewriteJsInner(js, url, meta, module);
111135
}
112136

113137
// 1. does not work with modules

src/worker/fetch.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import {
1616
} from "../shared";
1717

1818
import type { URLMeta } from "../shared/rewriters/url";
19-
import { $scramjet } from "../scramjet";
19+
import { $scramjet, flagEnabled } from "../scramjet";
20+
import { rewriteJsWithMap } from "../shared/rewriters/js";
2021

2122
function newmeta(url: URL): URLMeta {
2223
return {
@@ -360,12 +361,18 @@ async function rewriteBody(
360361
return response.body;
361362
}
362363
case "script":
363-
return rewriteJs(
364+
let { js, tag, map } = rewriteJsWithMap(
364365
await response.arrayBuffer(),
365366
response.finalURL,
366367
meta,
367368
workertype === "module"
368369
);
370+
if (flagEnabled("sourcemaps", meta.base) && map) {
371+
js =
372+
`${globalThis.$scramjet.config.globals.pushsourcemapfn}([${map.join(",")}], "${tag}");` +
373+
js;
374+
}
375+
return js;
369376
case "style":
370377
return rewriteCss(await response.text(), meta);
371378
case "sharedworker":

0 commit comments

Comments
 (0)