Promises/A +仕様の読み終えたばかりで、マイクロタスクとマクロタスクという用語につまずいた: http://promisesaplus.com/#notes を参照
これらの用語を聞いたことはありませんが、今では違いがどうなるのか興味がありますか?
私はすでにウェブ上でいくつかの情報を見つけようとしましたが、私が見つけたのはw3.orgアーカイブからのこの投稿です(私には違いを説明していません): http://lists.w3 .org/Archives/Public/public-nextweb/2013Jul/0018.html
さらに、「マクロタスク」と呼ばれるnpmモジュールを見つけました。 https://www.npmjs.org/package/macrotask 繰り返しますが、正確な違いは明確ではありません。
私が知っているのは、 https://html.spec.whatwg.org/multipage/webappapis.html#task-queue および- https://html.spec.whatwg.org/multipage/webappapis.html#perform-a-microtask-checkpoint
このWHATWG仕様を考えると、理論的には自分で違いを抽出できるはずです。しかし、専門家による短い説明があれば、他の人も同様に利益を得ることができると確信しています。
イベントループの1つのゴーアラウンドには、exactly oneから処理されるタスクがあります[macrotask queue(このキューはtask queue( WHATWG仕様 )。このマクロタスクが終了すると、利用可能なすべてのmicrotasksが、つまり同じゴーアラウンドサイクル内で処理されます。これらのマイクロタスクは処理されますが、さらに多くのマイクロタスクをキューに入れることができ、それらはすべてマイクロタスクキューが使い果たされるまで1つずつ実行されます。
microtaskが他のマイクロタスクを再帰的にキューに入れる場合、次のマクロタスクが処理されるまでに時間がかかる場合があります。つまり、UIがブロックされたり、アプリケーションでI/Oアイドリングが完了したりする可能性があります。
ただし、少なくともNode.jsのprocess.nextTick関数([マイクロタスク)をキューに入れる)に関しては、process.maxTickDepthによるこのようなブロッキングに対する組み込みの保護があります。この値はデフォルトの1000に設定され、この制限に達した後、次のマクロタスクの処理を許可するマイクロタスクのさらなる処理を削減します)
基本的に、microtasksを同期的に非同期的に行う必要がある場合(つまり、この(マイクロ)タスクを最も近い将来に実行する場合)。それ以外の場合は、マクロタスクに固執します。
マクロタスク: setTimeout、setInterval、setImmediate、requestAnimationFrame、I/O、UIレンダリング
マイクロタスク: process.nextTick、Promises、Object.observe、MutationObserver
インタラクティブな例を含むこの投稿を書きました https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
更新:これについても講演しました https://www.youtube.com/watch?v=cCOL7MC4Pl 。トークでは、タスクとマイクロタスクがレンダリングとどのように相互作用するかなど、より詳細に説明します。
呼び出しスタック が空の場合、手順を実行します-