add even more BLAZINGLY FAST logs

This commit is contained in:
Toshit Chawda 2025-03-06 20:47:11 -08:00
parent 9b0af07516
commit 0995fea192
No known key found for this signature in database
GPG key ID: 91480ED99E2B3D9D
3 changed files with 93 additions and 42 deletions

View file

@ -31,6 +31,43 @@ function getEnd(rewrite: Rewrite): number {
const scramtag_ident = "/*scramtag "; const scramtag_ident = "/*scramtag ";
function registerRewrites(buf: Array<number>, tag: string) {
const sourcemap = Uint8Array.from(buf);
const view = new DataView(sourcemap.buffer);
const decoder = new TextDecoder("utf-8");
const rewrites: Rewrite[] = [];
const rewritelen = view.getUint32(0, true);
let cursor = 4;
for (let i = 0; i < rewritelen; i++) {
const type = view.getUint8(cursor) as RewriteType;
cursor += 1;
if (type == RewriteType.Insert) {
const start = view.getUint32(cursor, true);
cursor += 4;
const size = view.getUint32(cursor, true);
cursor += 4;
rewrites.push({ type, start, size });
} else if (type == RewriteType.Replace) {
const start = view.getUint32(cursor, true);
cursor += 4;
const end = view.getUint32(cursor, true);
cursor += 4;
const len = view.getUint32(cursor, true);
cursor += 4;
const str = decoder.decode(sourcemap.subarray(cursor, cursor + len));
rewrites.push({ type, start, end, str });
}
}
sourcemaps[tag] = rewrites;
}
function doUnrewrite(ctx: ProxyCtx) { function doUnrewrite(ctx: ProxyCtx) {
let stringified: string = ctx.fn.call(ctx.this); let stringified: string = ctx.fn.call(ctx.this);
@ -112,42 +149,25 @@ export default function (client: ScramjetClient, self: Self) {
globalThis.$scramjet.config.globals.pushsourcemapfn, globalThis.$scramjet.config.globals.pushsourcemapfn,
{ {
value: (buf: Array<number>, tag: string) => { value: (buf: Array<number>, tag: string) => {
const sourcemap = Uint8Array.from(buf); const before = performance.now();
const view = new DataView(sourcemap.buffer); registerRewrites(buf, tag);
const decoder = new TextDecoder("utf-8"); const after = performance.now();
const rewrites: Rewrite[] = []; const duration = after - before;
const rewritelen = view.getUint32(0, true); if (flagEnabled("rewriterLogs", new URL(location.href))) {
let cursor = 4; let timespan: string;
for (let i = 0; i < rewritelen; i++) { if (duration < 1) {
const type = view.getUint8(cursor) as RewriteType; timespan = "BLAZINGLY FAST";
cursor += 1; } else if (duration < 500) {
timespan = "decent speed";
if (type == RewriteType.Insert) { } else {
const start = view.getUint32(cursor, true); timespan = "really slow";
cursor += 4; }
const size = view.getUint32(cursor, true); console.log(
cursor += 4; `js rewrite parsing for scramtag ${tag} was ${timespan} (${duration.toFixed(2)}ms)`
rewrites.push({ type, start, size });
} else if (type == RewriteType.Replace) {
const start = view.getUint32(cursor, true);
cursor += 4;
const end = view.getUint32(cursor, true);
cursor += 4;
const len = view.getUint32(cursor, true);
cursor += 4;
const str = decoder.decode(
sourcemap.subarray(cursor, cursor + len)
); );
rewrites.push({ type, start, end, str });
} }
}
sourcemaps[tag] = rewrites;
}, },
enumerable: false, enumerable: false,
writable: false, writable: false,

View file

@ -24,12 +24,12 @@ Error.stackTraceLimit = 50;
const decoder = new TextDecoder(); const decoder = new TextDecoder();
function rewriteJsWrapper( function rewriteJsWasm(
input: string | ArrayBuffer, input: string | ArrayBuffer,
source: string | null, source: string | null,
meta: URLMeta, meta: URLMeta,
module: boolean module: boolean
): string | ArrayBuffer { ): { js: string | ArrayBuffer; map: Uint8Array | null; tag: string } {
initSync({ initSync({
module: new WebAssembly.Module(self.REAL_WASM), module: new WebAssembly.Module(self.REAL_WASM),
}); });
@ -59,16 +59,18 @@ function rewriteJsWrapper(
console.warn("failed rewriting js for", source, err1, input); console.warn("failed rewriting js for", source, err1, input);
err1.message = `failed rewriting js for "${source}": ${err1.message}`; err1.message = `failed rewriting js for "${source}": ${err1.message}`;
return input; return { js: input, tag: "", map: null };
} }
const after = performance.now(); const after = performance.now();
const { js, map, scramtag, errors, duration } = out; let { js, map, scramtag, errors, duration } = out;
if ((flagEnabled("sourcemaps", meta.base), !globalThis.clients)) { if ((flagEnabled("sourcemaps", meta.base), !globalThis.clients)) {
globalThis[globalThis.$scramjet.config.globals.pushsourcemapfn]( globalThis[globalThis.$scramjet.config.globals.pushsourcemapfn](
Array.from(map), Array.from(map),
scramtag scramtag
); );
map = null;
} }
if (flagEnabled("rewriterLogs", meta.base)) { if (flagEnabled("rewriterLogs", meta.base)) {
@ -92,10 +94,14 @@ function rewriteJsWrapper(
); );
} }
return typeof input === "string" ? decoder.decode(js) : js; return {
js: typeof input === "string" ? decoder.decode(js) : js,
tag: scramtag,
map,
};
} }
export function rewriteJs( function rewriteJsInner(
js: string | ArrayBuffer, js: string | ArrayBuffer,
url: string | null, url: string | null,
meta: URLMeta, meta: URLMeta,
@ -104,10 +110,28 @@ export function rewriteJs(
if (flagEnabled("naiiveRewriter", meta.origin)) { if (flagEnabled("naiiveRewriter", meta.origin)) {
const text = typeof js === "string" ? js : new TextDecoder().decode(js); const text = typeof js === "string" ? js : new TextDecoder().decode(js);
return rewriteJsNaiive(text); return { js: rewriteJsNaiive(text), tag: "", map: null };
} }
return rewriteJsWrapper(js, url, meta, module); return rewriteJsWasm(js, url, meta, module);
}
export function rewriteJs(
js: string | ArrayBuffer,
url: string | null,
meta: URLMeta,
module = false
) {
return rewriteJsInner(js, url, meta, module).js;
}
export function rewriteJsWithMap(
js: string | ArrayBuffer,
url: string | null,
meta: URLMeta,
module = false
) {
return rewriteJsInner(js, url, meta, module);
} }
// 1. does not work with modules // 1. does not work with modules

View file

@ -16,7 +16,8 @@ import {
} from "../shared"; } from "../shared";
import type { URLMeta } from "../shared/rewriters/url"; import type { URLMeta } from "../shared/rewriters/url";
import { $scramjet } from "../scramjet"; import { $scramjet, flagEnabled } from "../scramjet";
import { rewriteJsWithMap } from "../shared/rewriters/js";
function newmeta(url: URL): URLMeta { function newmeta(url: URL): URLMeta {
return { return {
@ -360,12 +361,18 @@ async function rewriteBody(
return response.body; return response.body;
} }
case "script": case "script":
return rewriteJs( let { js, tag, map } = rewriteJsWithMap(
await response.arrayBuffer(), await response.arrayBuffer(),
response.finalURL, response.finalURL,
meta, meta,
workertype === "module" workertype === "module"
); );
if (flagEnabled("sourcemaps", meta.base) && map) {
js =
`${globalThis.$scramjet.config.globals.pushsourcemapfn}([${map.join(",")}], "${tag}");` +
js;
}
return js;
case "style": case "style":
return rewriteCss(await response.text(), meta); return rewriteCss(await response.text(), meta);
case "sharedworker": case "sharedworker":