අපි වෙබ් අඩවියකට හෝ මොබයිල් ඇප් එකකට ගිය විට අපිට පෙනෙන දේවල්, එනම් ලස්සනට නිර්මාණය කර ඇති බොත්තම්, පින්තූර, ලේඛන, සහ සමස්ත පෙනුම (User Interface) අයත් වන්නේ **Frontend** එකටයි. නමුත්, ඔබ ලියාපදිංචි (register) වන විට, ලොග් වන විට, යම්කිසි තොරතුරක් save කරන විට, හෝ යම්කිසි දෙයක් search කරන විට, ඒ සියලු දේ ක්රියාත්මක වන්නේ අපිට නොපෙනෙන පැත්තකයි. ඒ නොපෙනෙන පැත්ත තමයි **Backend** ලෙස හඳුන්වන්නේ.
සරලවම කිවහොත්, Backend එක යනු යෙදුමක (application) මොළය සහ කොඳු නාරටිය වැනිය. Frontend එකෙන් එවන ඉල්ලීම් (requests) භාරගෙන, ඒවාට අවශ්ය දත්ත සැකසීම, දත්ත ගබඩාවල (databases) තොරතුරු ගබඩා කිරීම, සහ නැවත Frontend එකට ප්රතිචාර (responses) යැවීම Backend එකේ ප්රධාන කාර්යභාරයයි.
උදාහරණයක් ලෙස, ඔබ Facebook එකේ post එකක් දාන විට, ඔබ type කරන text, upload කරන පින්තූරය, සහ "Post" බොත්තම ඔබන එක Frontend එකේදී සිදු වේ. ඔබ "Post" බොත්තම ඔබනවාත් සමඟම, ඒ සියලු තොරතුරු Backend එකට යවනු ලැබේ. Backend එක එම තොරතුරු Facebook දත්ත ගබඩාවේ (database) ගබඩා කර, ඔබේ මිතුරන්ගේ news feed වලට එම post එක පෙන්වීමට අවශ්ය කටයුතු සූදානම් කරයි.
Frontend (Client-Side) | Backend (Server-Side) |
---|---|
පරිශීලකයාට පෙනෙන සහ අන්තර්ක්රියා කරන කොටස. | පරිශීලකයාට නොපෙනෙන, තිරය පිටුපස ක්රියාත්මක වන කොටස. |
HTML, CSS, JavaScript වැනි තාක්ෂණයන් භාවිතා වේ. | Node.js, Python, Java, PHP වැනි තාක්ෂණයන් භාවිතා වේ. |
User Interface (UI) සහ User Experience (UX) නිර්මාණය කරයි. | Database කළමනාකරණය, business logic, සහ API නිර්මාණය කරයි. |
Node.js යනු backend development සඳහා ඉතා ජනප්රිය තාක්ෂණයකි. එය Google Chrome හි V8 JavaScript engine එක මත නිර්මාණය කර ඇති අතර, JavaScript භාෂාවෙන් backend applications ලිවීමට අපට ඉඩ සලසයි. Node.js හි සාර්ථකත්වයට ප්රධාන හේතු දෙකක් වන්නේ එහි **Event-Driven Architecture** සහ **Non-Blocking I/O** ಮಾതൃකාවයි.
Event-Driven Architecture යනු යම්කිසි සිදුවීමක් (event) සිදු වූ විට ඊට අදාළ ක්රියාවලියක් (function) ක්රියාත්මක වීමයි. Node.js හිදී, බොහෝ දේ events මත පදනම් වේ. උදාහරණයක් ලෙස:
මෙම සෑම සිදුවීමක්ම event එකකි. Node.js මෙම events වලට සවන් දෙමින් (listening) සිටින අතර, event එකක් සිදු වූ විට ඊට අදාළව ලියා ඇති code එක (callback function) ක්රියාත්මක කරයි. මේ නිසා, Node.js එකට එකවර වැඩ කිහිපයක් කාර්යක්ෂමව කිරීමට හැකියාව ලැබේ.
මෙය තේරුම් ගැනීමට, අපි සාමාන්ය (Blocking I/O) සහ Node.js (Non-Blocking I/O) ක්රියා කරන ආකාරය සලකා බලමු.
Blocking I/O (සාම්ප්රදායික ක්රමය):
හිතන්න ඔබ අවන්හලකට ගියා කියා. එහි එක වේටර්වරයෙක් (waiter) ඉන්නවා. ඔබ order එක දුන් පසු, ඒ වේටර්වරයා කුස්සියට ගොස්, ඔබේ φαγητό එක හැදෙනකම් බලාගෙන ඉඳලා, ඒක අරගෙනම තමයි ඊළඟ customer ගාවට යන්නේ. මේ අතරතුර, අනිත් customersලාට තමන්ගේ order එක දෙන්නවත්, වේටර්වරයාගෙන් ප්රශ්නයක් අහන්නවත් බෑ. මේක තමයි Blocking කියන්නේ. එක වැඩක් ඉවර වෙනකම්, අනිත් වැඩ සියල්ල නැවතිලා.
Non-Blocking I/O (Node.js ක්රමය):
දැන් හිතන්න වෙනත් අවන්හලකට ගියා කියා. එහිත් ඉන්නේ එක වේටර්වරයෙක්. නමුත් මෙයා හරිම කාර්යක්ෂමයි. ඔබ order එක දුන් පසු, ඒ වේටර්වරයා ඒක කුස්සියට දීලා, "මේක හැදුවම මට කතා කරන්න" කියලා, එතන බලාගෙන ඉන්නේ නැතුව, ඊළඟ customer ගාවට ගිහින් එයාගේ order එක ගන්නවා. කුස්සියෙන් ඔබේ φαγητό එක ලෑස්තියි කියලා කතා කරාම, වේටර්වරයා ඒක අරන් ඔබට ගෙනත් දෙනවා. මේ ක්රමය නිසා, එක වේටර්වරයෙකුට එකවර customersලා ගොඩකගේ වැඩ කරන්න පුළුවන්. එක වැඩක් වෙනකම් අනිත් වැඩ නැවතිලා ඉන්නේ නෑ. මේක තමයි Non-Blocking කියන්නේ.
Node.js හි I/O operations (file කියවීම, database එකකට කතා කිරීම, API request එකක් යැවීම වැනි) සියල්ල Non-Blocking ආකාරයට සිදු වේ. Node.js එම කාර්යය operating system එකට පවරා, "මේ වැඩේ ඉවර වුණාම මට කියන්න" කියා, ඊළඟ request එකේ වැඩ පටන් ගනී. මේ නිසා, Node.js එක thread එකක් (single thread) භාවිතා කරත්, එකවර requests දහස් ගණනක් handle කිරීමට එයට හැකියාව ලැබේ.
// Blocking Code Example (Synchronous)
const fs = require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read
console.log(data);
console.log('This will print after the file is read.');
// Non-Blocking Code Example (Asynchronous)
const fs = require('fs');
fs.readFile('/file.md', (err, data) => { // doesn't block
if (err) throw err;
console.log(data);
});
console.log('This will print before the file is read.');
ඉහත Non-Blocking උදාහරණයේදී, readFile
function එක file එක කියවන්න පටන් ගත්තත්, program එක නැවතී ඉන්නේ නැහැ. එය ඊළඟ line එක, එනම් console.log('This will print...')
එක run කරනවා. File එක කියවා අවසන් වූ පසු, callback function එක ((err, data) => {...}
) ක්රියාත්මක වී, file එකේ content එක print කරයි.
Node.js සමඟ backend development පටන් ගැනීමට, පළමුවෙන්ම එය අපේ පරිගණකයේ ස්ථාපනය (install) කරගත යුතුය. Node.js install කරන විට, **npm (Node Package Manager)** ද ඒ සමඟම install වේ. npm යනු JavaScript code libraries දහස් ගණනක් අඩංගු විශාලතම software registry එකයි. අපේ projects වලට අවශ්ය විවිධ packages (උදා: Express.js) install කරගන්න අපි npm භාවිතා කරනවා.
පළමුව, Node.js හි නිල වෙබ් අඩවිය වන nodejs.org වෙත පිවිසෙන්න. එහි ඔබට download කර ගැනීමට options දෙකක් පෙනේවි:
අපි අපේ පාඨමාලාව සඳහා **LTS version** එක download කරගනිමු.
.msi
file එක double-click කර installation wizard එක open කරගන්න..pkg
file එක double-click කර installer එක open කරගන්න.Node.js සහ npm නිවැරදිව install වී ඇත්දැයි පරීක්ෂා කිරීමට, ඔබේ command prompt (Windows) හෝ terminal (macOS/Linux) එක open කර, පහත commands type කර enter කරන්න.
Node.js version එක බැලීමට:
node -v
ඔබට v18.17.1
වැනි version number එකක් පෙනේවි.
npm version එක බැලීමට:
npm -v
ඔබට 9.6.7
වැනි version number එකක් පෙනේවි.
මෙම commands දෙකම නිවැරදිව version numbers පෙන්නුම් කළේ නම්, ඔබ Node.js සහ npm සාර්ථකව ස්ථාපනය කරගෙන අවසන්!
දැන් අපි අපේ පළමු Node.js script එක ලියා run කර බලමු.
my-nodejs-app
).app.js
නමින් file එකක් සාදාගන්න.app.js
file එක open කර, පහත code එක type කරන්න:
console.log("Hello, Node.js World!");
cd path/to/my-nodejs-app
node app.js
ඔබේ terminal එකේ "Hello, Node.js World!" ලෙස output එක පෙනේවි. සුභ පැතුම්! ඔබ ඔබේ පළමු Node.js program එක සාර්ථකව run කර අවසන්.