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

Allow (globally) setting the microtask implementation #17

Closed
RubenVerborgh opened this issue Jun 20, 2020 · 2 comments
Closed

Allow (globally) setting the microtask implementation #17

RubenVerborgh opened this issue Jun 20, 2020 · 2 comments
Assignees
Labels

Comments

@RubenVerborgh
Copy link
Owner

Will be needed to prevent browser freezes (LDflex/Query-Solid#45 (comment))

@RubenVerborgh
Copy link
Owner Author

@rubensworks The problem with using queueMicrotask is that it precedes browser rendering, i.e., it behaves as if it is one long continuous piece of code.

An way around this, is to use a wrapper function that makes every 1 in 100 (or so) calls a setImmediate / setTimeout call.

Such unpredictable behavior is of course hard for tests, so I would switch it off by default.

However, the question is whether it could also create undesired behavior outside of test environments.

I personally don't think it does: the tests simulate worst-case behavior, where we want to test certain race conditions and hence are more timing-sensitive. In fact, I just tried changing queueMicrotask by setImmediate in the code file, and only 1 case fails (spanning 3 out of 1563 tests), and it is literally testing a race condition ("a BufferedIterator that is being closed while reading is in progress").

So do you think we can safely, by default or otherwise, enable such switched behavior in browsers?

@rubensworks
Copy link
Collaborator

A wrapper to make every 1 in x calls a setImmediate or so sounds like a good idea. I also ran into problems related to this during testing (which will most likely also occur in production).

I would consider enabling this wrapper by default, but provide the functionality to disable/adjust this. Developers could then easily make use of this lib with a sane default config that works in most situations. If needed, they could still adjust manually. Also for tests, they could reconfigure if needed.

I first thought about just enabling this in browsers, but not in Node. But after thinking about this a bit more, I wouldn't do this, as this may cause confusion among developers, as they may not expect this.

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

No branches or pull requests

2 participants