声明:
- 本文适合白的不能再白的小白
- 不要被标题误导,本文不会讲nodejs基础,只是本人学习流程和资料的一个整合
- 如果想找一大堆教程自己看,没有电梯,自己拉到文章最下方吧
一、nodejs是什么
前段时间,偶然得到了一次跟几个大牛学长学习的机会,他们正在做一个startup的项目,构建网站所使用的就是nodejs;对这个最近牛哄哄的东西,自己也只是略有耳闻,从何下手呢,打开百度,google一下。
首先,nodejs不是一种什么编程语言,而是一个可以让javascript运行在服务器端的平台,至于什么nodejs由c++编写,基于google chrome的v8引擎,一概忽略;你需要知道的是,以前你用php/java写服务器端的代码,现在可以使用nodejs完成,而且不需要太多的新知识。
if(足够熟悉js){
go on……
}else{
window.location('http:www.baidu.com');
and search 'javascript 入门教程'+去吧-_-;
}
其次,使用nodejs开发你可以使用windows/linux/macos,任何一个环境,但是用windows感觉怪怪的,推荐linux(such as ubuntu).至于安装什么的,自己解决吧。
接下来你最想知道的可能就是,我现有的工具做开发,挺好的,你有啥么理由让我转到nodejs这来呢? 所以看看nodejs能干什么吧。
二、nodejs能干什么
Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。(摘)当前的服务器程序有什么问题?我们来做个数学题。在 Java™ 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。
Node 非常适合以下情况:在响应客户端之前,您预计可能有很高的流量,但所需的服务器端逻辑和处理不一定很多。
总结起来就是:其它服务器端语言能干的它几乎都能胜任,而且这货能处理高并发,节省服务器成本。而它又不是诸如apache这种服务器软件的一个替代品,它的理想目标是:提供高度可伸缩服务器。
看到这又晕了是么?别管了,看看自己创建一个服务器,处理request、response是什么感觉吧。
三、怎么学nodejs
1. 需要哪些基础
js的基础是必须的,而且并不是简单的了解就可以,前端的东西也必须掌握把,不然你怎么构建一个完整的网站应用呢。
2.从哪里下手
当时学的时候,苦于国内没有一个很好的教程,也不能说教程不好,可能他们都是站在一个相对较高的视角去讲述这个东西,一下就来了一大堆东西在那讲,想看视频学的同学暂时还是不要有这个想法了,基本上没有适合入门的教程,如果你非要找,英语水平可以的话,51cto上有一个我感觉还不错:
1>nodejs基础
- 起初搜教程看的是http://ourjs.com/detail/529ca5950cb6498814000005 ,这是一本书啊,只看了1/3,放弃
- 接着找到了如下的这个教程:https://github.com/alsotang/node-lessons 花几天时间把这个课程里面的内容弄明白,基本上nodejs要用到基础的东西就都具备了
- 51CTO视频教程,共15集,我没有全看,像发布自己的package这种事情十万八千里呢,前八级看看还是可以的,url:http://edu.51cto.com/course/course_id-127.html
2>基础过关了,进阶使用框架
你可能想去尝试创建一个自己的应用,那就要介绍express了,这也是在开发一个大型项目中必须要用到的,但如果你足够任性我也没办法。express是nodejs的一个框架,就像你用基本java web知识可以构建网站,但使用SSH可以更快、更清晰。就像你学PHP,直接建站没问题,但是有像YII,tp等等的框架,很多轮子就不需要你重复造了。
express也是同样的道理,作者参考了Ruby的Sinatra.rb,完成了一个基于nodejs的实现(此句可忽略),有了基础就要实践了,上面的教程可能也或多或少讲到express,但是上面就把重点放在nodejs基础上,下面才是express:
- 如果你暂时还不想看官方文档,可以先看看阮一峰阮大大的《Express框架》 http://javascript.ruanyifeng.com/nodejs/express.html
- 然后呢,你就可以创建一个博客应用试试了,来吧跟着做(发现这个教程的时候,有种相见恨晚,要的就是你的感脚)url:https://github.com/nswbmw/N-blog/wiki
- 但是官方文档是不能不放在这里地,有问题先看看手册吧:http://expressjs.com/
3>前端怎么办
上面的内容都搞定了,前端难道还是用html么,呵呵,被你猜对了,还是html,只不过是换种方式写html,前端的模板引擎目前有EJS、Jade、React等。
ejs就不用学了,就是换了个宽展名,语法完全没变,服务器端渲染时候可能传递一些数据,你所要学的只是简单的几个小语法来处理这些数据和逻辑,参考官方文档即可:http://www.embeddedjs.com/
jade我个人不喜欢,那种靠缩进、空格、换行来组织代码的小shit,不习惯,不多讲,想学的,自行google吧。
react并不算是一个完整的MVC框架,也就算是V,对C算是有锦上添花的作用吧,组件化的开发思路,这也应该是一个趋势,“在js中写html,你感受感受”。
" 在Web开发中,我们总需要将变化的数据实时反应到UI上,这时就需要对DOM进行操作。而复杂或频繁的DOM操作通常是性能瓶颈产生的原因(如何进行高性能的复杂DOM操作通常是衡量一个前端开发人员技能的重要指标)。React为此引入了虚拟DOM(Virtual DOM)的机制:在浏览器端用Javascript实现了一套DOM API。基于React进行开发时所有的DOM构造都是通过虚拟DOM进行,每当数据变化时,React都会重新构建整个DOM树,然后React将当前整个DOM树和上一次的DOM树进行对比,得到DOM结构的区别,然后仅仅将需要变化的部分进行实际的浏览器DOM更新。"想想不就应该这样么。
学长跟我说,React水很深,如果能成为专家,前途无量。听得心潮澎湃呢 :) ,不管怎么说react入门确实有一定的难度,
- 这里可以先看看这个:http://hulufei.gitbooks.io/react-tutorial/content/introduction.html
- 然后呢还是阮大大:http://www.ruanyifeng.com/blog/2015/03/react.html 可以把代码clone下来,每个demo做一下,修修改改试试也就明白了。
- 最后官方文档必备:http://facebook.github.io/react/docs/getting-started.html
小结:
看完这些基本上对nodejs的知识有一个完整的体系了,如果基础不好,也没了解过python这样的语言,对于nodejs这种所谓基于事件的异步式编程可能让你很是痛苦,看人家的代码,可能发现好多东西不知道,没关系那些依赖库都是nodejs社区大家贡献的,每个拿来用就可以了,并不需要专门研究,也不用感觉好像东西很杂,便心生烦躁,想放弃,这也只是一个过程,纠结过后就拨开云雾见青天了。
附录:
- 资料一:知乎,怎样有效地学习 Node.js:http://www.zhihu.com/question/19793473
- 资料二:quora: http://www.quora.com/What-are-the-best-resources-to-learn-Node-js