Simon Holmes的書《Getting MEAN with Mongo, Express, Angular, and Node》的網(wǎng)址是這個(gè), 除了第一章、第五章和online bonus的Appendix D免費(fèi),其他章節(jié)大家自己找pdf吧。
這本書的Github repo在這里。
Notes
Log 16.7.25 15:52
越讀越覺得這本書真的好平易近人。贊一個(gè)。
Not that Random
這本書講的是全棧網(wǎng)站開發(fā)。
MEAN = MongoDB + Express + Angular + Node.js
才知道原來Angular和Node都是谷歌以前的東西,感覺應(yīng)該會(huì)很好用的。
JavaScript是MEAN Stack的唯一語言,這也是最吸引我的一個(gè)地方。說實(shí)話大大降低了門檻(捂臉
Node是single-threaded。
Multi-threaded是說,每個(gè)新訪問者/Session都會(huì)新分配資源,不同thread之間互不干擾,但是一旦超載就會(huì)很慢。
Single-threaded則是僅有一個(gè)thread,在handle requests的時(shí)候不慌不忙地一個(gè)個(gè)分派給其他部分完成,并將結(jié)果返回。想要讓這種方式流暢工作,必須寫non-blocking code,也就是說不能讓這個(gè)線程自己做任何事情,這個(gè)線程是專門派任務(wù)和回結(jié)果的。解決方案:
... make any blocking operations run asynchronously, preventing them from blocking the flow of your main process.
Node只看來了多少requests,不會(huì)記錄是誰發(fā)出的這些requests。但是如果想實(shí)現(xiàn)personalized experience,親愛的Express可以幫你——他有 sessions 可以用于區(qū)別不同訪問者。
下面介紹MongoDB。他是一個(gè)document database。這個(gè)對(duì)于JSON特別方便,對(duì)應(yīng)地很好,因?yàn)镸ongoDB沒有columns的概念,每一行的數(shù)據(jù)都是一個(gè)document,因而數(shù)據(jù)庫里的數(shù)據(jù)可以多種多樣。而且據(jù)說Mongo很快,唔希望這是真的lol。
再說Angular,這個(gè)我以前聽說過很多次了,這次是正式學(xué)習(xí)怎么用。他比jQuery要更強(qiáng)硬,規(guī)定了你要怎么用他。其非常好的一點(diǎn)是two-way data binding,數(shù)據(jù)庫的數(shù)據(jù)改了,Angular會(huì)同時(shí)更新html內(nèi)容,反之亦然。MEAN stack沒有了A,就是one-way data binding了。one-way讓大部分任務(wù)由server承擔(dān),而browser只需要render HTML和run JavaScript就行。

而two-way則是view和model捆綁,變一個(gè)兩者都變。

Angular是專為Single-page application(SPA)做的。舉例:gmail。也就是說一切都在這個(gè)頁面上進(jìn)行 —— never reloads。但這樣的話一些分析工具就完全不知道你這個(gè)app在干什么了,因?yàn)樗麄円縩ew page loading來分析。想要給SPA加page load events,可以用HTML5 history API。也有一些專門做integration for Angular的,不用太擔(dān)心,但是越細(xì)致的分析就越麻煩。SPA還有一個(gè)不好就是initial load比較慢(這個(gè)確實(shí)對(duì)我來說是個(gè)大問題),但是后面就比較快。
但是這么好的東西不可能沒有缺陷嘛。缺點(diǎn)就是,Angular完全依賴于JavaScript。而搜索引擎工作的時(shí)候不會(huì)去運(yùn)行你的js的,所以基本上用Angular的話搜索引擎就不會(huì)搜到你的數(shù)據(jù)和網(wǎng)頁。同理,在社交媒體分享的時(shí)候,automatic preview效果也不好。放上原文以防帶來誤解:
Most search engines look at the HTML content on a page but don't download or execute much JavaScript. Thus, JavaScript applications are very hard for search engines to crawl and index.
And for social-sharing sites, they also look at the HTML of the page you're linking to and try to extract some relevant text and images. Like search engines they don't run JavaScript on the page, so content served by JavaScript won't be seen.
但是MEAN stack好就好在,你完全可以去掉A,用傳統(tǒng)的one-way去serve some of your pages, and those that need js will utilize Angular separately.
接下來是三個(gè)這本書會(huì)介紹的其他工具:
- Twitter Bootstrap for UI
我想大家都有所耳聞,responsive website design,不想要default感的話還可以自己下theme來換。 - Git for source control
這個(gè)大家也熟吧。Github很好用。 - Hosting with Heroku
專為Node apps設(shè)計(jì),與Git結(jié)合得也很好。
Random Glossary
- PaaS = Platform as a Service
感覺這種[ ]aaS變得很多誒。這本書里介紹的是Heroku。 - REST = REpresentational State Transfer
它是stateless的,即不知道當(dāng)前訪問者一個(gè)一個(gè)都姓什名誰以及曾經(jīng)干了些啥。Node也是的。 - API = Application Program Interface
雖然以前就知道他,但是這本書的解釋讓我覺得更懂一點(diǎn):
API enables applications to talk to each other.