node学习篇02-模块机制

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

一、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-模块机制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

SNS网站构建

SNS网站构建

Gavin Bell / 张卫星、李占波、徐静 / 机械工业出版社 / 2011-2 / 69.00元

过去的十年里,Web成为了非常重要的社交工具。社会活动已经超出了BBS这个概念,而指范围更广的互联网。大多数人对Facebook、MySpace以及Twitter并不陌生,事实上,现在很多人在网络上都有个人档案。社会媒体已经成为我们生活的一部分,它可以让我们的生活更加美 好,也可以使其更糟糕,像公民新闻这样的表达已变得很常见。仅仅Facebook就有两亿注册用户。那么在这个新领域中到底有什么奥秘呢......一起来看看 《SNS网站构建》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具