node学习篇02-模块机制

栏目: C++ · 发布时间: 6年前

一、BS or CS ?

        C/S 即Client/Server,客户机/服务器模式。

        两层: 客户机和服务器两层,第一层,在客户机系统上结合了界面显示与业务逻辑;第二  层,通过网络结合了数据库服务器。

node学习篇02-模块机制

          特 点: 如果用户要使用的话,需要下载客户端,安装后就可以使用

          优缺点: 界面和操作可以很丰富;两层传输,安全性高;只有一层交互,响应速度快。一般在局域网中,适用面窄;需安装,用户群固定;升级成本高,发生一次升级,所有程序都需要更新。

         B/S 全称为Browser/Server,即浏览器/服务器结构。

         三层: 表现层主要完成用户和后台的交互及最终查询结果的输出功能;逻辑层主要是利用服务器完成客户端的应用逻辑功能; 数据层主要是接受客户端请求后独立进行各种运算。 

node学习篇02-模块机制

         优缺点: 无需安装客户端,有浏览器即可; 架构在广域网上,交互性强;更新迭代方便,只需更新服务器即可。跨浏览器适配问题;中间层较多,速度和安全性问题;请求响应的交互模式,需要刷新页面,不友好。

          架构形式: 客户端-服务器-数据库;

客户端-web服务器-应用服务器-数据库

客户端-负载均衡器(Nginx)-中间服务器(Node)-应用服务器-数据库

二、 JavaScript发展历程

工具类库-〉组件库-〉前端框架-〉前端应用(不断抽象类化的过程)

暴露的问题:缺乏模块。通过script方式引入代码杂乱无章。

Javascript规范:CommomJs

三、CommonJs规范

J avascript 缺陷 :没有模块系统;标准库较少;没有统一标准接口;缺乏包管理系统。

      CommonJs 目的 :希望javascript能够在任何地方运行。使javascript能编写服务端应用程序,命令行工具,桌面应用程序,混合应用。

Node借鉴了commonJs的modules规范。

      规范: 引用:require();定义:exports;模块标识:小驼峰命名的字符患/路径;

      导出 :在node中,一个文件就是一个模块,模块中存在module对象,它代表模块本身,exports是module的属性。

node学习篇02-模块机制

四、Node模块实现

        node 加载模块三步骤 :路径分析 文件定位 编译执行

        node 模块分类 :核心模块 文件模块

        核心模块 :node提供,在node源码编译中编译进了二进制执行文件,在node启动时,部分加载到内存中,不需要文件定位和编译执行,并且在路径分析中优先判断,加载速度最快

       文件模块 :运行时动态加载,需完成三步骤,速度比核心模块慢

       模块缓存加载策略: node对引入过的模块进行缓存,缓存的是编译和执行之后的对象。

       路径分析与模块定位: modules.paths,与js作用域链查找方式相似,逐级查找直到查找到文件。文件标示符不包含扩展名,按照.js 、.json、.node的顺序依次补足扩展名尝试。

       模块编译: 按照不同扩展名采用不同载入方式

.js 通过fs模块同步读取后编译执行。

.node,c++编写的扩展文件,通过dlopen()加载后编译生成文件

.json,通过fs模块同步读取后,用json.parse()返回结果

其余文件按js文件载入

五、核心模块

          编译成可执行文件过程中被编译进了二进制文件。分为 javascript编写和c++编写 两部分。C++编写的放在node项目src文件夹下,javascript编写的放在lib目录下。

Javascript核心模块的编译: 转存为c/c++代码(v8附带的js2c.py工具),通过process.binding(‘natives’)取出,编译成功模块缓存在NativeModule._cache对象上,文件模块缓存在 Module._cache上。

c/c++核心模块的编译: 有的全部由c++编写,有的c++完成核心部分,其他部分由javascript实现包装向外导出。这种c++完成核心,javascript完成峰和钻过的模式是node提高性能的常见方式。通常 脚本语言 的开发速度优于 静态语言 ,但是其性能弱于静态语言。Node的复合模式在开发速度和性能之间找到了平衡点。

核心模块分类: 由存c++编写的部分称为内建模块。如buffer、fs、os。内建模块的优势在于:首先它由c++编写,性能上优于脚本语言,其次,在进行文本编译时,编译为二进制文件,一旦node执行,被直接加载到内存中,无需标识定位、文件定位、编译过程即可执行。

六、C++扩展模块  

        通过预先编译为.node文件,然后调用process.dlopen()方法执行。

七、包与npm

        node第三方模块通过包与npm将模块联系起来。

node学习篇02-模块机制

包结构: package.json:包描述文件。 bin:存放包可执行二进制文件的目录。lib:存放javascript代码的目录。doc:存放文档的目录。test:存放单元测试用例的代码。

## 代码分类 :源代码/目标代码

源代码: 采用某种编程语言编写的计算机程序,人类可读,如result=1+2

目标代码: 计算机可直接执行,人类不可读(专家除外),如11010010

将源代码转换为目标代码的方式:解释/编译

编译: 将源代码一次性转换成目标代码的过程。编译是一次性翻译,之后不再需要源代码(类似英文翻译)常用的.exe文件,就是经过编译后的源代码。源代码编译生成机器语言,再由机器运行机器码(二进制)。

node学习篇02-模块机制

解释: 将源代码逐条转换成目标代码,同时逐条运行的过程,解释是每次程序运行是随翻译执行(类似英文的同声传译)。程序时要由解释器程序实时地将源代码转换成二进制形式运行。

node学习篇02-模块机制

##语言分类

* 根据解释和编译两种执行方式 ,编程语言分为 解释型语言编译型语言

编译型语言的优点 :运行速度快,代码效率高,编译后程序不可以修改,保密性好。

编译型语言的缺点

  1. 代码需要经过编译方可运行,可移植性差,只能在兼容的操作系统上运行。
  2. 安全性不如解释性语言,一个编译型的程序可以访问内存的任何区域,并且可以对你的PC做它想做的任何事情(大部分病毒是使用编译型语言编写的)。

  解释型语言的优点:

①解释型语言提供了极佳的调试支持。

②解释器比编译器容易实现。

③中间语言代码的大小比编译型可执行代码小很多。例如,C/C++的.exe文件要比同样功能的 Java 的.class文件大很多。

④可移植性好,只要有解释环境,可以在不同的操作系统上运行。比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器系统上运行。

⑤解释型语言也可以保证高度的安全性—这是互联网应用迫切需要的。

    解释型语言的缺点:

①运行需要解释环境,程序严重依赖平台。

②运行起来比编译的要慢,占用的资源也要多一些,代码效率低。因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。

③由于解释型应用的decode-fetch-execute(解码-抓取-执行)的周期,它们比编译型程序慢很多。

* 根据语言的结构是否可变 ,编程语言分为 动态语言静态语言

    动态语言: 动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。优点在于其结构非常规范,便于调试,方便类型安全;缺点是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了;

    静态语言: 静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型。优点在于方便阅读,不需要写非常多的类型相关的代码;缺点:自然就是不方便调试,命名不规范时会造成读不懂,不利于理解等。(由于类型容易混淆,不容易调试任何类型可以互相赋值的造成的结果);

    脚本语言: 又被称为扩建的语言,或者动态语言,是一种编程语言,用来控制软件应用程序,脚本通常以文本保存,只在被调用时进行解释或编译。脚本语言是一种解释性的语言,它不象c/c++等可以编译成二进制代码,以可执行文件的形式存在,脚本语言不需要编译,可以直接用,由解释器来负责解释。


以上所述就是小编给大家介绍的《node学习篇02-模块机制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Applications (Hacking Exposed)

Web Applications (Hacking Exposed)

Joel Scambray、Mike Shema / McGraw-Hill Osborne Media / 2002-06-19 / USD 49.99

Get in-depth coverage of Web application platforms and their vulnerabilities, presented the same popular format as the international bestseller, Hacking Exposed. Covering hacking scenarios across diff......一起来看看 《Web Applications (Hacking Exposed)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具