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

لە چاوگ
پێداچوونەوی ‏١١:١٢، ٣ی نیسانی ٢٠١٨ لە لایەن Aras (لێدوان | بەشدارییەکان) (ڕاستکردنەوەی ڕێزمان و وردە دەستکاریی تر)
(جیاوازی) →پیاچوونەوەی کۆنتر | پێداچوونەوەی ئێستا (جیاوازی) | پێداچوونەوەی نوێتر← (جیاوازی)

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

Node.js و V8

Node.js بۆ وه‌رگێران و هه‌ڵكردنی جاڤا سكریپت بزوێنی V8ی گووگڵ به‌كار ده‌هێنێت. V8 له‌كاتی وه‌رگێڕانی پرۆگرامه‌كه‌ت هه‌وڵ ده‌دات پێشبینی و لێكدانه‌وه‌ بۆ ده‌رئه‌نجامه‌كانی پرۆگرامه‌كه‌ت بكات. بۆ نمونه‌ ئه‌گه‌ر (پابەندی function)ـەک به‌ هه‌مان تایبه‌تمه‌ندی، چه‌ندان جار بانگ بكرێت ئه‌وا 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();

به‌ به‌كارهێنانی ئه‌و كۆده‌ی سه‌ره‌وه‌ (پەڕگە file)ـێک دروست بكه‌، پاشان له‌ ڕێگای فرمانی (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 پاش باشینه‌سازكردنی پابەندیی square دووباره‌ ناچار بووه‌ به‌ لابردنی، له‌به‌ر ئه‌وه‌ی جۆری گۆڕاوه‌كه‌مان گۆڕی.

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