每日精进-重读狼叔的nodejs(卷一)一

461 阅读4分钟

序:

为什么取名叫每日精进?

      缘由:公司里每天的日报有一项叫做“每日精进”,当时没什么好写的,平时工作中遇到的问题解决后,也不觉得是太大的问题,没必要记录下来。
      疫情来后,社会充斥着“娱乐至上,视频为王”的态势,娱乐至死,学习无用论。
      玩乐终有无聊的时候,正是这个契机,决定了我开始重新写博客了,把自己的所学所见呈现出来。

一: javascript发展史:

      诞生于2005年,第一版的名称叫LiveScript,起初它的主要目的是处理以前由服务器端负责处理的一些表单验证。Netscape公司为了搭上“媒体热炒Java”的顺风车,临时将LiveScript更名为Javascript,所以从本质上说,Javascript和Java并没有什么关系。
      解读:早期前端调试最钟爱的浏览器是火狐,fireFox,Netscape公司出品,最近几年才换成Google浏览器。
      
      1997年,以JavaScript1.1为蓝本的建议被提交给了欧洲计算机制造商协会(European Computer Manufactures Association, ECMA),该协会制定39号技术委员会(TC39)负责将其标准化,第二年,国际标准化组织和国际电工委员会(ISO/IEC)也采用了ECMAScript作为标准,即ISO/IEC-16262。直到2009年ECMAScript5语言标准发布,该标准才逐渐被大家熟知。
      解读:以前学习原生Javascript的途径,其中一个就是多浏览在线MDN(ECMAScript),里面有详细的api和示例。
      
      2009年,Node.js横空出世,开启Javascript用于后端领域编程的新时代!2015年ECMAScript6(简称ES6)语言标准发布,目前Nodejs6.x以上的版本几乎可以支持ES6中90%以上的特性。
      解读:有了ES6,使Nodejs开发如虎添翼,可以编写更加复杂,适用度更高的产品。

二:

什么是Node.js:

    1. Node.js是Javascript的运行时环境。
    2. Node.js构建在ChromeV8的Javascript引擎之上,ChromeV8引擎是通过C或C++编写的,相当于要将JavaScript转换成底层的C或C++代码后再执行,通过Javascript这层包装,大大降低了偏底层的编程语言的学习成本。
    3. Node.js是轻量且高效的,每个函数都是同步的,而I/O操作是异步的。所有由JavaScript编写的函数的I/O操作最终都将由libuv(由C或C++编写)事件循环处理库来处理,隐藏了非堵塞I/O的具体细节,简化了并发编程模型,可以轻松编写高性能的Web应用。
    4. Node.js使用npm作为包管理器。

三:

Node.js原理:

    在解决并发问题方面,异步是最好的方案。我们可以类比排队和叫号机制来理解。在排队的时候,除了等待我们什么都做不了。但如果有叫号机制,我们就能先取好吗,等轮到自己的时候,系统会发出通知。这中间,我们可以做其他事。
    Node.js其实就是帮我吗构建了类似的机制。写代码的过程实际上就是取号过程,有事件循环来接受处理,而真正执行操作的事具体的线程池中的I/O任务。之所以说Node.js是单线程的,是因为它在接受任务的时候是单线程的,无需切换进程/线程,非常高效,但它在执行具体任务的时候是多线程的。

四:

应用场景:

    1. 静态API: 
    以往的传统软件工程模式,后端不给API结构,前端人员址鞥呢切切图,什么都做不了。
    流程改进后,在需求讨论阶段,在给出UE原型图之后,依照静态API,前端就可以开发了。
    2. 现代Web开发:
    2.1 预处理器:
        1. 模版引擎: Mustache、EJS、Jade
        2. css预处理器: Less、Sass、Scss、Rework、PostCss
        3. Javascript方言: CoffeeScript、Typescript
    2.2 跨平台: H5端、PC端、移动端、物联网
    3.  构建工具: Jake、Grunt、Gulp、WebPack + npm scripts

今天先讲这么多,每日精进,为了成为更好的自我。