NODE - notendur.hi.isosk1/vefforritun/2014/pdf/21.nodejs.pdf · NODE.JS Beislar kraft V8 með því...
Transcript of NODE - notendur.hi.isosk1/vefforritun/2014/pdf/21.nodejs.pdf · NODE.JS Beislar kraft V8 með því...
NODE.JSFYRIRLESTUR 21, 3. NÓVEMBER 2014ÓLAFUR SVERRIR KJARTANSSON, [email protected]
SAGANBúið til af Ryan Dahl og
Gerði tilraunir með C, Lua og Haskell en með útgáfu V8varð JavaScript fyrir valinu
Stutt af og í dag viðhaldið af
fyrst gefið út 2009
Joyent TJ Fontaine
NODE.JSNode.js er verkvangur (platform) byggður á V8 til að smíðahröð, skalanleg netforrit
Node.js notar atburðadrifið, ekki-blokkandi I/O módel semgerir það létt, skilvirkt og fullkomið fyrir rauntíma forritsem meðhöndla mikil gögn yfir dreifð kerfi
NODE.JSBeislar kraft V8 með því að skrifa lag ofan á það
core í node.js reynir að vera mjög einfalt – flækjan ípökkum
Mjög gott pakkakerfi, NPM, styður við þetta
Kynning frá Ryan Dahl
V8Open source JavaScript vél, hönnuð af Google fyrirChrome
Skrifuð í C++ og útfærir ECMAScript, þriðju útgáfu
Þýðir JavaScript í vélamál fyrir keyrslu í staðinn fyrir aðtúlka og með ýmsum bestunar aðferðum keyrir JavaScripthratt
https://developers.google.com/v8/
ÚTGÁFURÚtgáfur af node.js eru stöðugar fyrir jafnar tölur enóstöðugar fyrir odda tölur
Núverandi stöðuga útgáfa er 0.10
Óstöðug útgáfa er 0.11 sem mun verða gerð stöðug fyrir0.12
UPPSETNINGSeinustu útgáfur hafa bætt töluvert stuðning við stýrikerfiog uppsetningu
Í dag eru til pakkar fyrir Windows, Machintosh og Linuxsem auðvelt er að setja upp
NPM fylgir með
http://nodejs.org/download/
REPLNode.js kemur með REPL – Read-Eval-Print Loop
Skel fyrir Node.js sem getur verið mjög hjálpleg í að prófaokkur áfram eða debugga kóða
node> foo = 11> _ + 2 (_ gefur aðgang að seinasta skilagildi)3
LIBUVÍ fyrstu var node.js skrifað með libev sem veitir eventloopu, en það er aðeins fyrir Unix
libuv er útfærsla sem keyrir á mörgum stýrikerfum ogfókusar á async I/O
Node.js getur þar með keyrt á Windows
Orðið nokkuð þroskað verkefni og notað af fleirum í dag
ATBURÐADRIFIÐNode.js forrit eiga að vera atburðadrifin – erfitt að skrifaekki þannig
Gefum upp callback fall fyrir hluti sem taka tíma, kallað íþað þegar aðgerð klárast
Allar aðgerðir í core sem gera eitthvað í lengri tíma takavið callback
Node.js er sjálfgefið keyrt í einum process, þar sem CPU eryfirleitt ekki það sem takmarkar
Þ.a. ef við blokkum -- bíðum eftir I/O, minni, neti o.sfr. þáblokkar allt node.js keyrsluumhverfið
EKKI-BLOKKANDI I/O –ASYNC I/O
I/O er ótrúlega hægt m.v. annað sem við gerum
Þegar við biðjum um I/O í node.js sendum við atburði semverða keyrðir þegar stýrikerfi er búið
Þurfum því ekki að bíða! Gerum eitthvað nytsamlegt ámeðan
ASYNC I/O - DÆMIvar fs = require('fs');
fs.readFile(__dirname + '/data.txt', function (err, data) { console.log(data);});
CALLBACKSLang flest API í node.js taka við callbacks
Ef villa kom upp eru gögn í err, annars eru niðurstöður ídata
function (err, data) { }
CALLBACK HELLEf við framkvæmum margar async aðgerðir hverja á eftirannari, förum við að dragast óþarflega langt til hægri
Getum forðast með því að:
nota ekki nafnlaus föll í callbacks
halda kóðanum grunnum
skipta kóða upp í módúla
http://callbackhell.com/
GLOBAL BREYTAN PROCESSÍ vafra höfum við window
Í Node.js höfum við process
Gefur okkur aðgang að umhverfi
DEBUGGERGetur verið erfitt að debugga event drifin kóða, svipað og ívafra
Getum notað V8 debugging með því að setja debugger; íkóða
Keyrum með node debug og fáum þá gdb-líkt viðmót tilað debugga
Hægt að fá sjónræn tól, t.d. node-inspector
VEFÞJÓNN Í NODE.JSvar http = require('http');
http.createServer(function (request, response) { response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World\n');}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
EVENTEMITTERSObserver pattern
Getum látið vita þegar eitthvað á sér stað, hentar vel fyrirasync aðgerðir
Erfum EventEmitter og getum þá notað emit() fall til aðframkalla atburð sem fólk getur skráð sig á með on()
STRAUMARHugmyndin um strauma hefur verið til síðan unix var aðverða til
Hver hlutur gerir einn hlut vel og síðan streymiru á milliþeirra – búum til stórt kerfi úr mörgum litlum
Virkar vel með async I/O og mikið notað í Node.js
LESA SKRÁ ÁN STRAUMAvar http = require('http');var fs = require('fs');
var server = http.createServer(function (req, res) { fs.readFile(__dirname + '/data.txt', function (err, data) { res.end(data); });});server.listen(8000);
Bíðum eftir allri skránni í minni áður en nokkuð gert
LESA SKRÁ MEÐ STRAUMUMvar http = require('http');var fs = require('fs');
var server = http.createServer(function (req, res) { var stream = fs.createReadStream(__dirname + '/data.txt'); stream.pipe(res);});server.listen(8000);
Streymum skjali frá okkur yfir í HTTP strauminn
STRAUMAHANDBÓKIN er mjög afkastamikill node.js
forritari
Yfir
Heldur úti , flest allt sem þú þarft að vitaef þú ert að vinna með strauma í node.js
James Halliday / substack
400 pakkar á NPM
Stream Handbook
UMSTRAUMABRIAN W. KERNIGHAN
MÓDÚLARGetum og ættum að búa til módúla úr forritunum okkar
Skipta virkni í minni einingar sem auðvelt er að hugsa um
Node.js kemur með nokkrum módúlum, við getum skrifaðokkar eigin og sótt í gegnum NPM
MÓDÚLARFærum ákveðna virkni í módulinn foo, og notum svo varfoo = require('./foo');
Búum til möppu með virkni og
index.js með virkni
package.json sem lýsir virkni
npm init leiðir okkur í gegnum þetta
Útfærum virkni og exportum með
module.exports = virkni
NPM
"Node Packaged Modules"
NPMGetum búið til okkar módúl og installað með NPM
npm install <module name>
Þurfum að skilgreina
package.json með name og version
readme.md með skjölun
Kóða
Gott til að dreifa kóða í stærri verkefnum eða til að gefa útmeð NPM
EXPRESSWeb app framework fyrir node
Smátt í sniðum en gefur möguleika á middleware til aðbæta við hegðun
Notaði Connect middleware sem gefur aðgang að t.d.logger, authentication, json o.s.fr. en það er allt núna settsérstaklega upp
MIDDLEWAREMiddleware er hugbúnaður sem tengir forrit
Í frameworkum er þetta yfirleitt einhverskonar pluginarkítektúr sem keyrir fyrir hvert request/response
Bætir við ákveðinni virkni í request eða response
EXPRESS/CONNECTMIDDLEWARE
Middleware er bætt við á "stack" þar sem tekið er við req,res og next færibreytum þar sem:
req er hlutur sem inniheldur request frá client
res er hlutur sem inniheldur svar frá server
next er fall sem keyrir næsta middleware
fyrir logging, til að parse'a cookies
O.fl.,
morgan cookie-parser
listi hjá Connect
EXPRESS - UPPSETNINGnpm init - búum til package.json
npm install express --save - setur express semdependency
npm install express-generator -g - tól sem scaffoldarvef fyrir okkur
express myapp - útbýr myapp í núverandi möppu
npm install - sækir öll dependency fyrir myapp
DEBUG=myapp ./bin/www eða set DEBUG=myapp & node.\bin\www á windows til að keyra