function handleStartAll(e) {
for (const row of state.values()) {
row.worker = new Worker('/worker.js', { type: 'module' });
- row.worker.postMessage({ name: row.name, parametersTypes: row.parametersTypes, minimum: parseInt(minimum.value) });
+ row.worker.postMessage({ name: row.name, parametersTypes: row.parametersTypes, seed: row.seed, minimum: parseInt(minimum.value) });
row.worker.addEventListener('message', e => {
- const { functionName, hash, counter } = e.data;
+ const { functionName, hash, counter, completed } = e.data;
row.optimizedName = functionName;
row.optimizedSelector = hash;
row.seed = counter;
- updateUi(state)
+ row.status = completed ? 'Completed' : 'Searching';
+ updateUi(state);
});
}
}
}
}
-function calculateOptimizedName(name, parametersTypes, minimum) {
- let counter = 0n;
+function calculateOptimizedName(name, parametersTypes, seed, minimum) {
+ let counter = BigInt(seed);
let functionName = `${name}_${counter}(${parametersTypes})`;
let hash = validate(functionName, minimum);
while (!hash) {
counter++;
functionName = `${name}_${counter.toString(36)}(${parametersTypes})`;
hash = validate(functionName, minimum);
+ if (counter % 1000n === 0n) {
+ postMessage({ functionName, hash, counter, completed: false });
+ }
}
return { functionName, hash, counter };
}
addEventListener('message', e => {
- const { name, parametersTypes, minimum } = e.data;
- const { functionName, hash, counter } = calculateOptimizedName(name, parametersTypes, minimum);
- postMessage({ functionName, hash, counter });
+ const { name, parametersTypes, seed = 0, minimum } = e.data;
+ const { functionName, hash, counter } = calculateOptimizedName(name, parametersTypes, seed, minimum);
+ postMessage({ functionName, hash, counter, completed: true });
});