先看一段代碼javascript
setTimeout(function() { console.log('timeout'); }, 0); new Promise((resolve, reject) => { console.log('promise'); resolve(); }).then(function() { console.log('then'); }); console.log('global');
輸出: promise 、global、 then、timeout
html
在 V8 實現中包含兩種任務:html5
script
,setTimeout
, setInterval
, setImmediate
, I/O
, UI rendering
java
process.nextTick
, Promises
, Object.observe
, MutationObserver
git
注意:es6
- 從上面能夠看到,microtask 會執行完畢才進行渲染,若是 microtask 執行時間教長,會致使卡頓
- 上面執行過程只是 chrome 的,safri 又不太同樣
執行過程的示例 :
https://jakearchibald.com/201...github
new MutationObserver(function() { console.log('mutate'); }).observe(document.body, { attributes: true }); document.body.setAttribute('data-random', Math.random()); setTimeout(function() { console.log('timeout'); }, 0); new Promise((resolve, reject) => { console.log('promise'); resolve(); }).then(function() { console.log('then'); }); console.log('global');
輸出: promise 、global、mutate、 then、timeoutchrome
microTask
: https://github.com/kaerus-com... es-promise
: https://github.com/stefanpenn...