iT邦幫忙

2024 iThome 鐵人賽

DAY 6
1

昨天廢文發完,突然有三個夥伴追蹤
感人,已哭已哭唷QQ

說明 require 和 import 的區別。

require 是 node.js 原生的模組引入方式,屬於 commonJS
import 是 ES6 的模組引入方式,屬於 ES modules

差異:

1. 加載時
require 是同步的 => 前一個 require 還未完成時,不會執行下一行.
import 是異步的 => 不用擔心阻斷後面程式碼
2. 引入條件
require 可以在函式、條件語句裡面直接使用
import 則不行.
但在條件語句內,若搭配 promise 語句來 import,是可行的.
用法會是像這樣

if (userInput === 'loadModule') {
    import('./module-name.js')
        .then((module) => {
        .
        .
        .

3. tree shaking
import 支援靜態分析工具(如 webpack、Rollup 等)進行 tree shaking
require則不行

說明 process.nextTick 和 setImmediate 的差異。

process.nextTick
是微任務/在當前事件循環完成後,下一個事件開始執行之前執行

setImmediate
是宏任務/在當前事件循環完成後,在下一個事件循環開始時立即執行

範例

console.log('Start');

process.nextTick(() => {
  console.log('nextTick');
});

setImmediate(() => {
  console.log('setImmediate');
});

console.log('End');

輸出結果
Start->End->nextTick->setImmediate

原因
第一個事件循環:Start->End->nextTick
第二個事件循環:setImmediate

這範例的第一個事件循環由 "同步代碼+微任務" 組成
意即兩個 console.log + nextTick 會先執行
事件循環完成後,再執行下一個宏任務,也就是下一個事件循環 setImmediate

參考資料:
https://nodejs.org/en/learn/asynchronous-work/understanding-setimmediate


上一篇
Day-05 Node.js 問題
系列文
Web仔常見的面試問題 6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言