باشینه‌سازی (Optimization) له‌ Node.js

لە چاوگ

له‌ ڕابردوودا له‌به‌ر ئه‌وه‌ی جاڤاسكریپت ته‌نیا له‌ وێبگه‌ڕ به‌كار ده‌هات بۆیه‌ زۆر گرنگی نه‌ده‌درا به‌ نووسینی كۆدی خاوێن و چوست. دوای دروستبوونی Node.js و كاركردنی ڕاسته‌وخۆی جاڤا سكریپت له‌گه‌ڵ سیسته‌م ده‌بێ هه‌موو لایه‌نه‌كانی كۆدی چوست له‌به‌ر چاو بگیرێت چونكه‌ چیتر كۆد بۆ وێبگه‌ڕ نانوسیت وه‌ ئه‌گه‌ر پڕۆگرامه‌كه‌ت بگاته‌ كۆتایی بیرگه‌ ئه‌وا ده‌وه‌ستێ، ئه‌مه‌ش واتا چیتر ڕاژه‌كه‌ت به‌رده‌ست نیه‌.

Node.js و V8

Node.js بۆ وه‌رگێران و هه‌ڵكردنی جاڤا سكریپت بزوێنی V8ی گووگڵ به‌كار ده‌با. V8 له‌كاتی وه‌رگێڕانی پرۆگرامه‌كه‌ت هه‌وڵ ده‌دات پێشبینی و لێكدانه‌وه‌ بۆ ده‌رئه‌نجامه‌كانی پرۆگرامه‌كه‌ت بكات. بۆ نمونه‌ ئه‌گه‌ر فه‌نكشنێك به‌ هه‌مان تایبه‌تمه‌ندی چه‌ندان جار بانگ بكرێت ئه‌وه‌ V8 هه‌وڵده‌دات ئه‌و فه‌نكشنه‌ باشینه‌ساز (optimize) بكات وه‌ وای داده‌نێ كه‌ ده‌رئه‌نجامه‌كه‌ی هه‌ر یه‌ك جۆر ده‌بێت.

باشینه‌سازی گۆڕاوه‌كان و ژماره‌كان له V8

گه‌ر ئه‌م كۆده‌ی خواره‌وه‌ به‌ نمونه‌ وه‌ربگرین:

let a = 3;
a = 3.14;

كۆدێكی هاوشێوه‌ له‌ جاڤا بنوسیت ئه‌وا هه‌ڵه‌ت نیشان ده‌دات. له‌به‌ر ئه‌وه‌ی له‌ هێڵی یه‌كه‌م گۆڕاوی a به‌ جۆری ژماره‌ی ته‌واو (integer) پێناسه‌ كراوه‌ كه‌چی له‌ هێڵی دووه‌م نرخه‌كه‌ی گۆڕاوه‌ بۆ ژمارەی کەرت(Float point number). به‌لام له‌ جاڤاسكریپت زۆر ئاسایی كارده‌كات له‌به‌ر ئه‌وه‌ی جاڤاسكریپت جۆری ژماره‌ی ته‌واوی نیه‌ به‌ڵكو هه‌موو ژماره‌كان جۆریان ژماره‌ی كه‌رته‌. هه‌رچه‌نده‌ نووسینی كۆدێكی هاوشێوه‌ له‌ جاڤاسكریپت ئاسایه‌ به‌لام بۆ باشینەسازی له‌ V8 پێچه‌وانه‌یه‌.

let operand = 3;
function square() {
return operand * operand;
}

// Bangkirdnî bo yekem ca bê başînesazkirdin
square();
// Çalakirdnî başînesazî V8 paşan dûbare bangkirdnî fenkişnî square

%OptimizeFunctionOnNextCall(square);
square();

فایلێك دروست بكه‌ به‌ به‌كارهێنانی ئه‌و كۆده‌ی سه‌ره‌وه‌، پاشان كاری پێبكه‌ له‌ ڕێگای فرمانی (Command)

# node --allow-natives-syntax --trace_opt --trace_deopt myfile.js

سه‌رنجی نیشانی allow-natives-syntax بده‌.

ئه‌نجام:

 [deoptimize context: c39daf14679]
 [optimizing: square / c39dafca921 - took 1.900, 0.851, 0.000 ms]

ده‌بینین كه‌ V8 هیچ كێشه‌یه‌كی نیه‌ له‌ باشینه‌سازكردنی فه‌نكشنی square ئه‌م كۆده‌ی خواراوه‌ زیاد بكه‌و دووباره‌ كاری پێبكه‌وه‌.

%OptimizeFunctionOnNextCall(square);
operand = 3.01;
square();

ئه‌نجام:

**** DEOPT: square at bailout #2, address 0x0, frame size 8
 [deoptimizing: begin 0x2493d0fca8d9 square @2]
 ...
 [deoptimizing: end 0x2493d0fca8d9 square => node=3, pc=0x29edb8164b46, state=NO_REGISTERS, alignment=no padding, took 0.033 ms]
 [removing optimized code for: square]

ئه‌مه‌ ڕاپۆرتێكی درێژه‌ له‌ سه‌ر ئه‌وه‌ی كه‌ V8 پاش باشینه‌سازكردنی (optimize) فه‌نكشنی square دووباره‌ ناچار بووه‌ به‌ لابردنی له‌به‌ر ئه‌وه‌ی جۆری گۆڕاوه‌كه‌مان گۆڕی.

له‌به‌رئه‌وه‌ باشتره‌ ده‌ستكاری جۆری گۆڕاوه‌كان نه‌كه‌ین. له‌ داهاتوو دا چ جۆرێكیان بۆ داده‌نێین باشتره‌ له‌ ئێستادا به‌هه‌مان جۆر پێناسیان بكه‌ین.