ตามคาดครับเจ้าใหญ่อย่าง Microsoft ก็เข้ามามีบทบาทในโลก Node.js หลังจากประกาศเป็นมิตรกับ Open Source วันนี้เรามาลองเล่น Node.js โดยที่รันด้วย ChakraCore ซึ่งเป็น Engine ที่รัน JavaScript ที่อยู่เบื้องหลัง Microsoft Edge (ผมชอบนะเปิด app เร็วดี :p ) แทนที่จะเป็น V8 ตาม version ปกติ
เริ่มจากไปดูใน node-chakracore เราก็พอจะได้ความว่า โปรเจคนี้เปิดตัวมา 6 เดือนแล้ว และมาถึงวันนี้ก็ยังอยู่ใน version ทดสอบอยู่นะครับ ซึ่ง Features หลักๆก็น่าจะพร้อมใช้งานระดับหนึ่ง
เนื่องจากผมขี้เกียจจะมา Build เองก็ไปโหลดตัว Prebuilt มาได้เลยจาก node-chakracore/releases เท่าๆที่ดูก็สามารถใช้งานได้บน Windows, ARM และ Linux (Mac หายไปไหน???)
ผมขอลอง Windows x64 ละกันครับ
หลังจาก Install แล้วตัว Node.js ก็น่าอยู่ที่ “C:\Program Files\nodejs (chakracore)” ซึ่งเป็น Path ปกติก็จะเห็นว่ามีไฟล์ ‘chakracore.dll’ เพิ่มเข้ามา

ซึ่งถ้าเทียบกับ Node.js ปกติ จะเห็นว่า node.exe นั้นไฟล์ขนาด 16MB เพราะรวม V8 engine ไปด้วยในไฟล์เดียวกัน

ลองเทส http server ง่ายๆก่อน
Code ข้างล่างเป็นการสร้าง Web Sever แบบพื้นฐานที่สามารถส่ง Hello.. กลับไปหน้าเวปได้
// app.js
let http = require(‘http’);let server = http.createServer( (request, response)=> {
response.write(‘Hello…!’);
response.end();
});server.listen(80);
console.log(“Server is listening”);
ก็รันได้ดีปกติครับ
Performance
ไหนๆก็ไหนๆมาลองดู Performance ดีกว่า เรามาวนลูปเล่นๆกัน “ล้าน” รอบ
console.time(‘test:’);
for(let i = 0; i < 1000000 ; ++i){
let x = Math.random();
}
console.timeEnd(‘test:’);
ลองรันไป 3 รอบ ก็ได้ค่าเฉลี่ยประมาณ 5ms!!
ลองรันกับ Node.js (V8) ปกติก็พบว่า…. 15ms ช้ากว่า Chakra เกือบ 3 เท่า…
ที่นี้เราลองเรียก fucntion หลายๆชั้นดีกว่า เพื่อดูว่าถ้ามี Function ใน Call Stack สัก 3 ชั้นผลจะเป็นยังไง
console.time(‘test:’);
for(let i = 0; i < 1000000 ; ++i){
let x = Math.random();
do1();
}
console.timeEnd(‘test:’);function do1(){
do2();
}function do2(){
do3();
}function do3(){
}
Chakra จัดไป ~9.5ms
ส่วน V8 ก็ยังแถวๆ ~15.7ms
สรุปสำหรับ Performance ส่วนของ Chakra ก็ยังทำได้ดีกว่าระดับหนึ่ง ซึ่งก็สอดคล้องกับ Official Blog ใน https://blogs.windows.com/msedgedev/2016/06/22/javascript-performance-updates-anniversary-update/