Closed
Description
We are requesting more than 250 million rows, and then our page is getting page unresponsive.
So we decided to use web workers. We faced few problems while using web workers.
-
We tried in this method, but here
dist/worker.sql-wasm.js
anddist/worker.sql-wasm.wasm
resulted in page not found, hence we copy-pasted the code fromnode_modules
. -
From this line we got an error
var worker = new Worker("./worker.sql-wasm.js");
Uncaught SyntaxError: Unexpected token '.'
. -
So we used blob URL as shown below
sqlWorkers.js
import sqlWebWorker from './worker.sql-wasm'
export function myWorker(workerURL) {
return new Worker(
URL.createObjectURL(
new Blob(['(' + workerURL.toString() + ')()'], {
type: 'text/javascript'
})
)
)
}
export function sqlWorker(query, uInt8Array) {
var worker = new myWorker(sqlWebWorker)
worker.onmessage = () => {
console.log('Database opened')
worker.onmessage = event => {
console.log(event.data) // The result of the query
}
worker.postMessage({
action: 'exec',
sql: query
})
}
worker.onerror = e => console.log('Worker error: ', e)
worker.postMessage({
action: 'open',
buffer: uInt8Array /*Optional. An ArrayBuffer representing an SQLite Database file*/
})
}
worker.sql-wasm.js
export default () => {
var initSqlJsPromise = ''
var initSqlJs = function(moduleConfig) {
if (initSqlJsPromise) {
return initSqlJsPromise
}
//--------> copy-pasted code from node_modules(sql/dist/worker.sql-wasm.js) <-----------
if (typeof exports === 'object' && typeof module === 'object') {
module.exports = initSqlJs
// This will allow the module to be used in ES6 or CommonJS
module.exports.default = initSqlJs
} else if (typeof define === 'function' && define['amd']) {
define([], function() {
return initSqlJs
})
} else if (typeof exports === 'object') {
exports['Module'] = initSqlJs
}
}
This method didn't give any error, but the Database opened
string is not logged in worker.onmessage.
Can you help us with how to use web workers in sql.js.
TIA
Metadata
Metadata
Assignees
Labels
No labels