React Fiber 究竟是什麼。javascript 的巨集任務。
阿新 • • 發佈:2020-09-06
網上看到的文章大多是說原理的,要麼就是貼一堆無關緊要的程式碼,說不到核心上。
Fiber是分片執行,沒錯,但是怎麼把控制權交回UI執行緒的,
其實是利用了非同步原理。
上程式碼:
1 if ( // If Scheduler runs in a non-DOM environment, it falls back to a naive 2 // implementation using setTimeout. 3 typeof window === 'undefined' || // Check if MessageChannel is supported, too.4 typeof MessageChannel !== 'function') { 5 6 requestHostCallback = function(cb) { 7 if (_callback !== null) { 8 // Protect against re-entrancy. 9 setTimeout(requestHostCallback, 0, cb); 10 } else {11 _callback = cb; 12 setTimeout(_flushCallback, 0); 13 } 14 }; 15 16 } else { 17 var channel = new MessageChannel(); 18 var port = channel.port2; 19 channel.port1.onmessage = performWorkUntilDeadline;20 21 requestHostCallback = function(callback) { 22 scheduledHostCallback = callback; 23 24 if (!isMessageLoopRunning) { 25 isMessageLoopRunning = true; 26 port.postMessage(null); 27 } 28 }; 29 }
如果支援MesasgeChannel 則選擇MesasgeChannel, 否則採用setTimeout降級處理。