1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu node js và xây dựng trang web đọc nguồn tin

146 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm hiểu Node.js và Xây dựng Trang web Đọc Nguồn tin
Trường học Trường Đại Học Ngoại Ngữ - Tin Học Thành phố Hồ Chí Minh
Chuyên ngành Khoa Công Nghệ Thông Tin
Thể loại Báo cáo
Năm xuất bản 2013
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 146
Dung lượng 16,93 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Xuit phat ill cac 1y do tren, chung toi dff thlJc hi~n d~ tai "Tim hieu Node.js vaxay dlJng trang web dQc ngu6n tin" Trong d~ tai nay, chung toi tim hieu v~ nhung ki€n thlic cO'ban c~n b

Trang 1

DO GIAO DUC vA BAo TAO .TRUONG BAI HOC NGOAI NGU - TIN HOC TP.HCM

KHOA CONG NGH~ THONG TIN

Giang vien htrOng din: ThS Nguy~n PhtrO'e B,iSinh vien th'1c hi~n:

Binh Kim Quac Khai - MSSV: 09DHII031Ngo Van Kim Khanh - MSSV: 09DHII025

TP HO cHi MINH - 2013

Trang 2

L01 CAM ON

Lai cam on d~u tien, chung toi xin phep dugc gui dSn quy th~y co trong khoa

Cong Ngh~ Thong Tin, cling nhu cac th~y co cua truang B;;ti hQc Ngo;;ti

Ngu-Tin HQc da: truy~n d;;tt rftt nhi~u kiSn thuc va ky nang huu feh trong su6t qua

trinh hQc ~p, ren luy~n t;;titruang.

D?c bi~t, v6'i long kinh trQng va biSt on sau s~c, chung toi cling xin gui dSn

nguai th~y cua chung toi - Th~y Th~y Nguyen Phuac D;;ti lai cam on chan

thanh nh<1tvi da: hSt long t;;tOdi~u ki~n thu?n lai, d9ng vien chung toi hoanthanh t6t nh<1tnghien cuu nay sao cho khoa hQc va mang tinh ung ~\lng cao.Xin chan thanh cam on SlJ giup dO',d9ng vien va chi bao r<1tnhi~t tinh cua cacanh chj va t<1tca cac b;;tn, nhilng nguai da: giup chung toi c6 du nghj llJc va ychi de hoan thanh lu?n van nay

M?c du da: c6 g~ng hSt suc, song ch~c ch~n lu?n van khong kh6i nhung thiSus6t Chung toi rftt mong nh?n dugc SlJ thong cam va chi bao t?n tinh cua quyTh~y Co va cac b;;tn

Nh6m sinh vien thlJc hi~n

Dinh Kim Qu6c Khai va Ngo Van Kim Khanh

Trang 3

Ly do chQn d~ tili

Cling v6i SlJ phat trien m~nh me clla cac website va ling d1)ng tren n~n tangweb, cac cong ngh~ m6i ngay cang phat trien de dap frng kip nhu c~u k€t n6iInternet ngay cang tang cao clla con nguo'i.

G~n day, Node.js tra thanh mQt trong nhung cong ngh~ thuOng xuyen duqcnh~c d€n va dang nh~n duqc nhi~u SlJ quan tam va h6 trq nhi~t tinh bai caccong ty 16n nhu Microsoft, RedHat, Amazon, Nam 2012, Node.js duqc t~pchi Info World binh chQn 1a cong ngh~ Clla nam Hi~n nay, tren cQng d6ngm~ng, Node.js lien t1)c duqc d6ng g6p, b6 sung va phat trien bai hang 10~t l~ptrinh vien tv nguy~n Tuy nhien, do Node.js v~n con non tn~, c6 nhi~u diemkhac bi~t so v6i cach l~p trinh truy~n th6ng, doi hoi mQt1uqng ki€n thlic nhitdinh ill cac l~p trinh vien, ph~n 16n nguai m6i b~t d~u c6 the g?P mQt s6 kh6khan khi ti€p c~n v6i cong ngh~ nay

Xuit phat ill cac 1y do tren, chung toi dff thlJc hi~n d~ tai "Tim hieu Node.js vaxay dlJng trang web dQc ngu6n tin"

Trong d~ tai nay, chung toi tim hieu v~ nhung ki€n thlic cO'ban c~n bi€t, cachthlic ho~t dQng, cac diem c~n chu y Clla Node.js va xay dlJng mQt Frameworkgiup de dang ti€p c~n v6i cong ngh~ nay cho nhfrng ai v~n con quen thuQc v6icach l~p trinh, phat trien ling d1)ng web truy~n th6ng d6ng thai dlJa vao d6phat trien mQt ling d1)ng web minh hQa nhfrng gi dff thlJc hi~n duqc

Lu~n van duqc chia thanh 5 chuang v6i nQi dung C1)the nhu sau:

Chuang 1: Gi6i thi~u t6ng quan v~ Node.js: Gi6i thi~u khai quat v~ congngh~ Node.js cling nhu khai ni~m, 1ichsu phat trien, cac d?c diem, cac bu6cd.n bi€t khi b~t d~u phat trien v6i Node.js nhu cai d?t, IDE, thu vi~n, tv xaydlJng mQt Framework c6 ciu truc ho~t dQng dlJa tren mo hinh MVC

Chuang 2: Gi6i thi~u v~ NoSQL va MongoDB: Gi6i thi~u cO'sa du li~uNoSQL rna dien hinh nhit 1a MongoDB v6n dang duqc su d1)ng rQng rffi choNode.js

Trang 4

ChU011g 3: Xay d\fng ung dl;lng minh hQa: Phan tich, thiet ke trng dl;lng dQC

ngu6n tin RSS tr\fc tuyen

ChU011g 4: Trien khai tren di~n tmin dam may: Gi6'i thi~u cac bu6'c de t~lO,

trien khai m9t ung dl;lng tren dich V\l cua OpenShift.

Chu011g 5: T6ng ket

Y nghia ella ct~tiii

us Uti nghien CUu vS Node.js va cac ung dl;lng th\fc tien trong phcit trien cac

phc1nmSm, dich Vl;lm:;mg, d6ng thai cung cAp cai nhin sa lugc vS xay d\fllg va

trien khai ung dl;lng su dl;lng nSn tang dam may, giup tang cuang hi~u qua,

nang cao chAt luqng, giam chi phi

Trang 5

Ml}C Ll}C

1.2/ Ljch su hinh thanh, m\lc tieu va SlJphat trien cua Node.js 14

1.4.3/ B6 sung thu vi~nnha Node package manager (NPM) 31

1.6.3/ C~u truccua JAWN (JAWN is Another Web-framework for

Trang 6

CHUONG 2/ CO SO DO' LIEU NOSQL vA MONGODB 78

2.2.3/ Giam SlJ hi~n di~n cua cac nha quan trj cO' sa dfr li~u (DBAs

Trang 7

3.41Ket Iu~n 133

PHl) Ll)C A: Thiet l~p m6i truang cho PhoneGap 145PHl) Ll)C B: M(>t86 thu~t ngfr 8U d\lng trong lu~n van 147

Trang 8

DANH sAcH cAc BANG BlED vAHINH vi

Hinh 1-2 s6 luqng website, server trien khai c6ng ngh~ Node.js (Ngu6n:

Hinh 3-1 Bieu tuqng RSS tren cac trang khi co ngu6n tin 95Hinh 3-2 N<)idung RSS khi dugc chuyen b~ng XSLT 99

Trang 9

Hinh 3-5 Chuc nang dang nh~p 104

Trang 10

Hinh 3-7 Giao di~n c~p nh~t thong tin nguai dung 123

Trang 11

Chuang 1/Giai thi?u t6ng quan v~ Nodejs

CHUONG 11GIm THI~U TONG QUAN VE NODE.JS

14

1.11Khai ni~m Node.js

Node.js la nSn Umg giup cac nha phat tri~n ung dVng chi c~n dung ng6n ngfrJavascript d~ l?p trinh cho ca phia client va phia side, thay vi phai su dVngPHP, Ruby in Rails, Perl, nhu truac day d~ thlJc hi~n

Node.js rna ra mQt ky nguyen mai vS l?p trinh web do

- Kha nang ch~y JavaScript tren mQt may ao V8 JavaScript Engine r~t nhanh,t6c dQxu Iy dang kinh ng~c

- Kha nang quan Iy hang ngan SlJ ki~n d6ng thai va I?p trinh theo phong cachmai, t?n dVng thai gian thlJc thi I/O d~ phvc vv tiep cac yeu c~u dang dgi xu

Iy (ngugc I~i vai Java, C# hay mQt s6 cac ng6n ngfr I?p trinh khac)

- Giup mQt server co th~ gifr ca chvc ngan ket n6i song song cung Iuc, Ia khanang s6ng con cho nhfrng trang web c~n tinh nang xu Iy theo thai gian thlJchi~n nay - mQt xu huang thai d~i khi nhu c~u va t6c dQ Internet cang tang,smartphone, tablet ra dai nhu vu bao

1.2/ Lich sfr hinh thanh, ml}c tien va S,! phat tri~n cua Node.js

1.2.11Lich Slf hinh thanh

Joyent Ia t6 chuc qu6c te chuyen cung c~p ph~n mSm h~ th6ng, di~n toan dammay va cac goi h6 trg ky thu?t cho cac t6 chuc, doanh nghi~p va nha phattri~n NSn tang di~n toan dam may cua Joyent dugc cac c6ng ty tien tien trenthe giai ung dVng d~ tri~n khai dich vv tieu bi~u nhu m~ng xa hQi tuy~n dVngLinkedIn, c6ng ty kinh doanh trlJc tuyen Gilt Groupe, c6ng ty phat tri~n gametren m~ng xa hQi Kabam,

Trang 12

Chuang 1/GiOi thi?u t6ng quan vJNodejs

Hinh 1-1 L~p trinh vU!n Ryan Lienhart Dabl

15

Ryan Lienhart Dahlia mQt l~p trinh vien tt.rdo qu6c tich My, sinh ra va 100len a Rochester, New York, hi~n dang sinh s6ng va lam vi~c cho cong tyJoyent tc;liSan Francisco Linh Vl,fCnghien cUu chinh cua Ryan la interruptibleparsers, event loops, response time histograms, phat trien nen tang webservers vm mQt s6 d\f an ngu6n rna tieu bieu nhu Ebb web server va module

"EY" load balancer cho Nginx

D\fa tren nhfrng kinh nghi~m tich lfiy ill qua trinh lam vi~c, Ryan da cho radOi nen tang Node.js ill nam 2009, phat trien dum S\f bao trq cua t6 chucJoyent, cong ty da h~u thufrn cho vi~c phat trien Node.js thong qua nhieu hinhthuc nhu dAutu tai chinh, h6 trq hc;ltAngkYthu~t va nhan l\fc phat tri8n

Nam 2012, Node.js duqc tc;lPchi InfoWorld binh chQn la cong ngh~ cua nam.Hi~n nay, tren cQng d6ng mc;lllg,Node.js lien !\Ic duqc dong gop, b6 sung vaphat tri8n bffi hang lOc;ltl~p trinh vien t\f nguy~n

GAn day, Node.js tra thanh mQt trong nhfrng cong ngh~ thuOng xuyen duqc

nh~c d~n va dang nh~n duqc nhieu S\f quan tam va h6 trq nhi~t tinh bffi caccong ty 100 nhu Microsoft, RedHat, Amazon,

Cho d~n nay, Node.js duqc phat trien d\fa tren gifry phep MIT License, v6n lamQt gifry phep phAn mem tt.r do duqc phat hanh bffi HQc vi~n Cong ngh~Massachusetts, duqc hQi d6ng MIT X sir d\lng Gifryphep nay duqc sOc;lllthaocho X Window System (d\f an tc;logiao di~n d6 hQa cho nguai dimg acac maytinh k~t n6i mc;lllgvao nam 1984) Trong do, cac quyen lqi troy c~p rna ngu6n

Trang 13

Chuang 1/ Giai thi?u t6ng quan v€ Nodejs 16

clla nguai su dVng gi~y phep vftnwang t\TOOu cac gi~y phep ngu6n rna khac.Ngoai ra co rnQt s6 di~rn khac sau:

Kh6ng b~t bUQcphai c6ng khai rna ngu6n

Co th~ duqc chinh sua l;;ticho phu hqp v6'i th\Tc t~

Kh6ng c~rn su dVng ten Clla nguai gift ban quy~n vao rnvc dichquang ba san ph~rn, thuO'ng hi~u

Kh6ng b~t bUQc phai hi~n daOO sach t~t ca nhftng nguai rungtharn gia th\Tc hi~n d\Tan trong thaOOph~n phat tri~n Clla chuang trinh

Lo;;ti b6 thuQc tiOO copyleft kh6i gi~y phep (copyleft rn6 ta cach

su dVng lu~t bfm quy~n d~ lo;;tib6 t~t ca cac h;;tn ch~ v~ phan ph6i ban sao vacac phien ban tac ph~rn da duqc chinh sua cho rn9i nguai va yeu c~u phai baoluu quy~n tV'do nhu v~y trong cac phien ban chiOO sua)

D~ cung c~p du6'i MIT License, rna ngu6n phai kern theo nQidung ghi chu ban quy~n Clla MIT

Do quy~n lqi clla nguai su dVng duqc uu tien, gi~y phep nay tra nen ph6 bi~ntrong cQng d6ng rna ngu6n rna. Nha do, b~t ky ai cling co the tharn gia cQngd6ng phat tri~n cho Node.js t;;titrang web https://github.com/joyent/node

Gic1y phep nay la di~u ki~n thuc d~y t6c dQ phat trien Clla Node.js va gi~yphep duqc su dVng nhi~u cho cac project h6 trqNode.js hi~n nay

1.2.2/ Ml}c tieu:

Tru6'c do, Dahl thuang xuyen vi~t cac project d\Ta tren ng6n ngft C va thuanglien quan d~n server va event-driven D~n d~n anh nh~n ra anh thuang xuyenphai vi~t l~p di l~p l;;ti cung rnQt nQi dung code cho cac project khac nhau.Anh nh~n ra dftu C vftn la ng6n ngft yeu thich, anh vftn c~n rnQt ng6n ngft phuhqp han de l~p trinh server

Trang 14

Chuang 1/ Gi6'i thi?u t6ng quan vdNodejs 17

M\lc tieu ban d~u Clla Dahlia lam cho trang web co kha nang push nhu trong

mQt s6 ung d\lng web nhu Gmail Sau khi thu nghi~m vai moi truemg duqc

vi~t trong cac ngon ngfr khac nhu Twisted cho Python, Perl ObjectEnvironment cho Perl, libevent cho C va EventMachine cho Ruby, Dahl did~n quy~t dinh chQn ngon ngfr Javascript va su d\lng V8 Engine duqc Googletung ra cach hIe do khong lau Nguyen nhan vi ngon ngfr Javascript chuaduqc dinh nghia API Nh?p/Xu~t va V8 Engine su d\lng ngon ngfr C rna anhquen thuQc Tir do, anh co the dinh nghia mQt quy uac Nh?p/Xu~t mai theo

huang SlJ ki~n va non-blocking Ngoai ra, theo anh, Javascript d~ dang han d~l?p trinh server, ch~ng hC;lnnhu khi vi~t IRC Server

Tuy nhien, do Node.js vftn can non tre, co nhi€u di~m khac bi~t so vai cachl?p trinh truy€n th6ng, doi hoi mQt luqng ki~n thuc nh~t dinh ill cac l?p trinhvien, ph~n Ian nguai mai b~t d~u co th~ g~p mQt s6 kho khan khi ti~p c?n vaicong ngh~ nay

1.2.3/S.,phat tri~n

1.2.3.11Nhu c~u sfr dl}.ng

Tir khi phat tri~n d~n nay, theo bao cao Clla W3Techs.com, mQt trang chuyencung c~p th6ng ke, bao cao, va x~p hC;lngwebsite thi s6 luqng website, servertri~n khai cong ngh~ Node.js ngay cang tang, tir 0.006% (thang 3/2012) len0.017% (thang 3/2013) Di€u nay cho th~y ti€m nang phat tri~n cao cllaNode.js trong tuang lai

Trang 15

Chuang 1/Gim thi?u tJng quan vJNodejs 19

Dich V\l dang Uli tai li~u issuu.com: MQt dich V\l giup dang tai va chia se taili~u di~n ti'r ttvc tuy~n nhu sach, bao, t~p chi, tich hgp v&i rn~g xa hQi dequang ba tai li~u Trang web hi~n co 52 tri~u dQc gia vm 210000 nQi dungduQ'cdang tciihang thang va x~p h~g 614 (theo Alexa thang 2/2013)

Th6ng ke rn~ng xa hQi Klout.com: Trang web cung cc1pdjch V\l th6ng kern~ng xa hQi theo thm gian thgc cua ngum dUng (Twitter, Facebook,Google+) va co han 2000 d6i tac sau chi 1 nam thanh I~p Trang web xu Iygc1n 1 tY 1c1ngQi API rn6i ngay va hi~n x~p h~g 1793 (theo Alexa thang2/2013)

Quc~mIy project Trello.com: H6 trQ'theo d5i, quan ly cac cong vi~c nhorn hi~uqua bfulg rnQt giao di~n dan gian Trang web hi~n co han 1 tri~u user rn6ingay va x~p h~g 3456 (theo Alexa thang 2/2013)

1.2.3.2/ T6c dq c~p nh~t va phat tri~n

February 15th 2009 March 3rd 2013

Commrts 10 master excluding merge comml1S

Hinh 1-4 Bi~u dA th~ hi~n sA IAn Commit tren Github cua Node.js

ConlnOulon Type Commits

Nha gic1yphep ngu6n rna, thong thming trong cac dieu khoan rang bUQc,Node.js luon duQ'c cQng d6ng rn~g phat trien va sua 16i hang thang TheoGithub, hi~n nay Node.js duQ'c phat trien thanh 3395 nhanh phat trien (tinhd~n ngay 15/3) de c~p nh~t, b6 sung vao rna ngu6n chinh

1.2.3.3/ Cong ngh~ h8 trC}'Node.js

Chi trong thai gian ngiin tir nam 2009 d~n nay, Node.js da thu hut sg chu ycua hang ngan I~p trinh vien, phat trien h~ th6ng quan Iy thu vi~n NPM va thuhut ca.cac cong ty rn6'i khai nghi~p Nguyen nhan nfunacac cong ngh~ h6 trQ'Node.js, giup gicii quy~t cac nhan t6 quan trQng nhu kha nang xu Iy, thai gian

Trang 16

Chuong 1/GiOi thi?u t6ng quan vJNode.js 20

va cac vc1nd~ th\l'c t~ rna truac day thuang kho giai quy~t khi su d\lIlg vm cac

web server khac

Ngon ngft I,p trinh Javascript va cuqc chi~n gifta cac trinh duy~t

Minb 1-5 Brendan Eicb, ngtriri sang tlJO nen Javascript

Javascript duQ'c Brendan Eich sang t~o t~i Netscape van nam 1995 va ch~ytren phien ban Netscape 2 duQ'ctung ra van nam 1996 Trong giai do~ phattri~n, Javascript co ten la Mocha, khi tung ra phien ban beta co ten laLiveScript, cu6i cung, vi m\lc dich ti~p thj, ten Javascript duQ'c chQn d~ ph6bi~n cho mQi nguOi Them van do, mQt s6 ten khac nhu ECMAScript, Jscriptcling duQ'c dung d~ gQi ngon ngu nay Vai nhi~u ten gQi, d~c bi~t vm tenJavascript vai ti~n t6 Java da khi~n khong it nguOi nhfun Iftnvm ngon ngu l~ptrinh Java cua Sun Microsystem, hi~n da thuQc v~ cong ty Oracle

Sau khi Netscape 2 tung ra, Microsoft phat tri~n kha nang xu ly Javascripttren trinh duy~t internet Explorer 3 vai ten JScript Khi xu huang duy~t webbung n6, Javascript duQ'c cai d~t va su d\lIlg tren hang lo~t trinh duy~t khac

nhau Ngon ngu nay dftn tra nen m~ me han, la mQt ngon ngu quan trQngtrong xu ly tuang tac vai nguOi dung, nhelt la trong vi~c xu ly Ajax - mQtcong ngh~ c~p nh~t nQi dung trang web rna khong cftn n~p l~i trang ThelyduQ'c di~u mlY, cac nha san xuelt trinh duy~t lien t1)c tung ra cac phien banmai, trong do t~p trung m~ a engine xu ly javascript nhu Webkit(Safari),V8(Google Chrome), Chakra(IE), Vi~c t~p trung nay gop phftn giup ngonngft Javascript phat tri~n nhanh chong, hang lo~t cac cong C\lh6 trQ'l~p trinhJavascript phat tri~n

Trang 17

Chuang J/ Gim thi?u tt5ngquan vJNodejs 21

s6 lUQ11gl~p trinh vien bi€t ngon ngfr tang cao do Javascript duQ'c dua vaogiang khong chi cho cac khoa hQc l~p trinh vien rna cho ca cac khoa hQc thi€tk€ Hi~n nay, Javascript duQ'c hang lo~t cac trang web, n6i b~t lacodecademy.com khuy€n khich la ngon ngft dAutien danh cho nguOi mai biltdAul~p trinh

Th€ nen, wac day, Javascript thuOng duQ'cnghi ngay nhu mQt ngon ngft bigiai h~ ben trong trinh duy~t va xu ly aphia client Tuy nhien, vi~c su d\lllgngon ngft l~p trinh khac gifta phia server va client vfuJ.bQc lQ nhuQ'c di~mtrong khau phat tri~n, duy tri va rna rQng

Nay, nha S1)'h6 trQ'm~nh me cua cQng d6ng m~g, Javascript co th~ duQ'cSlr

d\IDg d~ l~p trinh cho pilla server Vi~c su d\lllg Javascript lam server giupnguOi l~p trinh t~ d\IDgduQ'cnhUng th€ m~ ella Javascript nhu ham duQ'clUll tm va gan nhu Object, k€ thira theo phuong phap prototypal inheritance,don gian so vai class truy~n th6ng, khong rang bUQcki~u dft li~u Cllabi€n, langu6n cam hUng cho S1)' ra dOi CllaJSON

V8 JavaScript Engine

chilc hful hAuh€t mQi nguai d~u timg su d\IDghon mQt trinh duy~t tren maytinh Khi do, n€u la nguOi dimg thuOng xuyen CllaGoogle, nguai ta khong th~khong nghe noi d€n trinh duy~t Google Chrome

chrome

Hinb 1-6 Bi~u tuvng Google Cbrome va Javascript V8 Engine

Google Chrome la mQt trinh duy~t duQ'c cong ty Google dAu tITkha nhi~u,trong do g6m nhi~u thanh phfrn hQ'Pl~i, IDQttrong nhUng thanh phfrn kha quantrQng giup ~o nen Google Chrome chinh la Google V8 JavaScript Enginecung cfrp nhan xu ly Javascript qUaIl trQng giup nguOi dimg co cam giacnhanh hon hful so vai cac trinh duy~t khac

Vi sao Google t~o them V8 JavaScript Engine trong khi dff co nhi~u engine

xu ly Javascript khac tren thi wOng?

Trang 18

Chuang 1/ GiIJi thi?u t6ng quan v~Nodejs 22

V 6'i cong ty mly, hQ da va dang phat triSn m~nh cac dich V\l duqc r~t nhieunguai yeu chuQng, do la GMail, Google Docs (Google Drive), GoogleMaps, Cac dich V\l nay khong con dan thu~n xu Iy tren phia client nfra, hQc~n xu ly lien Wc mQt luqng 16'n cac request dlJa tren cong ngh~ AJAX v6ndlJa tren Javascript Google cung rQng rai h6 trq phat triSn AJAX v6'i bQ congC\l Google Web Toolkit cua hQ, co thS giup Java applicatio~ h6 tra AJAX.The nen, cung khong co gi I~ khi hQ quyet tam t~o nen engine m6'i dS tang t6c

xu Iy Javascript han nfra V8 JavaScript engine duqc t~o ra va da qua m~t cac

JavaScriptCore (Safari) Neu frng d\lng web c~n t6c dQ xu ly Javascriptnhanh, V8 JavaScript engine la SlJ llJa chQn thich hqp SlJ tang t6c nay ph\l

thuQc vao s6 luqng code va khci nang cua Javascript dS thlJc thi Neu mQt hamthuerng xuyen duqc gQi l~i, t6c dQ se tang len dang kS so v6'i vi~c gQi hanglo~t ham khac nhau Nguyen nhan la 0 cach thiet ke cua V8 JavaScriptengme

Nhan xu ly V8 JavaScript engine dugc viet b~ng ngon ngfr C++, cung c~pcach tiep c~n hoan toan khac so v6'i cac phuang thuc xu ly tru6'c day Ngay tu

khau thiet ke va phat triSn, Google da t~p trung vao cac thanh ph~n quantrQng chinh sau:

Sinh ra rna may: V8 JavaScript engine se t¥ dQng sinh ra rna may tru6'c khithlJc thi trong cac cach tiep c~n tru6'c day la thlJc thi byte code ho~c phi endich (interprete) code, h6 trq tai su d\lng, thlJc thi nhanh va hi~u quci han.Trong qua trinh nay, trinh bien dich co thS t6i Uti cac code quan trQng c~n gQil~i nhieu l~n

Truy c~p properties nhanh han: Javascript la ngon ngfr g~n lien v6'i object vacac property, trong do property co thS them vao va xoa kh6i object b~t kY lucnao Cach tiep c~n tru6'c day thuang su d\lng ca che gi6ng nhu tu diSn, c~nproperty nao, phcii tra I~i vi tri cua no tren bQ nh6' V8 JavaScript engine duqcthiet ke l~i, nha khci nang sinh ra rna may, cac bien duqc d~t t~i vi tri c6 dinh,xac dinh boi trinh bien dich

Phat triSn garbage collection: thay vi thuang xuyen tim va dQn bQ nh6' khiobject khong con lien ket, V8 JavaScript engine se t~m dung xu Iy code khi

Trang 19

Chuang J / GiOi thi~u t6ng quan vJNodejs 23

l~y l(;libQ nh6 cua cac object khong con lien ket den, quan 1:9" ch~t cac object

va pointer trong bQnh6, giam S\Iphan manh bQnh6 va hl;lllche memory leak

Node.js

Hioh 1-7 Node.js dlpl treo V8 Javascript Engine

Nha ket hQ'Pgifra Node.js Va V8 JavaScript engine, webserver co the th\ICthicac (mg d\lllg Javascript Ian mQt cach hi~u qua va t6c dQnhanh han

1.3/ U u nhtrQ'c di~m

1.3.1/ Uu di~m

DtrQ'c h6 trQ' m~nh til' cqng dAng rna nguAn rna va cac cong ty IOnV6i vi~c sir d\lllg gi~y phep MITIBSD, Node.js rna ra canh cira m6i va thu vicho cQng d6ng ml;lllgdong gop va phat trien Nha do s6 luqng project choNode.js khong ngimg tang len ca v~ s6 luqng va ch~t luqng Di~u nay khiencho cac cong ty Ian cling dAu ill van node.js vm cac san phfun nhu YahooCocktail, Cloud9 IDE, Walmart, Ebay,

Sir dl}ng ngon ngii' Javascript ph8 bi~n, di hf}c, Iinh ho~t, uy~n chuy~nJavascript dfi xu~t hi~ntil r~t s6m tren trinh duy~t Netscape, va til do dAndAnchiem IInh mang l~p trinh cho client tren trinh duy~t nha nhi~u Uti diem dfiduqc gim l~p trinh cong nh~ rQng rfii

H6 trQ' rn~nh chuin JSON (JavaScript Object Notation)JSON la chuck dinh dl;lllgdft li~u duqc l~y cam h(mg til c~u truc co tinhdan gian va d€ hieu cua ngon ngft Javascript vi the duqc Node.js h6 trq mQt cach t\I nhi~n va ml;lnhme, khien Node.js tra thanh mQt l\Ia chQn

tuy~t vai de phat trien cac (mg d\lllg truy~n tcii dft li~u qua m(;lngbfuIgJSON

Cong ngh~ AJAX va kh3 nang tai sir dl}ng I~i nqi dung codeKha nang xu 1:9" nhi~u requests vm thai gian response th~p cung vmvi~c dung l(;licung mQt dOl;lllcode Javascript, chfulg hl;lllnhu validationtren ca server lfuI client giup vi~c phat trien rnQt Website chi v6i rnQt

trang tra nen d€ dang han bao gia het.

Trang 20

ChU017g1/Gi6'i thi?u t6ng quan vJNode.js 24

Mo hlnh l~p trlnh mrri, sfr d\fng cach l~p trlnh non-blocking I/O

Khac v6i l?p trinh m;;1ngtrong Java, Node.js cho phep ti~n trinh ti~p tlfc

xu ly tac Y\l khac sau khi request mQt tac Y\l dQc/ghi len bQ nh6 ngoaihay truy€n dfr li~u qua m;;1ngrna khong phai block thread hay process.Cac tac Y\l 10 do sau khi thgc thi xong se gQi mQt ham callback da:dugc gan tru6c do de thong bao hoan t~t va thgc thi nhfrng xu ly dgatren dfr li~u theo yeu celu

T8c oQxu ly nhanh (nhO' V8 engine)

V8 la JavaScript Engine cua trinh duy~t Google Chrome Khi V8 ra dai, no da:t;;1ora cUQc cach m~mg cho cac trinh duy~t, boi vi t6c dQ cua no nhanh hondang ke t6c dQ cua JavaScript engine cua Firefox, Safari v.v

Theo trinh bay cua Ryan Dahl tren nodejs.org, khi co 100 k~t n6i d6ngthai va server celn tra v€ nQi dung 1 MB dfr li~u:

Node.js co the xu Iy 822 yeu celu / giay

nginx co the xu Iy 708 yeu celu / giay

thin co the xu Iy 85 yeu celu / giay

mongrel co the xu Iy 4 yeu celu / giay

Nhi~u thtr vi~n, d~ cai o~t (nho- npm)

npm la mQt chuong trinh quan Iy packages (libraries) thgc thi tren Linux quacommand line (Linux shell), giup quan Iy, cai d~t va publish thu vi~n MQithu vi~n cua Node.js d€u dugc dang kY t?i https://npmjs.org/ va day la nai denpm tai xu6ng va b5 sung thu vi~n cho nguai I?p trinh khi celn

Xay dlfng h~ th8ng vm o~c tinh scalable cao

Ngay tu ten cua Nodejs da: noi len di€u nay, ill node nghia la ffiQt nut trongm?ng cac server lien k~t v6i nhau Node.js d~c bi~t chu trQng d~n phan tancac server de xu Iy nhu celu request cao cua Internet nhu hi~n nay V 6i cach

phan tan nhu V?y, vi~c g~n them hay bat di server se d~ hon r~t nhi€u, d6ng

thai bao dam dugc uptime cao cua toan bQ h~ th6ng

Trang 21

Chuang 1/ Gi6'i thi?u t6ng quan vd Nodejs 25

1.3.2/ Nh U'Q'cdi~rn

Phai t1}'xay d\fng rnQi thrr

Node.js hi~n chi cung cAp n~n tang, th~ nen, nguai l~p trinh phai tv cai d~tm9i thu d~ co th~ t?O nen ung d\lng web mong mu6n, ch~ng h?n, d~ t?O mQtHTTP Server, nguai l~p trinh bUQcphai hi~u cach thuc tuong tac gifra WebBrowser va Server d~ cai d~t cac ham xu ly phil hqp Tuy nhien, v6i SlJh6trq

tir cQng d6ng m?ng, l~p trinh vien co th~ tim thAyrAtnhi~uhuang din vathu

vi~n xu ly cac chuc nang cc1nthi~t

Kern hi~u qua khi ch~y cac rrng d1}ng doi hoi tfin su~t xu ly cao

Node.js khong philhqp cho cac tinh hu6ng xu ly ng6n nhi~u CPU nhu tri tu~nhan t?O, encode/decode video, cryptography, Th~ nhung Node.js h6 trq

vi~t cac addons b~ng ngon ngfr C/C++, vi th~ cac tac V\l xu ly n~ng co th~duqc implement b~ng C/C++, sau do build ra thanh mQt addon cua Node.js d~ho?t dQnghi~u qua hon

Ben c?nh do co th~ su d\lng Node.js k~thqp g9i mQt process khac d~ xu lycac tac V\l n~ng, k~t qua xu ly xong se duqc tra v~ cho Node.js qua hamcallback, dam bao xu ly thong su6t

Node.js ra dai tir nam 2009, cho d~n nay dii la 3 nam, v6i mQtcQng d6ng phattri~n ClJCky nang dQng nhung vin kho co th~ tranh khoi hi~n thlJc non tre,thi~u trai nghi~m so v6i cac n~n tang dan anh khac nhu PHP (1994), Python

(1980), Perl (1987), Vi~c trng d\lng vao kinh doanh, thuong m?i va cac ungd\lng doi hoi dQtin c~y cao cua Node.js vin con h?n ch~ do tinh 6n dinh chuaduqc ki~m chung cua no Tuy v~y, vin khong ngan duqc suc hut cua Node.jsd6i v6i cac cong ty Ian

Trang 22

Chuong 1/GiOi thi?u t6ng quan v~Nodejs

Build va cai d~t tren cac h~ di€u hanh Linux:

cd~

git clone https://github.com/joyent/node.git

cd node

git checkout vO.8.18 #ChQn phien ban mai nhAtva tai v€ bAnggit

#tir trang web http://nodejs.org/

.Iconfigure

make

sudo make install

H~ di€u hanh Ubuntu Linux (cai d~t bAngphien ban binary - build sAn):

26

cd~

sudo apt-get update

echo "Y"Isudo apt-get install git-core curl build-essential openssllibssl-devecho "Y" Isudo apt-get install python-software-properties

sudo add-apt-repository ppa:chris-Iea/node.js

sudo apt-get update

echo "Y" Isudo apt-get install git

echo "Y" Isudo apt-get install nodejs npm

Cai d~t va sir d\lIlg Node.js tren h~ di€u hanh Windows, cfrn tai file cai d~td~g msi tt;li:http://nodejs.org/download/

Giao di~n sao khi cai (fit xong:

Trang 23

Chuang 1/ GiOi thi?u t6ng quan vJNodeJs 27

Hinh 1-8 Giao di~n Node.js version 0.8.18 tren Ubuntu.

MQtSa I~nh co"ban san khi cai dit:

Khi oo?P l~nh node tren cua s6 dong I~OOkhong kern s6, Node.js se vim ch€dQRead-Eval-Print-Loop

Trong ch€ dQ D<lY, nguai dung se go rnQt hay OOi€udong code, sau khi goxong, Node.js se th\fc thi va hi~n k€t qua, qua triOOnay lien tl)Cl~p l~i den khingum dUng thoat

.break Khi dang so~ thao, n€u khong thfiy cac dfiu dong ngo~c cfuI thi€t,Node.js se chuy~n ch€ dQOOi€udong Twang hqp rnu6n thoat, nh?P I~OOnaytren bfit 10' dong nao

.clear Sau khi chiOOsua trong Node.js, gQi I~OOnay n€u cfuIreset v€ ban dAu exit Thoat Node.js

.help Hi~n daOOsach tfit ca cac I~OOh6 trQ"

.save LUlltfit ca cac I~OOda nh?p van file

.load Th\fc thi file da viet s~n

Trang 24

ChU011g1/Giiri thi?u t6ng quan vJNodejs

Ngoai ra, co th~ nhelncac t6 hgp phim sau:

<etrl> +C Tuangtv nh~p break Nheln 2 lftn d~ thoat

<etrl> +D Tuangtv nh~p exit

28

1.4.2/ Sfrdl}.ngIDE hB trg I~ptrinh

Hi~n nay, co reltnhi~u IDE h6 trg l~p trinh cho Node.js Trong do, l~p trinhvien co th~ t~n dVng cong ngh~ di~n toan dam may d~ lam vi~c tflJc tuy~nho~c tv cai d~t IDE len may tinh

1.4.2.1/ Sfrdl}.ngtr\fe tuy~n qua e9.io

C9.io vi~t tAt cua Cloud9, la m9t dich V\l su dVng cong ngh~ cua Node.js,cung celpmoi truang phat tri~n cho Node.js, HTML, JavaScript, CSS, ngoai

ra con co XML, Python va Ruby Vi su dVng online, nguai dung chi cftn duynheltrinh duy~t cung m9t duang truy~n Internet nhanh va 6n dinh

Sau khi t?O xong tai khoim tren c9.io, nheln van mvc "Create NewWorkspace"

Trong menu hi~n ra, chQn"Create a New Workspace" d~ t?Oproject m6'i ho~cchQn"Clone from URL" n~u mu6n phat tri~n code tu m9t Workspace s~n co.Trong cua s6 "Create a New Workspace", d~t ten Tuy y trong mvc "Nameyour workspace"

Trang 25

Chuang 1/ Gim thi?u t6ng quan vJNodeJs

Create a New Workspace Name your wor1cspace

WOflGP3-:e PnvaOl' 0 Open and OISCO'J'ef"3b1e • Pnvate to rtIe pe~e IU'Mle (1 out of 1 ,.ft)

,

Ty'pe Of worts pace • Grt Uercurial FTP SSH

Grt works paces dont have any options to set at this time

29

CANCEL

Hioh 1-9 Cfra sA"Create a New Workspace" cua C9.io

Trong rn\lCWorkspace Privacy:

- Chc.m"Open and Discoverable" n~u rnu<3ncho phep beltkY ai cling coth~ tim thely va truy c~p, my chQn nay phil hQ'Pcho nhUng project rna ngu6n

rna,ai cling co th~ vao, phat tri~n thang cac nhanh khac nhau

- ChQn "Private to the people I invite" n~u rnu<3nchi cho phep nhUng aiduQ'crnm rn6i truy c~p duQ'c,phil hQ'Pcho nhUng project rna ngu6n dong Tuynhien, c9,io hi~n chi cho phep rnQt Workspace nay rnQt tai khoan N~u rnu<3nnhi€u hon, cAnphiii chuy~n sang tai khoan co phi

Sau do, chQn Create va cha rnQt hIc d~ c9.io chufrn bi rnoi wang lam vi~c.Sau khi hoan telt,chQnten Workspace va nhfrn "Start Editing"

Giao di~n lam vi~c cua c9.io hi~n ra nhu sau:

Trang 26

Chuang 1/GiOi thỉu t6ng quan vJNodejs

Roo: B::"-~~~" F, : tlo!!!w CoiIt" ;~ 9\¥(> ~ to> •., # •.• - ÕUf'l - ~~

30

rlORJ(SPẶf FUS

.• , •

• ;'~j ~ :::e:r.=:.e:;: -:.1':.18~::::J~:::1:::l -:'~.e::l:-u:H ::E :~:-.-:Ị l:.:.e • •.C\: :!!.:l txt:;;:e :;l".e :::::- ••.1:0';1 :=.:.::.:b

~'l': :e:.::e A:1~ ~:::~te ::.ue: [:::e:to::e:;:.: (e:l '1:::~~:.th~.-:::r.: !l.Ju::::1l=::1e_:~w:' l: :!::.~::::

• ::::e,,:e :.ẹ.•.:::ẹ! ~: !~::k'.•~: ~::::)e:':.

• iO:1:1 ";í.ẹ.- :: :: :;:: t; eze:-J:':":'';J :he ::ll~l •.iI :=-c.:1 1:": 1:1:1 (:::e:, ::le: :::e3 • J [E:.:.e:::]

• ::::ẹ!:.e" ::rl: '101:.::1': :1:' c:e ~:;Jlhej:: :he =e:.::':.e :•.:U).U:' sjje::l

;1':'::~:-:t'!.:1:1e::l:.e •• :l:eJl' [E::l':t:]

• ru"~ :.I:.e :=.:.: :;~.'ii! :::e=:e ';I:'': ~:;"h [:=tt :::l~e! ~.!I,:e:::- ir::: :e:J rhl't', 1':! :: :h.:.s tea::;': 'JÍ:::C::: ;~'J ~leue\'1:01': ::1:.eez:elle::l': :el':~:::ee :=:t P:,:t.'~.::=J l" ~'u •.•• ';

:: ;'::::.1Cel',: :1:.:1 -:a: •.~:::, ~e:ẹ :ef!l ::ee :: !l.e:C J;:,Jl nt !"'1::~= (@:l:~:!l:1r;) r::'I1~:~=~ :~":ll~

Hinb 1-10 Giao dĩn lam vĩe eua C9.io

T~i day, l~p trinh vien co th~ b~t dftu vi€t code va nhfuI Run d~ b~t dftu ch~y,trong truang hgp cfuI cftu hinh them tinh nang, co th~ nhfuI Alt + T d~ vaoLinux Shell d~ cftu hinh

Ngoai ra, c9.io cilng h6 tr<)lien k€t d€n cac nha cung cftp dich V\l dĩn toandam maỵ Sau khi lien k€t tai khoan nguai dimg cua c9.io vm tai khoan cuanha cung cftp dich V\l dĩn toan dam may, ngum dung co th~ trĩn khai ngaytffig d\lIlg web cua minh tn.rc tuy€n

1.4.2.2/ Cai d,t va sfrdl}og Web Storm IDE

Welcome to JetBrains WebStorm

Hinb 1-11 Pbin m~m WebStorm IDE

Trang 27

Chuang 1/ GiIJi thi?u t6ng quan vJNode.js 31

WebStorm IDE duqc phat trien boi c6ng ty JetBrains, h6 trq nhi€u n€n tangnhu Windows, Mac OS, Linux IDE nay co gia $49, cung c~p m6i trucmg h6

trq l~p trinh Javascript, Node.js, PHP, CSS, HTML kha m~mh hi~n nay.Chuang trinh co cac Uti diem chfnh la:

Giao di~n than thi~n, g9n gang, xu Iy nhanh

Quan Iy project d~ dang

H6 trq code complete va code suggestion

H6 trq quan ly rna ngu6n (d(tc bi~t la Github)

Co nhi€u plugin, macro b6 sung

TV Iuu thay d6i

Be cai d(tt phien ban dung thu 60 ngay, nguai dung co the truy c~phttp://www.jetbrains.com/webstorm/download/index.html#linux file cai d(tt

co ten d:;mg WebStorm-*.tar.gz Sau do giai nen va ch~y file WebStorm.shtrong thu mve bin vira giai nen

tar xfz WebStorm-* tar.gz

chmod +x WebStorm.sh

./WebStorm.sh

1.4.3/ BB sung thO'vi~n nhir Node package manager (NPM)

Npm la mQt trinh quan Iy va phan ph6i cac goi thu vi~n qua dong I~nh chonode.js Nha npm, m9i nguai co the d~ dang tim va tai cac module mQt cacht\f dQng qua m~ng, kh6ng phV thuQc vao h~ di€u hanh, chi vai mQt cau I~nh.Ch~ng h~n: npm install less

TiTphien ban 0.6.3, node.js dfnh kern npm m(tc dinh trong goi cai d(tt Truac

1.4.3.11 cfiu truc g6i thO' vi~n trong npm

Trang 28

Chuang 1/ Gilri thi?u t6ng quan v~ Nodejs 32

Ngoai cach tai va cai d~t thll c6ng, nha san xu~t/phat trien co the t~o thanh goi

de phan ph6i Goi thu vi~n npm mieu ta c~u truc trong file package.json baog6m ten goi, phien ban, cac c~pthu mvc, cac module phV thuQc c<1ndugc caitruac

File package.json don gian co c~u truc nhu sau:

{

"name": "Ten goi cai dat",

"description": "Noi dung mieu ta ve goi cai dat",

Cac the quan tr9ng c<1n luu y trong file nay la "name",

"dependencies" Trong do, cac the nay co ynghla nhu sau:

npm search ten _goi

The version: khai bao phien ban goi cai M~c dinh, khi dung l~nhnpm install ten_goi (kh6ng co them cac tham s6) se tai goi cai vaiphien ban mai nh~t

The main: TruOng hgp nguai dung mu6n nhom thu vi~n vao mQt thu mvc, nguai dung c<1ndua duang d~n clla file chinh vao the nay de b~td<1u

Trang 29

Chuang 1/ Gi6i thi?u t6ng quan v~Node.js 33

Trong truang hqp c~n cac thu vi~n phv, nguai l~p trinh c~n khai bao trong the

dependencies d~ npm tlJ dQng d.i cac module khac di kern v&i module d6 NQidung khai bao cac g6i phv thuQc nhu sau:

- G6i one se cai phi en ban c6 version trong khoang 1.0 t&i 2.5

- G6i two se cai cac phien ban c6 version trong khoang 0.9 t&i nh6 han2.3

- G6i three se cai mQt trong cac phien ban cua dong version 0.5 (0.5.1 t&i0.5.9)

- G6i four se cai ban dugc c~p nh~t g~n nhfrt

NSu khong tim thfrt g6i phil hqp, qua trinh cai d~t se bi huy

Nguyen nhful c6 SlJ gi&i h~n version vi node.js dugc lien tl)c c~p nh~t, mQt s6phien ban m&i han c6 th~ khong hoan toan tuang thich

Ngoai ra con cac the khac khac:

- The description giup nha phat tri~n mo ta tinh nang cua g6i thu vi~n

- The homepage cung cfrp dia chi trang web cua nha phat tri~n d~ h6 trg

thong tin cho thu vi~n nay

Trang 30

Chuang 1/Giai thi?u t6ng quan v~Node.js

The author cung c~p thong tin lien h~ nha phat tri~n

1.4.3.21 Sir d\lng npm

34

Npm tlJ tim cac goi thu vi~n nguai dung c~n tren Internet (tu trang chu

http://npmjs.org) thong qua cau I~nh sau:

npm install ten~6i

Neu nguai dung khong nh& d~y du ten goi rna chi nh& mQt ph~n ten thi ngoaicach vao trang https:llnpmjs.org d~ tim, npm cho phep tim b~ng I~nh

npm search nQi_dung_tim

Tuang tg, thong tin ve goi cai d~t nhu trang chu, nha phat tri~n, ghi chli ta

co th~ dung cac I~nh

npm view ten_g6i

Neu mu6n tim chi tiet han nhu phien ban, nha phat tri~n:

npm view ten~6i version

1.51L~p trinh vOl Node.js

1.5.1/ Phuong thuc l~p trinh

Event-driven

Tru&c day, theo cach truyen th6ng, mo hinh thread-based xu Iy cac yeu c~umQt cach I~n IUg1:,thread se bi khoa va cha den khi yeu c~u dang xu Iy hoantftt r6i m&i chuy~n sang yeu c~u ke tit~p.Theo cach nay, neu co qua nhi~u yeuc~u c~n dugc xu Iy, h~ th6ng se c~n t~o them nhieu thread

Dieu nay d~n den qua tai vi:

- C~n 1 lugng bQ nh& nh~t dinh danh cho thread du ho~t dQng haykhong

- C~n 1 khoang thai gian nh~t dinh d~ CPU chuy~n ngfr canh thgc thigifra cac thread (context switch)

Trang 31

Chuang 1/ GiOi thi?u t6ng quan vJNodejs 35

Nhu v~y, s6 IUQ1lgrequest ti I~thu~ vm dung IUQ1lgb<)nh6 va thOi gianchuy€n ngft carm Khi d~t d€n nguang b<)nh6, h~ th6ng co th€ se bi tri tr~ho~c ngimg xu Iy (overflow)

Vi v~y, Event-driven duQ'cdua van su d\ll1gthay cho cach truy~n th6ng, giupgiai quy€t nhftng vdn d~ ben tren V6i Y ill6ng co ban la chi v6i m<)tprocess

co th€ dimg d€ xu Iy nhi~u request lfuI luqt Cac request m6i d€n se duQ'cd~tvan trong event queue va lfuI luqt se duQ'c I~y ra d€ xu Iy Khi m<)trequestdang duQ'c xu Iy cac request khac trong event queue se phai cha d€n luqtminh, dfuI dfuI t~t ca request se duQ'cxu Iy h€t Nhung a day I~i nay sinh ram<)tvdn d~ do la n€u m<)trequest cfuI xu Iy qua lau (chi€m I~y process vach~y lien t\lC, khong nhuang cho request khac) ho~c khi€n cho process do biblock (do cha I/O ill nguOi dung, cha I/O ill network, cha I/O ill disk, ) thilam cach nao d€ dam bao cac request chia se m<)tprocess m<)t cach congbAng Giai phap la NON-Blocking 10

NON-blocking I/O

Hinh 1-12 Blocking I/O

M<)tthread trong m9i thOi di€m chi co th€ th\Ic thi m<)ttac V\lI/O cho d€n khihoan t~t

Hinh 1-13 Non-blocking I/O

M<)tthread co th€ yeu cAu cung hIe nhi~u tac V\l I/O va duQ'cthong bao m6ikhi co m<)ttac V\lhofm t~t

f)6i v6i Non-Blocking I/O, 1 process se t~ d\ll1g thOi gian th\Ic thi I/O d€ph\lc V\l ti€p cac yeu cAu dang dqi xu Iy Khi th\Ic thi tac V\l Non-BlockingI/O, nguai I~p trinh cfuI truy~n van m<)tham callback d€ sau khi th\lc hi~nxong, ham callback se duQ'cg9i Trong su6t qua trinh do, cac ham khac vfuI

Trang 32

ChU011g1/ Gi6'i thi?u t6ng quan vJNode.js 36

co th~ ti~p tl}c xu ly cac yeu c~u, di~u nay giup ti~t ki~m tai nguyen va giamthai gian dap (mg

Ham callback

Day la mQt d~ng g9i ham thuang xuyen dugc su dVng trong ngon ngfr l~ptrinh Javascript, nh~t la khi su dVng jQuery Ham nay se g9i dugc g9i d~n khiqua trinh xu ly truac hoan thanh

1.5.21Global Objects (d8i hrQ1lgtoan cl}c)

Nhu cac ngon ngfr l~p trinh khac, node.js khong khuy~n khich su dVng bi~n

toan cvc, tuy nhien node.js cung c~p mQt s6 d6i tugng toan cvc quan tr~mg d~

console.log ({foo: 'bar'}); II => [Object Object]

MQt I~nh co chilc nang nhu console.logO la console.infoO

console.error ([data], [ ])

Dung d~ xu~t nQi dung mong mu6n ra stderr

VD: console.error('Loi xay ra'); II => Loi xay ra

MQt I~nh co chilc nang nhu console.errorO la console.warnO

Trang 33

ChU011g1/ Gi6'i thi?u t6ng quan vJNodejs

console.dir (obj)

Xu~t nQi dung cua 1 object d~n stdout

console.dir ({foo: 'bar'}); 11=> {Foo: 'bar'}

37

N~u expression cfin danh gia la co gia tri la false thi AssertionError se xu~tnQi dung message ra console

console.assert (1)2, 'Loi xay ra ');/1 =>AssertionError: Loi xay ra

console time(la bel)

Banh d~u thai gian bit dfiu

Ngung bQ d~m thai gian va xu~t thai gian

Vi d\}:

conso Ie.time(' dem _tho i_gian ');

for (var i = 0; i < 100; i++) { ;}

console.timeEnd('dem_thoi_gian'); 11=>dem_thotgian: 359ms

console.trace(label)

Xu~t stack trace ra stderr eua vi tri hi~n t~i

1.5.2.21 Process

Trang 34

ChU011g1/Gi6'i thi?u t6ng quan v~Nodejs 38

Node.js cung c~p d6i tuqng process cung cac ham quan tr9ng dS xu ly choprocess dang che;ty

process version

Xu~t phien ban cua node.js

console.log("Version:" +process.version); II=> Version:vO.8.17

process.execPath

Xu~t duang d~n d~n thu m\lc thlJc thi chinh cua chuang trinh

VD: "/usr/local/bin/node" (tren linux)

process platform

Nen tang be;tndang su d\lng

YD' 'darwin' ,'freebsd' ,'linux' 'sunos' 'win32', ,

process.pid

Xu~t process ID hi~n thai

process.stdoutO

M(>t lu6ng co thS ghi duqc d~n stdout

VD: I/I)inh nghla ve console.logO.

console.log = function (d) {

process.stdout write (d + '\n');

};

process.stderrO

Tuang tlJ nhu process.stdoutO nhung aday la ghi d~n stderr

process.stderrO va process.stdoutO khong gi6ng nhu cac lu6ng khac trongNode, vi thuang bi block:

Trang 35

ChU011g1/Giai thi?u t6ng quan v~Node.js 39

Ca 2 bi block trong truang hqp lien quan dSn cac t~p tin ho~c TTY filedescriptor

Ca 2 kh6ng bi block khi xu 1)'cac pipe

process.stdinO

MQt lu6ng xu 1)' dQc tLr stdin Lu6ng stdin bi dung mQt cach m~c dinh nenphai gQi process.stdin.resumeO dS dQc tiSp

process.cwd( )

Tra v~ thu m\lc lam vi~c hi~n ~i

VD: console.log('Thu muc hien tai: '+process.cwdO);

p rocess.ch dir( directo ry)

Thay d6i thu m\lc lam vi~c hi~n t?i

VD: process chdir('/ data');

Trang 36

Chuang 1/ Giai thi?u t6ng quan vJNodejs 40

Tuong tlJ nhu process.setuidO tuy nhien duqc su dt,mg trong group, cling ch~pnh~n mQt s6 gia trj ho~c chu6i d~i di~n (IIDH Linux)

VD: process.setgid(20) ho~c process.setgid('mygid')

Trang 37

ChU011g1/ Giai thi?u t6ng quan v€Nodejs 41

Khi th\Tc thi file vai cac tham s6, process.argv cung c~p truy c~p vao tham s6,gia tri d~u tien la "node", thfr hai la ten t~p tin, va gia tri con l;;lila cac tham s6

process exit ([code])

L~nh process.exitO la g~n gi6ng ham exitO trong ngon ngfr C, bao hi~u thoatchuong trinh

M~c dinh, kSt qua thanh cong tra v~ gia tri o. K~t qua tra v~ Ian hon 0 la th~tb~i

1.5.2.31 Cac Global Object xu Iy ThO' vi~n

requireO

Dung d~ g9i thu vi~n c~n co truac khi ch~y

VD: var fs =require(lfsl); II Yeu c~u thu vi~n fs

require.resolveO

Trang 38

Chuang 1/GiIJi thi?u t6ng quan vJNodejs

Tim vi tri cua mQtth7 vi~n va tni ve dUOngd~n den thu vi~n do

require.cache

Thu vi~n duqc luu tru tl;lmtrong object nay

require.extensions

Thay d6i duoi file m~c dinh rna I~nh require se tim kiem

M~c dinh co 3 duoi file h6trq la js, json , node

DuOng d~n den file code duqc thl,lcthi

VD: Neu chl;lYnode example.js tir /Users/abc thi

console.logLfilename);/1 Xu~t ra /Users/abc/example.js

dirname

Duong d~n den thu ml)c code duqc thl,lcthi

VD: Neu chl;lYnode example.js tir /Users/abc thi

console.logLdirname);11 Xu~t ra /Users/abc

module

Cung c~p thong tin ve cac cai d~t cho nQi dung code dang xu Iy nhu duongd~n, cac thu vi~n co s~n,

exports

Trang 39

Chuang 1/ Giiri thi?u t6ng quan vJ Nodejs 43

Tuong t¥ nhu object module.exports, dung d~ luu tni external property d~ c6th~ duqc truy xu~t b~ng reguireOanhfrng file code khcic

1.5.2.4/ Cac Global Object khac

setTimeout(cb, ms)

G9i ham cb (callback) sau ms (milisecond) nh~t dinh Trong d6 Node.js guydinh ms phai n~m trong khoang 1-2147483647 milisecond tilc t6i da la 24.8ngay N~u truy~n ms sai se chuy~n ms v~ 1

Tnl v~ mQtobject d~ truy~n van clearTimeout(t)

Tni v~ mQtobject d~ truy~n van clearlnterval(t)

Trang 40

ChU011g1/Gi6'i thi?u t6ng quan v~Node.js

1.5.3/ Cac thu vi~n h8 trg co s~n

1.5.3.11Thu vi~n h8 trg HTTP Server

Cung c~p m<)t b<) danh sach t~t ca cac rna tr':1ng thai tieu chu~n cua HTTP

http.createServer ([requestListener])

Tra v~ m<)td6i tuqng web server maioRequestListener la m<)tchilc nang duQ'ctv' d<)ng them vao SlJ ki~n 'request'

http.createClient ([port), [host])

T':1o d6i tuqng HTTP client maio Port va host tham chiSu dSn may chu dSduQ'c kSt n6i (Ham nay hi~n khong con khuySn khich su dVng) , Thay thSb~ng http.requestO

a L6'p: http.Server

server.listen(port, [hostname), [backlog), [callbackV

Ngày đăng: 01/09/2023, 21:57

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w