zoukankan      html  css  js  c++  java
  • Node学习笔记(一)

    1. node的特点:

    Node.js 不是一种独立的语言,与 PHP、Python、Perl、Ruby 的“既是语言也是平台”
    不同。Node.js 也不是一个 JavaScript 框架,不同于 CakePHP、Django、Rails。Node.js 更不
    是浏览器端的库,不能与 jQuery、ExtJS 相提并论。Node.js 是一个让 JavaScript 运行在服务
    端的开发平台

    Node.js 在执行的过程中会维护一个事件队
    列,程序在执行时进入事件循环等待下一个事件到来,每个异步式 I/O 请求完成后会被推送
    到事件队列,等待程序进程进行处理。

    Node.js 的异步机制是基于事件的,所有的磁盘 I/O、网络通信、数据库查询都以非阻塞的方式请求,返回的结果由事件循环来处理。

    node实现以非阻塞的I/O事件循环机制和文件与网络I/O库为中心,一切以V8 JavaScript引擎为基础。

    采用了单线程、异步式I/O、事件驱动式的程序设计模型

       node的缺点:node无法实现桌面GUI应用。

    2.“中间件”:易于挂载和调用的模块。

    3. ejs模板的一些标签

       <%  code   %>  用于控制逻辑的不被缓存的代码

     <%=   code  %> 使用默认转义的html代码

    <%-   code  %>未转义的被缓存代码

    4.commonJS

    CommonJS 试图定义一套普通应用程序使用的API,从而填补 JavaScript 标准库过于简单的不足。CommonJS 的终极目标是制定一个像 C++ 标准库一样的规范,使得基于 CommonJS API 的应用程序可以在不同的环境下运行,就像用 C++ 编写的应用程序可以使用不同的编译器和运行时函数库一样。

    CommonJS 规范包括了模块(modules)、包(packages)、系统(system)、二进制(binary)、控制台(console)、编码(encodings)、文件系统(filesystems)、套接字(sockets)、单元测试(unit testing)等部分。

    5.node 的 REPL 模式 (read eval print loop)即输入—求值—输出循环

    6.node实时刷新小技巧:

    因为 Node.js 只有在第一次引用到某部份时才会去解析脚
    本文件,以后都会直接访问内存,避免重复载入

    supervisor 可以帮助你实现这个功能,它会监视你对代码的改动,并自动重启 Node.js。
    使用方法很简单,首先使用 npm 安装 supervisor(windows):
    $ npm install -g supervisor

    如果你使用的是 Linux 或 Mac,直接键入上面的命令很可能会有权限错误。原因是 npm
    需要把 supervisor 安装到系统目录,需要管理员授权,可以使用 sudo npm install -g
    supervisor 命令来安装。
    接下来,使用 supervisor 命令启动 app.js:
    $ supervisor app.js

    6.同步式 I/O 和异步式 I/O 的特点

    同步式 I/O(阻塞式):                                         异步式 I/O(非阻塞式)

    利用多线程提供吞吐量                                           单线程即可实现高吞吐量
    通过事件片分割和线程调度利用多核CPU              通过功能划分利用多核CPU
    需要由操作系统调度多线程使用多核 CPU             可以将单进程绑定到单核 CPU
    难以充分利用 CPU 资源                                         可以充分利用 CPU 资源
    内存轨迹大,数据局部性弱                                    内存轨迹小,数据局部性强
    符合线性的编程思维                                               不符合传统编程思维

    7.模块的单次加载

    require 不会重复加载模块,也就是说无论调用多少次 require,获得的模块都是同一个

    对比: module.exports = Hello;    和   exports.Hello = Hello; 

    exports 本身仅仅是一个普通的空对象,即 {},它专门用来声明接口,本
    质上是通过它为模块闭包的内部建立了一个有限的访问接口。因为它没有任何特殊的地方,
    所以可以用其他东西来代替

  • 相关阅读:
    webpack基础
    LeetCode232. 用栈实现队列做题笔记
    mysql 时间加减一个月
    leetcode 1381. 设计一个支持增量操作的栈 思路与算法
    LeetCode 141. 环形链表 做题笔记
    leetcode 707. 设计链表 做题笔记
    leetcode 876. 链表的中间结点 做题笔记
    leetcode 143. 重排链表 做题笔记
    leetcode 1365. 有多少小于当前数字的数字 做题笔记
    LeetCode1360. 日期之间隔几天 做题笔记
  • 原文地址:https://www.cnblogs.com/lzcblog/p/10203537.html
Copyright © 2011-2022 走看看