fix: enhance creating a new worker through Object URL instead of data: URL

This commit is contained in:
isk
2023-07-10 17:25:58 +02:00
committed by 0xmad
parent 2980e48dde
commit d83c9156a4
4 changed files with 57 additions and 2 deletions

View File

@@ -6,6 +6,7 @@ var crypto = require('crypto');
var wasmcurves = require('wasmcurves');
var os = require('os');
var Worker = require('web-worker');
var base64 = require('base64-js');
var wasmbuilder = require('wasmbuilder');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -13,6 +14,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);
var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
var Worker__default = /*#__PURE__*/_interopDefaultLegacy(Worker);
var base64__default = /*#__PURE__*/_interopDefaultLegacy(base64);
/* global BigInt */
const hexLen = [ 0, 1, 2, 2, 3, 3, 3, 3, 4 ,4 ,4 ,4 ,4 ,4 ,4 ,4];
@@ -4482,8 +4484,21 @@ async function buildThreadManager(wasm, singleThread) {
tm.concurrency = concurrency;
for (let i = 0; i<concurrency; i++) {
let base64Encoded = workerSource.split(",")[1];
tm.workers[i] = new Worker__default["default"](workerSource);
// Check if the length of the string is a multiple of 4
if (base64Encoded.length % 4 !== 0) {
// Add padding to the base64-encoded string
const padding = '='.repeat(4 - (base64Encoded.length % 4));
base64Encoded += padding;
}
const binaryString = base64__default["default"].toByteArray(base64Encoded);
const workerBlob = new Blob([binaryString], { type: 'application/javascript' });
const workerUrl = URL.createObjectURL(workerBlob);
tm.workers[i] = new Worker__default["default"](workerUrl);
tm.workers[i].addEventListener("message", getOnMsg(i));

25
package-lock.json generated
View File

@@ -9,6 +9,7 @@
"version": "0.2.60",
"license": "GPL-3.0",
"dependencies": {
"base64-js": "^1.5.1",
"wasmbuilder": "0.0.16",
"wasmcurves": "0.2.2",
"web-worker": "^1.2.0"
@@ -264,6 +265,25 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -2031,6 +2051,11 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",

View File

@@ -32,6 +32,7 @@
},
"homepage": "https://github.com/iden3/ffjs#readme",
"dependencies": {
"base64-js": "^1.5.1",
"wasmbuilder": "0.0.16",
"wasmcurves": "0.2.2",
"web-worker": "^1.2.0"

View File

@@ -25,6 +25,7 @@ const MEM_SIZE = 25; // Memory size in 64K Pakes (1600Kb)
import thread from "./threadman_thread.js";
import os from "os";
import Worker from "web-worker";
import base64 from "base64-js";
class Deferred {
constructor() {
@@ -112,8 +113,21 @@ export default async function buildThreadManager(wasm, singleThread) {
tm.concurrency = concurrency;
for (let i = 0; i<concurrency; i++) {
let base64Encoded = workerSource.split(",")[1];
tm.workers[i] = new Worker(workerSource);
// Check if the length of the string is a multiple of 4
if (base64Encoded.length % 4 !== 0) {
// Add padding to the base64-encoded string
const padding = '='.repeat(4 - (base64Encoded.length % 4));
base64Encoded += padding;
}
const binaryString = base64.toByteArray(base64Encoded);
const workerBlob = new Blob([binaryString], { type: 'application/javascript' });
const workerUrl = URL.createObjectURL(workerBlob);
tm.workers[i] = new Worker(workerUrl);
tm.workers[i].addEventListener("message", getOnMsg(i));