Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Asincify version of SQL.js (no COOP required!) #59

Open
quolpr opened this issue Jul 15, 2022 · 2 comments
Open

Asincify version of SQL.js (no COOP required!) #59

quolpr opened this issue Jul 15, 2022 · 2 comments

Comments

@quolpr
Copy link
Contributor

quolpr commented Jul 15, 2022

I was able to achieve the same performance as absurd-sql has, but with asincify version of SQL.js(using wa-sqlite).

Here is the comparison:

example3.mp4

And, you can also run some benchmarks at https://cerulean-bublanina-96bf3a.netlify.app/

The results are roughly the same, but no COOP is required anymore!

Here is the source code of backend https://github.com/trong-orm/wa-sqlite-web-backend/blob/main/src/IDBCachedWritesVFS.ts (it's a bit messy). I used the same tricks as absurd-sql do — don't write till transaction finish, use cursor if sequence read.

The problem now is that wa-sqlite is under GPL3 license, so we need someone who make MIT version of wa-sqlite 😅

@rhashimoto
Copy link

wa-sqlite is not a version of SQL.js. No code is derived from SQL.js and it has a completely different API.

@quolpr
Copy link
Contributor Author

quolpr commented Jul 17, 2022

Yep, you are right 🙂. Just want to point, that there is another way to achieve a good sqlite performance with asyncify version of SQLite (if I am not wrong with benchmarking!). And I think it is related to absurd-sq somehow, because James wrote at article:

Another option would be to use Asyncify, an Emscripten technique for turning sync C calls into async ones. However, there’s no way I’m going to touch that. It works by transforming the entire code to unwind/rewind stacks, causing a massive perf hit and bloating the binary size. It’s just too invasive and would force SQLite to have an async API.

At https://jlongster.com/future-sql-web.

It also definitely bloats the size, but brotli version has not so much size difference. I took Oz version of sql.js, and wa-sqlite (which is already Oz) and made brotli of them:

image

The difference is ~60kb.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants