mirror of
https://github.com/MercuryWorkshop/scramjet.git
synced 2025-05-13 14:30:02 -04:00
fix sync xhr hang
This commit is contained in:
parent
277d8c8ad9
commit
a8169c4cde
3 changed files with 20 additions and 9 deletions
|
@ -1,7 +1,7 @@
|
|||
import { config, decodeUrl, encodeUrl, rewriteHeaders } from "../../../shared";
|
||||
import { ScramjetClient } from "../../client";
|
||||
const nativeworker = Worker;
|
||||
|
||||
const postmessage = Worker.prototype.postMessage;
|
||||
export default function (client: ScramjetClient, self: Self) {
|
||||
const worker = new nativeworker(config.sync);
|
||||
const ARGS = Symbol("xhr original args");
|
||||
|
@ -34,14 +34,18 @@ export default function (client: ScramjetClient, self: Self) {
|
|||
const sab = new SharedArrayBuffer(1024, { maxByteLength: 2147483647 });
|
||||
const view = new DataView(sab);
|
||||
|
||||
worker.postMessage({
|
||||
postmessage.call(worker, {
|
||||
sab,
|
||||
args,
|
||||
headers: ctx.this[HEADERS],
|
||||
body: ctx.args[0],
|
||||
});
|
||||
|
||||
let now = performance.now();
|
||||
while (view.getUint8(0) === 0) {
|
||||
if (performance.now() - now > 1000) {
|
||||
throw new Error("xhr timeout");
|
||||
}
|
||||
/* spin */
|
||||
}
|
||||
|
||||
|
|
|
@ -56,12 +56,12 @@ export function rewriteHtml(
|
|||
script(self.$scramjet.config["codecs"]),
|
||||
script("data:application/javascript;base64," + btoa(injected)),
|
||||
script(self.$scramjet.config["shared"]),
|
||||
script(self.$scramjet.config["client"]),
|
||||
script("/vc/browser.js"),
|
||||
new Element("link", {
|
||||
rel: "stylesheet",
|
||||
href: "/vc/browser.css",
|
||||
})
|
||||
script(self.$scramjet.config["client"])
|
||||
// script("/vc/browser.js"),
|
||||
// new Element("link", {
|
||||
// rel: "stylesheet",
|
||||
// href: "/vc/browser.css",
|
||||
// })
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -197,8 +197,8 @@ function traverseParsedHtml(
|
|||
if (v === null) delete node.attribs[attr];
|
||||
else {
|
||||
node.attribs[attr] = v;
|
||||
node.attribs[`data-scramjet-${attr}`] = value;
|
||||
}
|
||||
node.attribs[`data-scramjet-${attr}`] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,5 +50,12 @@ addEventListener(
|
|||
// release the lock, main thread will stop spinning now
|
||||
view.setUint8(0, 1);
|
||||
};
|
||||
xhr.ontimeout =
|
||||
xhr.onerror =
|
||||
xhr.onabort =
|
||||
() => {
|
||||
console.error("xhr failed");
|
||||
view.setUint8(0, 1);
|
||||
};
|
||||
}
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue