iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 12
0
Modern Web

從零開始認識 Node.js系列 第 12

[Day 12] API 尋寶記 - 值得了解的 C / C++ Addons

Node.js Logo

前言

這篇不會詳細介紹 API 的用法與說明,而是挑出幾個我比較有興趣的 API 來介紹,日後找時間好好研究一般。

[來源] 讓 Node.js 擁抱 C / C++

Node.js 的事件循環是透過 C 的 libuv , C++ 則是 Chrome v8 的底層,因此 Node.js 其實可以不至是 Node.js ,而是 Node.js + C / C++ 。不過知道歸知道,讓我感到有興趣時看到 初探 nodejs 的 c++ addon ( 4 年前的文章,使用 Node.js v0.8 版本 ) 裡面簡單測試 Node.js 與 C++ 處理同一件事情所需要的時間。

  • 測試的 Example Code ( 判斷輸入的值的 Type 是否正確並分別跑 1000 次 )
var sv = module.exports = require('./lib/verify.js');

// 利用純 js 語法進行判斷
var ia = Array.isArray;
console.time('js');
for(var j=0;j<1000;j++){
 ia([]);
 ia('111');
 isNaN(123);
 isNaN('abc');
}
console.timeEnd('js')

// 利用 C++ 模塊進行判斷
var ia2 = sv.isArray;
var in2 = sv.isNumber;
console.time('c++');
for(var j=0;j<1000;j++){
 ia2([]);
 ia2('111');
 in2(123);
 in2('abc');
}
console.timeEnd('c++');

得到的結果明顯 C++ 的效率比 JS 好許多,但在 Node.js v6.9.2 執行 JS 已經改善許多,執行花費的時間約在 0.360ms - 0.412ms 。這讓我再思考不該把自己困在 Node.js 思維,之後也可以適度使用 C / C++ 來協助 Node.js ( 沒寫過 C / C++ :p ) 。

[來源] Node.js 有 VM

虛擬機是 v8 ,因此 Node.js 也擁有此功能 ( 沒想過 Node.js 本身就有 Sandbox 的功能 ) 。想了更多,可以看 騰訊全端 AlloyTeam 團隊 - 詳解NodeJs的VM模塊

參考資料

  1. 淘宝前端团队(FED) - Node.js 和 C++ 之間的類型轉換
  2. devlucky - How to get a performance boost using Node.js native addons
  3. Scott Frees - Using Buffers to share data between Node.js and C++
  4. Node.js 各版使用的 v8 API 總整理

上一篇
[Day 11] API 尋寶記 - Windows 也要用 Bash + 後繼預告 (1)
下一篇
[Day 13] API 尋寶記 - 推拉高手 Events
系列文
從零開始認識 Node.js31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言