1

بابه‌ت: بۆچی Node JS؟

سڵاوێکی گەرم لە هاوڕێیانی ئازیزی وێبچن و هەزار سڵاو لە گڵکۆی پاکی کاکە ئاسۆی جوانە مەرگ،

بە فرسەتم زانی لەم بابەتەدا هەندێک تەوەری گرنگ باس بکەم کە پێم وایە گەلێک گرنگە دڤالۆپەرە کوردەکان پێی ئاشنا بن، ئەگەرچی هەندێک درەنگیش بێ بەڵام هێشتا فرسەتە کە بۆ لەمەودوا کار بە ئامراز و تەکنەلەجیا نوێیەکان بکەین.

لەدوای ساڵی 2012 و بگرە پێشتریش، هەندێک هەوڵی سەرکەوتوو درا بۆ  گۆڕانکاری لە شێوازی درووستکردنی وێب ئاپڵیکەیشندا. پاڵپشتێکی بەهێز بۆ ئەو هەوڵانە بریتیی بوو لە سەرهەڵدانی Node JS کە ڕێگەی دەدا کە JavaScript نەک هەر لە Client-side کار بکات، بەڵکو لە Server-side‌ یش کاربکات. گرنگی و بەربڵاوی Node لەوەدایە کە ڕێگە دەدات JavaScript بەکاربێت کە لەخۆیدا زمانێکە زۆرینەی دڤالۆپەرەکان بەکاریان دەهێنا لەسەر Client-side. لەویش گرنگتر ئەوەیە Node جیاواز لە زمانەکانی وەک PHP و Perl و Java  و هتد.. کار دەکات، ئەویش بە هێنانە ناوەوەی شێوازی پڕۆگرامکردنی Asynchronous I/O کە پێچەوانەی Synchronous blocking I/O یە. Node لەسەر یەک  Thread کار دەکات و لەنێو یەک ‌Event Loop دا کارەکان هەڵدەسووڕێنێ، ئەم تایبەتمەندییەش وا دەکات Node بتوانێ پرۆگرامینگ لەسەر بنەمای Event-Driven بهێنێتە دنیای وێبەوە. خودی سروشتی JavaScript یش گەلێک گونجاوە بۆ ئەم کارە بەهۆی هەبوونی Callback Functions و شێوازی پرۆگرامکردنی Functional لەپاڵ Imperative دا.

بۆستە، ئەمانەی سەرەوە چین؟

ئەگەر ئەم زاراوانەی سەرەوە تازەن بۆت، خەم مەخۆ، هەوڵدەدەم هەنێکییان ڕوون بکەمەوە و کارێکی باشیش دەکەی ئەگەر بۆخوت دواتر هەنێک سەرچاوەش بخوێنیتەوە.

جیاوازی Client-Side لەگەڵ Server-Side:

Client-Side ئاماژەیە بۆ هەر ڕوودانێک کە لەلای بەکارهێنەر ڕوودەدات. لە جیهانی وێبدا هەموو شتێکە کە لەسەر وێبگەڕ ئەکەوێتە کار. هەموو کۆدێکی jQuery کە نووسیوتە وەکو سکریپتێک لەگەڵ لەگەڵ ئاپەکەتدا دێتە سەر وێبگەڕەکەت و لەسەر وێبگەڕەکەت کارەکانی دەکات. ئەمە مانای ئەوەیە کە بەکارهێنەر توانای گۆڕانگاری لەو کۆدانەدا دەبێت بەهۆی ئەوەی بەکارهێنەر دەست پێ ڕاگەیشتینی هەیە بۆ هەموو شتێک کە لەسەر وێبگەڕ کار بکات.

Server-Side ئاماژەیە بۆ هەر ڕوودانێک کە لەلای ڕاژەکار (Server) ڕوودەدات و بەکارهێنەر دەست پێ ڕاگەیشتنێکی سنوورداری هەیە بۆی. نموونەی ئەمە کۆی کۆد و پەڕگەکانی PHP یە کە لەسەر ڕاژەکارەکەت کاردەکەن.


JavaScript لە هەردوولا:

پێش هاتنی Node JS، زمانی JavaScript تەنها لەسەر وێبگەڕ کاری دەکرد، بەواتایەکی تر کاری ‌Client-side ـی پێ ئەنجام دەدرا.


<!DOCTYPE html>
<html>
<head>
    <title>Webchin</title>

    <script type="text/javascript">
        
        function clickMe(){
            alert("Slaw");
        }
    </script>
</head>
<body>

    <button onClick="clickMe()">Click Me</button>

</body>
</html>

ئەو کۆدەی سەرەوە ڕەنگە سادەترین سکریپت بێت کە بە JavaScript نووسراوە و لەسەر Client-side  کاردەکات.


ئێستا لەڕێگەی Node ـەوە دەتوانی JavaScript لەسەر Server ـیش کار پێ بکەی کە وا دەکات دەستت بگات بە کۆی تایبەتمەندییەکانی JavaScript  لەسەر ڕاژەکارەکەت:

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World!');
}).listen(8080);

Synchronous vs Asynchronous

Synchronous بەواتای ئەوە دێت کە کۆدەکان بەدوای یەکدا کاردەکەن وەک ئەوەی دەردەکەون. بە نموونە:

<!DOCTYPE html>
<html>
<head>
    <title>Webchin</title>

    <script type="text/javascript">
        
        function main(){
            alert("Yekem jar");
            alert("Dwam jar");
            alert("Seyam jar");
        }
    </script>
</head>
<body onLoad="main()">


</body>
</html>

تێبینی بکە کە کۆدەکان بەدوای یەکدا کار دەکەن. لە پێشدا "Yekem jar" پاشان "Dwem jar" دواتر "Seyam jar"

Asynchronous واتا ئەگەرچی کۆدەکان وا دەردەکەون کە بەڕیز بەدوای یەکدا کار بکەن بەڵام لەڕاستیدا مەرج نییە بەو شێوەیە بێت:

<!DOCTYPE html>
<html>
<head>
    <title>Webchin</title>

    <script type="text/javascript">
        
        function main(){
            alert("Yekem jar");
            setTimeout(function(){
                alert("Dwem jar")
            }, 0);
            alert("Seyam jar");
        }
    </script>
</head>
<body onLoad="main()">


</body>
</html>

تێبینی بکە کە کۆدەکان بەم شێوازە هەڵدەسوڕێن:

1. "Yekem jar"
2. "Seyam jar"
3. "Dwem jar"

ئەگەرچی وا دەردەکەوێت کە "Dwem jar" بەر لە "Seyam jar" کاربکات، بەڵام بەهۆی ئەوەی کە کۆدەکان Asynchronous ـن، "Dwem jar" پاش ماوەیەک کار دەکات.

Blocking vs. Non-Blocking

Blocking شێوازێکە لە کۆد کە تێیدا دێڕێک کۆد ڕێگرە لەوەی کۆدەکانی دوای خۆی بکەونە کار تاوەکوو ئەو دێڕە کارەکانی خۆی تەواو نەکا.

بە نموونە:

alert("Yekem jar");
var value = localStorage.getItem('foo');
alert("Dwem jar");

دێڕی دووەم ڕێگر دەبێت کە دێڕی سێیەم بکەوێتە کار تاوەکو دێڕی دووەم کارەکانی تەواو نەکا. بیر بکەرەوە ئەگەر دێڕی دووەم پێویستی بە کاتێکی زۆر بێت، دێڕی سێیەم دەبێت چاوەڕێ بکات تا کۆتایی ئەو ماوەیە.

Non-Blocking جۆرێکە لە کۆد کە تێیدا دێڕی دوای خۆی پێویست ناکات چاوەڕێ بکات بۆ کۆتایی هێنانی کارەکان. نموونە:

alert("Yekem jar");
fetch('webchin.org').then(() => alert("Dwem jar"));
alert("Seyam jar");

تێبینی بکە کە "Yekem jar " ڕاستەوخۆ کاردەکات. دوا بەدوای ئەو هەوڵدەدەین هەنێک داتا لە webchin.org وەربگرینەوە. ئەگەرچی ئەم کردارە ڕەنگە تووڵ بکێشێ، بەهۆی ئەوەی کۆدەکە Non-blocking ـە، "Seyam jar" یەکسەر کار دەکات پاشان ئەگەر وەرگرتنەوەی داتا سەر کەوتوو بێ "‌Dwem jar" کاردەکات. ئەمە واتای ئەوەیە دێڕی سێیەم دەستخەڕۆ نابێ بەدەست دێڕی دووەمەوە و پێویست ناکات چاوەڕێی بکات.


------------------------------------------------------------------------------------

لە دڵی Node JS ـدا چەمکەکانیAsynchronous و Non-blocking هەیە. Node لەسەر یەک Thread کاردەکات لەنێو Loop ێکی گەورەدا کە وا دەکات کۆدەکان لە ڕادەبەدەر خێراتر کار بکەن و هیج کۆدێک ڕێگر نەبێت لە کارکردنی کۆدێکی تر.

ئەگەر لە جیهانی PHP  ـیەوە سەیرە ئەم چەمکانە بکەیت، ڕەنگە هەنێک زەحمەت بێ خێرا تێ بگەیت بەهۆی ئەوەی PHP زمانێکی Blocking ـە، ئەمە بە مانای ئەوەی PHP لەسەر بنەمای Blocking، یاخود ئەو شێوازەی کە هەموو دێڕێک بەدوای یەکدا هەڵدەسووڕێن و پێویستە دێڕەکان چاوەڕێی پێش خۆیان بکەن تا کارەکانیان تەواو دەبێت، هەرچەندە Laravel هەوڵی بەردەوامی هەیە بۆ بەهێزکردنی PHP لەو ڕووانەوە. PHP پاڵپشتی  Closure و Anonymous Functions دەکات، بەڵام هێشتا ڕەگەزەکانی Functional Programming تێیدا لاوازە بەراورد بە زمانێکی وەک JavaScript. بۆ ئەنجامدانی هەمان کاریگەری Asynchronous Code دیڤاڵۆپەرەکانی PHP زۆرجار پەنا بۆ ‌‌Threading دەبەن، کەکارێکی زۆر خۆش و ئاسان نییە بەتایبەتی کە ئەپڵیکەیشنەکەت گەورە دەبێت.

لەکۆتاییدا گرنگە کە ئەوە بڵێم کە Node زمانێکی نوێ نییە، بەڵکو ژینگەیەکە/Ecosystem/Environment ـێکە بۆ کارپێکردنی زمانی JavaScript لەسەر ڕاژەکار (Server).

نەرمەکاڵای بەڕێوەبردنی پاکجەکانی Node پێی دوەترێت NPM کورتکراوەی Node Package Manager ـە. لە ئێستادا جێگرەوەیەکی دیکەش بەناو Yarn ـەوە ڕوو لەهەڵکشانە کە هەمان کار ئەنجام دەدات.

Framework ـە دیارەکانی Node:

1. Hapi.js: https://hapijs.com/
2. Express.js: https://expressjs.com/
3. Meteor: https://www.meteor.com/
4. Sails.js: https://sailsjs.com/
5. AdonisJS: https://adonisjs.com/
6. Loopback: https://loopback.io/


کاتێکی خۆش.

2

وه‌ڵام: بۆچی Node JS؟

ئەک دەست و پەنجەت خۆشبێت، دەستپێکێکی باش بوو بۆ ناسینی ئەم زمانە کە بەنسبەت ئێمەوە تازیە،
بەهیوای بابەتی زیاتر لەو بارەوە، هەرسەرکەوتوبیت،
بژیت.

3 (دەستکاری کراوە: ڕێنوار 2018-05-12 14:05:08)

وه‌ڵام: بۆچی Node JS؟

دەستت خۆش بێت، شتێکی گرنگت ڕوونکردەوە، Single-Page Application  و Real-Time لە دنیای webدا، ئەمڕۆکە زۆرگرنگن و زۆر پێویستن، کە جێبەجێکردنی ئەوانە بە ڕێگا کۆنەکە زۆر زەحمەتە و ڕیگری زۆر دێنێتە پێش، بە واتایەکی تر
بەکارهێنانی LAMP - Linux, Apache, MySQL, PHP لەگەڵ LEMP - Linux, Nginx, MySQL, PHP بۆ مەسەلەکانی real-time زۆر زەحمەتن و پێویستی کۆدێکی زۆری javascript هەیە بۆ implement کردنی و لە کۆتایشدا ئەنجامەکەی ئەوە نیە کە چاوەڕێی دەکەیت،
لەکاتێکدا بەکار هێنانی MEAN - MongoDB, ExpressJS, AngularJS, NodeJS لەگەڵ MERN - MongoDB, ExpressJS, ReactJS, NodeJS کارەکانی زۆر ئاسانتر کردووتەوە.
پرسیاریک، ئایا هیچ ئاستەنگیەک هەیە تا ئێستا لە MERN و MEAN کە نەتوانریت بکرێت و واتلێبکات بگەڕێیتەوە سەر LAMP و LEMP؟
دووبارە سوپاس.
پێم خۆشە فێرکاریەک درووست بکرێت بۆ بەکارهێنانی ئەم ڕیگا نوێیە، ئایا کەس ئامادەیە لێرە وەک وێبچن بتوانین فێرکاری تەواوی لەسەر دابنێین؟

ئاسۆ نادری، ڕۆحت هەر لەگەڵمانە.

4

وه‌ڵام: بۆچی Node JS؟

ده‌سته‌كانت خۆشبێت بۆ ئه‌م بابه‌ته‌ هه‌رچه‌نده‌ نه‌مخوێنده‌وه‌ به‌لام دلنيابه‌ ده‌يخوێنمه‌وه‌ له‌ مه‌جالێكدا
به‌هيواى ئه‌وه‌ى به‌رده‌وام بيت و له‌گه‌ل ئه‌ندامه‌ كۆنه‌كانى پێشووش و بتوانين زياتر خزمه‌ت بكه‌ين وێب به‌ره‌و پێش ببه‌ين

هیچ شتێك ئه‌وه‌نده‌ باش نییه‌ نه‌توانرێت باشتر بكرێت (ئاسۆ نادرى).
Aso Nadri

5

وه‌ڵام: بۆچی Node JS؟

Govar_Programer نووسی:

ئەک دەست و پەنجەت خۆشبێت، دەستپێکێکی باش بوو بۆ ناسینی ئەم زمانە کە بەنسبەت ئێمەوە تازیە،
بەهیوای بابەتی زیاتر لەو بارەوە، هەرسەرکەوتوبیت،
بژیت.

زۆر سووپاس کاکە گۆڤار، چاوت ماچەکەم.

ڕێنوار نووسی:

دەستت خۆش بێت، شتێکی گرنگت ڕوونکردەوە، Single-Page Application  و Real-Time لە دنیای webدا، ئەمڕۆکە زۆرگرنگن و زۆر پێویستن، کە جێبەجێکردنی ئەوانە بە ڕێگا کۆنەکە زۆر زەحمەتە و ڕیگری زۆر دێنێتە پێش، بە واتایەکی تر
بەکارهێنانی LAMP - Linux, Apache, MySQL, PHP لەگەڵ LEMP - Linux, Nginx, MySQL, PHP بۆ مەسەلەکانی real-time زۆر زەحمەتن و پێویستی کۆدێکی زۆری javascript هەیە بۆ implement کردنی و لە کۆتایشدا ئەنجامەکەی ئەوە نیە کە چاوەڕێی دەکەیت،
لەکاتێکدا بەکار هێنانی MEAN - MongoDB, ExpressJS, AngularJS, NodeJS لەگەڵ MERN - MongoDB, ExpressJS, ReactJS, NodeJS کارەکانی زۆر ئاسانتر کردووتەوە.
پرسیاریک، ئایا هیچ ئاستەنگیەک هەیە تا ئێستا لە MERN و MEAN کە نەتوانریت بکرێت و واتلێبکات بگەڕێیتەوە سەر LAMP و LEMP؟
دووبارە سوپاس.
پێم خۆشە فێرکاریەک درووست بکرێت بۆ بەکارهێنانی ئەم ڕیگا نوێیە، ئایا کەس ئامادەیە لێرە وەک وێبچن بتوانین فێرکاری تەواوی لەسەر دابنێین؟

دەستخۆش کاکە ڕێنوار، بۆچوونەکانت 100% ڕاستە.

گەڕانەوە بۆ LAMP یان LEMP هێشتا گرنگە. Node JS گرنگە بۆ Input/Output بەڵام کە دێتە سەر Intensive Computation هێشتا لاوازە. نەک هەر داهاتوو بگرە هەنووکەی وێب بریتییە لە Node JS.

من لای خۆمەوە پلانی درووستکردنی چەند فێرکارییەکم هەیە لەسەر React و Express و GraphQL و Meteor و Mongo. هیوادارم ئێوەش دەستپێبکەن.


world نووسی:

ده‌سته‌كانت خۆشبێت بۆ ئه‌م بابه‌ته‌ هه‌رچه‌نده‌ نه‌مخوێنده‌وه‌ به‌لام دلنيابه‌ ده‌يخوێنمه‌وه‌ له‌ مه‌جالێكدا
به‌هيواى ئه‌وه‌ى به‌رده‌وام بيت و له‌گه‌ل ئه‌ندامه‌ كۆنه‌كانى پێشووش و بتوانين زياتر خزمه‌ت بكه‌ين وێب به‌ره‌و پێش ببه‌ين


هەربژیت، منیش هیوادارم.