Simon Holmes的书《Getting MEAN with Mongo, Express, Angular, and Node》的网址是这个, 除了第一章、第五章和online bonus的Appendix D免费,其他章节大家自己找pdf吧。
这本书的Github repo在这里。
Notes
Log 16.7.25 15:52
越读越觉得这本书真的好平易近人。赞一个。
Not that Random
这本书讲的是全栈网站开发。
MEAN = MongoDB + Express + Angular + Node.js
才知道原来Angular和Node都是谷歌以前的东西,感觉应该会很好用的。
JavaScript是MEAN Stack的唯一语言,这也是最吸引我的一个地方。说实话大大降低了门槛(捂脸
Node是single-threaded。
Multi-threaded是说,每个新访问者/Session都会新分配资源,不同thread之间互不干扰,但是一旦超载就会很慢。
Single-threaded则是仅有一个thread,在handle requests的时候不慌不忙地一个个分派给其他部分完成,并将结果返回。想要让这种方式流畅工作,必须写non-blocking code,也就是说不能让这个线程自己做任何事情,这个线程是专门派任务和回结果的。解决方案:
... make any blocking operations run asynchronously, preventing them from blocking the flow of your main process.
Node只看来了多少requests,不会记录是谁发出的这些requests。但是如果想实现personalized experience,亲爱的Express可以帮你——他有 sessions 可以用于区别不同访问者。
下面介绍MongoDB。他是一个document database。这个对于JSON特别方便,对应地很好,因为MongoDB没有columns的概念,每一行的数据都是一个document,因而数据库里的数据可以多种多样。而且据说Mongo很快,唔希望这是真的lol。
再说Angular,这个我以前听说过很多次了,这次是正式学习怎么用。他比jQuery要更强硬,规定了你要怎么用他。其非常好的一点是two-way data binding,数据库的数据改了,Angular会同时更新html内容,反之亦然。MEAN stack没有了A,就是one-way data binding了。one-way让大部分任务由server承担,而browser只需要render HTML和run JavaScript就行。
而two-way则是view和model捆绑,变一个两者都变。
Angular是专为Single-page application(SPA)做的。举例:gmail。也就是说一切都在这个页面上进行 —— never reloads。但这样的话一些分析工具就完全不知道你这个app在干什么了,因为他们要靠new page loading来分析。想要给SPA加page load events,可以用HTML5 history API。也有一些专门做integration for Angular的,不用太担心,但是越细致的分析就越麻烦。SPA还有一个不好就是initial load比较慢(这个确实对我来说是个大问题),但是后面就比较快。
但是这么好的东西不可能没有缺陷嘛。缺点就是,Angular完全依赖于JavaScript。而搜索引擎工作的时候不会去运行你的js的,所以基本上用Angular的话搜索引擎就不会搜到你的数据和网页。同理,在社交媒体分享的时候,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,用传统的one-way去serve some of your pages, and those that need js will utilize Angular separately.
接下来是三个这本书会介绍的其他工具:
- Twitter Bootstrap for UI
我想大家都有所耳闻,responsive website design,不想要default感的话还可以自己下theme来换。 - Git for source control
这个大家也熟吧。Github很好用。 - Hosting with Heroku
专为Node apps设计,与Git结合得也很好。
Random Glossary
- PaaS = Platform as a Service
感觉这种[ ]aaS变得很多诶。这本书里介绍的是Heroku。 - REST = REpresentational State Transfer
它是stateless的,即不知道当前访问者一个一个都姓什名谁以及曾经干了些啥。Node也是的。 - API = Application Program Interface
虽然以前就知道他,但是这本书的解释让我觉得更懂一点:
API enables applications to talk to each other.