Understanding node.js (node.js қалай жұмыс жасайды?)

Node.js мен сөйлескен адамдарда екі түрлі реакция шақыратын.
Негізінен олар оны қандай болса солай қабылдайтын, ал көпшілігі шатасып оның шын
мәнінде не екенін түсінбейтін.

Егер сіз екінші топқа жататын болсаңыз мен сізге Node.js не екенін түсіндіруге әрекет жасап көремін:

— Бұл командалық жолақтың құралы. Сіз архив файлды жүктеп аласыз, компиляция жасайсыз және оны орнатасыз.
— Ол сізге JavaScript бағдарламаларын node my_app.js командасы арқылы орындауға мүмкіндік береді.
— JavaScript V8 қозғалтқышы арқылы жұмыс жасайды (Google Chrome осының арқасынан тез жұмыс жасайды).
— Node.js желімен және файлдық жүйемен JavaScript арқылы жұмыс жасауға API береді.

«Бірақ мен өзіме қажет нәрсені Python, Ruby, Java, PHP тілдері арқылы да істей аламын ғой ...!».

Иә, мен мұндайды талай есіткем. Және сіздікі дұрыс! Node сізге қажет барлық нәрсені
істеп бере салатын сиқыршы емес. Бұл жай ғана құрал, және ол қазіргі кезде қалған
құралдардың орнын баса да алмайды, әрине, бұл тек қазірге.

«Нақтырақ айтсаңыз!»

Жақсы. Node-ні сізге бір мезетте бірнеше нәрсені орындау керек болғанда қолдану қолайлы. Сіз, бұрын-соңды код жазып болған соң «Мен бұл кодтың параллель орындалуы қалаймын» дегенсіз бе? Міне, Node сіздің кодыңыздан басқа барлығын параллель орындайды.

«Немене?»

Барлығы дұрыс, сіздің кодыңыздан басқа барлығы параллель орындалады. Мұны түсіну үшін, елестетіп көріңіз, сіздің кодыңыз, ол — Патша, ал Node — ол қызметшілер.

Әрбір күн, бір қызметкер патшаға келіп, не істеу керектігін сұраудан басталады. Патша қызметкерге істеу керек нәрселердің тізімін береді де, әрі қарай ұйықтай береді. Қызметкер бұл тізімде қалған қызметкерлермен бөліседі де, олар жұмыс істеуді бастады.

Қызметкер тапсырманы орындап бола салып, патшаға келеді де, тапсырманың орындалғаны туралы баяндайды. Патша бір уақытта тек бір ғана қызметкерді қабылдайды. Кейде, патша баяндамадан соң қызметкерге басқа тапсырмалар тізімін береді.

Қызметкерлер тапсырмаларды әрқайсысы бөлек, бірақ қатар (параллель) орындайды. Бірақ, олар патшаға жұмыс нәтижесі туралы бір-бірлеп баяндайды.

«Бұл тамаша, бірақ сіз осыны метафорасыз айта аласыз ба?»

Әрине. Node.js-те жазылған қарапайым бағдарлама мынандай болады:


        var fs = require('fs')
	  , sys = require('sys');

	fs.readFile('treasure-chamber-report.txt', function(report) {
	  sys.puts("oh, look at all my money: "+report);
	});

	fs.writeFile('letter-to-princess.txt', '...', function() {
	  sys.puts("can't wait to hear back from her!");
	});


Бұл код Node-ға 2 тапсырма береді де, әрі қарай ұйқы режиміне өтеді. Node тапсырманы орындап болған соң, кері шақыру функциялары орындалады. Бірақ, бір уақытта осындай функциялардың біреуі ғана орындала алады. Сонымен бірге, олардың қандай ретпен орындалуына ешқандай кепілдік жоқ.

«Демек әр түрлі функциялардан мәліметтерге бір уақытта қол жетімділік болуы туралы бас қатырмасам да болады?»

Сіз түсіндіңіз! Иә, бұл JavaScript тіліндегі бір бағыттылық циклі дизайнының тамаша салдары.

"Өте жақсы, бірақ мен не үшін оны қолдануым керек?"

Негізгі себептердің бірі тиімділік. Веб бағдарламада жауап беру уақыты деректер қорына барлық сұраныстардың орындалып болуына байланысты. Node қолдана отырып сіз деректер қорына сұраныстарды бір уақытта орындай аласыз, сонда жауап беру уақыты ең ұзақ орындалатын сұраныстың уақытына дейін төмендейді.

Тағы бір себеп JavaScript қолданылуында. Node пайдалану арқылы серверге жазылған кодты клиент үшін де пайдалануға болады. JavaScript универсалды тіл болу жағына қарап дамып келеді.

Және соңғы себеп ол жылдамдық. V8 динамикалық тілдерде орындауда өте жылдам. Мен JavaScript сияқты осыншалық жылдам орындалатындай басқа тілді білмеймін. Сонымен бірге, Node-да енгізу/шығару операциялары оңтайландырылған және, жүйенің бар мүмкіндігін толығымен қолдануға мүмкіндік береді.

«Сонымен сіз мен бағдарламаларды Node-да жазуым керек демекшісіз бе?»

Иә және жоқ. Егер сіз Node-ні балғаны қолданатындай дәрежеде үйреніп алсаңыз, тапсырмалар сізге шегедей болып көрінеді. Ал егер сіз уақыты шектеулі жобамен жұмыс жасап жатқан болсаңыз, сіз Node-ні келесі сұрақтарға жауап беру арқылы таңда аласыз:
— Қысқа жауап беру уақыты маңызды ма? Node осыған жетуге көмектесе алады.
— Жоба қаншалықты үлкен? Үлкен емес жобалар үшін node өте жақсы қолданылады. Ал егер жоба үлкен болса жақсылап анализ жасалуы керек (қажетті библиотекалар бар ма, қателерді түзеу үшін адам ресурсы жеткілікті ме және т.с.с).

«Node Windows жүйесінде жұмыс жасай ма?»

Жоқ. Егер сіз Windows пайдаланатын болсаңыз сізге виртуалды машина қажет. Windows-ты қолдау жобада бар, бірақ тынысыңызды тарылтып бірнеше ай күтудің орнына, көшіруге көмектесе аласыз.

«Node арқылы DOM-мен жұмыс жасай аламын ба?»

Тамаша сұрақ! Жоқ, DOM браузерде анықталған, ол V8 қозғалтқышынан бөлек. Бірақ сонда да, Node-ға DOM-мен жұмыс жасай алатын модуль жазып жатқан адамдар бар, ол өте қызықты мүмкіндіктерді ашуы мүмкін, мысалы, клиенттік кодты Node арқылы тестілеу.

«Оқиғалық тілдерде бағдарламалау шынымен де қиын ба?»

Ол өзіңізге байланысты. Егер сіз AJAX сұраныстары және браузердегі пайдаланушылық оқиғаларды пайдалануды жақсы меңгерген болсаңыз, Node-ға үйрену қиын болмауы керек.

Қалай болғанда да, TDD сізге қолдау оңай бағдарламалар жазуға мүмкіндік береді.

"Қазіргі кезде Node-ні кімдер пайдаланады?"

Толық емес тізім викида бар («Companies using Node» деген жерге дейін түсіңіз). Yahoo Node және YUI-мен эксперименттер жасап жатыр, Plurk оны Comet сервер үшін пайдаланады, Paul Bakaus (JQueri UI командасы) ойын қозғалтқышын жазып жатыр.

А, иә, Heroku Node бағдарламалар хостингін ашқанын жариялады.

«Көбірек мәліметті қайдан ала аламын?»

Tim Caswell How To Node атты тамаша блог ашты. Твиттерде #nodejs хэштегін бақылаңыз. Таратылымға жазылыңыз. Және IRC-ке келіңіз, #node.js.

Мен де debuggable.com блогымда жазып тұрамын.

Бүгіндікке осы. Сұрақтарыңыз болса пікір жазудан ұялмаңыз!

— Felix Geisendörfer

Бұл мақала аударма. Түпнұсқа.

  • +4
0 пікір
Тек тіркелген қолданушылар ғана пікір қалдыра алады.