API 限制

瀏覽器環境和 JavaScript 與 C 和 C++ 通常執行的原生環境不同。這些差異對原生 API 的呼叫和使用方式施加了一些限制。本節列出了一些更明顯的限制。

網路

Emscripten 支援 libc 網路函數,但您必須將自己限制在非同步 (非阻塞) 操作。這是必要的,因為底層的 JavaScript 網路函數是非同步的。

檔案系統

Emscripten 支援 libc 檔案系統函數,並且 C/C++ 程式碼可以正常方式撰寫。

瀏覽器環境 中執行的程式碼會被沙箱化,並且無法直接存取本機檔案系統。相反地,Emscripten 會建立一個虛擬檔案系統,可以預先載入資料或連結到 URL 以進行延遲載入。這會影響何時可以呼叫同步檔案系統函數以及如何編譯專案。請參閱檔案系統概述以取得更多資訊。

應用程式主迴圈

瀏覽器事件模型使用協同式多工處理 — 每個事件都有一個「輪流」執行的機會,然後必須將控制權返回給瀏覽器事件迴圈,以便可以處理其他事件。HTML 頁面掛起的一個常見原因是 JavaScript 沒有完成並將控制權返回給瀏覽器。

這會影響使用無限主迴圈的應用程式的撰寫方式。請參閱Emscripten 執行階段環境以取得更多資訊。

其他 API

對其他可移植的 C/C++ 程式碼的支援是相當全面的