<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                在編譯所有C/C++文件之前,編譯程序需要將所有的JavaScript模塊文件編譯為C/C++代碼,此時是否直接將其便以為可執行代碼了呢?其實不是。 ## 1.轉存為C/C++代碼 Node采用了V8附帶的js2c.py工具,將所有內置的JavaScript代碼(src/node.js和lib/*.js)轉換成C++里的數組,生成node_natives.h頭文件,相關代碼如下: ~~~ namespace node{ const char node_native[]={47,47,..}; const char dgram_native[]={47,47,..}; const char console_native[]={47,47,..}; const char buffer_native[]={47,47,..}; const char querystring_native[]={47,42,..}; ... struct _native{ const char* name; const char* source; size_t source_len; }; static const struct _native natives[]={ {"node",node_native,sizeof(node_native)-1}, {"dgram",dgram_native,sizeof(dgram_native)-1}, ... }; } ~~~ 在這個過程中,JavaScript代碼以字符串的形式存儲在node命名空間中,是不可直接執行的。在啟動Node進程時,JavaScript代碼直接加載進內存中。在加載的過程中,JavaScript核心模塊經歷標識符分析后直接定位到內存中,比普通的文件模塊從磁盤中一處一處查找要快很多。 ## 2.編譯JavaScript核心模塊 lib目錄下的所有模塊文件也沒有定義require、module、exports這些變量。在引入JavaScript核心模塊的過程中,也經歷了頭尾包裝的過程,然后才執行和導出了exports對象。與文件模塊有區別的地方在于:獲取源碼的方式(核心模塊是從內存中加載的)以及緩存執行結果的位置。 JavaScript核心模塊的定義如下面的代碼所示,源文件通過process.binding('natives')取出,編譯成功的模塊緩存到NativeModule._cahce對象上,文件模塊則要緩存到Module._cache對象上: ~~~ function NativeModule(id){ this.filename = id + '.js'; this.id = id; this.exports = {}; this.loaded = false; } NativeModule._source=process.binding('natives'); NativeModule._cache = {}; ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看