Created
June 13, 2017 07:48
-
-
Save dailc/1cd1c565db6c9aa494630a52f7a20057 to your computer and use it in GitHub Desktop.
[单线程的JavaScript] JS虽然有异步,但实质仍然是单线程,有时候容易造成困扰,这里就一些特殊情况做记录 tags:singlethread,javascript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## webview中JavaScript中的UI线程阻塞 | |
* 如果在webview中执行逻辑,并且没有阻塞UI相关的显示(如alert,悬浮对话框等,toast不影响),这时候是可以正常执行逻辑的 | |
* 但是如果在逻辑中加了一个alert(或其他悬浮框等会阻塞UI的显示),这时候,所有的逻辑都会被阻塞住。直到页面这个阻塞消失(如点击确认按钮),才会继续接下来的逻辑 | |
归根结底,这个问题的关键是JS是一个单线程操作(虽然有异步,但是仍然是单线程),所以只要是阻塞UI线程操作都会阻塞所有的逻辑。 | |
容易出现的场景: | |
* 先执行一个setTimeout(bizlogic1)-一个短期的演示 | |
* 然后执行一个alert | |
* 然后等待很久后再点击确定 | |
如果按照多线程理解,setTimeout会自行执行完毕。 | |
但是由于JS的实质是单线程,所以其实从alert出现的那一刻,setTimeout等一切逻辑都被阻塞住了。 | |
只有alert结束完毕后才会继续之前的逻辑(也就是说setTimeout在阻塞的这一段时间根本就不会动) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment