]> git.ardis.lu - 4-byte-gen/commitdiff
Use dedicated web worker for each calculation
authorArdis Lu <ardisglu@gmail.com>
Sun, 19 Mar 2023 21:45:00 +0000 (14:45 -0700)
committerArdis Lu <ardisglu@gmail.com>
Sun, 19 Mar 2023 21:45:00 +0000 (14:45 -0700)
index.html
worker.js [new file with mode: 0644]

index 4543ac54b3946337f8e6b0aaa29cbb8b847835c0..d0effcae8cf33ecf33ba79b5aa1acf09ad4de711 100644 (file)
   </main>
 
   <script type="module">
-    // From noble-hashes v1.3.0
-    import { keccak256 } from '/keccak256.js';
-    const encoder = new TextEncoder();
-
     // Normalize and extract the function name and parameter types
     function splitFunction(fn) {
       // Clean all characters that definitely do not affect the signature
       return { name, parametersTypes };
     }
 
-    function validate(functionName, minimum) {
-      const byteArray = keccak256(encoder.encode(functionName)).slice(0, 4);
-      for (let i = 0; i < minimum; i++) {
-        if (byteArray[i] === 0) {
-          if (i + 1 === minimum) {
-            const hash = `0x${[...byteArray].map(b => b.toString(16).padStart(2, '0')).join('')}`;
-            return hash;
-          }
-        }
-        else {
-          return false;
-        }
-      }
-    }
-
-    function calculateOptimizedName(name, parametersTypes, minimum) {
-      let counter = 0n;
-      let functionName = `${name}_${counter}(${parametersTypes})`;
-      let hash = validate(functionName, minimum);
-      while (!hash) {
-        counter++;
-        functionName = `${name}_${counter.toString(36)}(${parametersTypes})`;
-        hash = validate(functionName, minimum);
-      }
-      return { functionName, hash };
-    }
-
     document.querySelector('form').addEventListener('submit', e => {
       e.preventDefault();
 
           continue;
         }
         const { name, parametersTypes } = splitFunction(fn);
-        const { functionName, hash } = calculateOptimizedName(name, parametersTypes, minimum);
-        console.log(functionName, hash);
+
+        const worker = new Worker('/worker.js', { type: 'module' });
+        worker.postMessage({ name, parametersTypes, minimum });
+        worker.addEventListener('message', e => {
+          const { functionName, hash } = e.data;
+          console.log(functionName, hash);
+        });
       }
     })
   </script>
diff --git a/worker.js b/worker.js
new file mode 100644 (file)
index 0000000..c864ade
--- /dev/null
+++ b/worker.js
@@ -0,0 +1,36 @@
+// From noble-hashes v1.3.0
+import { keccak256 } from '/keccak256.js';
+const encoder = new TextEncoder();
+
+function validate(functionName, minimum) {
+  const byteArray = keccak256(encoder.encode(functionName)).slice(0, 4);
+  for (let i = 0; i < minimum; i++) {
+    if (byteArray[i] === 0) {
+      if (i + 1 === minimum) {
+        const hash = `0x${[...byteArray].map(b => b.toString(16).padStart(2, '0')).join('')}`;
+        return hash;
+      }
+    }
+    else {
+      return false;
+    }
+  }
+}
+
+function calculateOptimizedName(name, parametersTypes, minimum) {
+  let counter = 0n;
+  let functionName = `${name}_${counter}(${parametersTypes})`;
+  let hash = validate(functionName, minimum);
+  while (!hash) {
+    counter++;
+    functionName = `${name}_${counter.toString(36)}(${parametersTypes})`;
+    hash = validate(functionName, minimum);
+  }
+  return { functionName, hash };
+}
+
+addEventListener('message', e => {
+  const { name, parametersTypes, minimum } = e.data;
+  const { functionName, hash } = calculateOptimizedName(name, parametersTypes, minimum);
+  postMessage({ functionName, hash });
+});
This page took 0.041661 seconds and 4 git commands to generate.