在对比中理解 Node

之前知识星球有同学问道了这样一个问题:Node 环境和浏览器环境有什么区别?这样的思考很值得鼓励,在对比中学习,很容易将一个抽象的知识具象化。当时的回答只是简单的画了个图,感觉有必要用此文来深入挖掘一下

二、什么是前端,什么是后端?

想必没有哪个同学不知道,Node 将 Js 扩展到了后端,虽然前端与后端在猿界是高频词汇,恐怕也未必能回答清楚什么是前端,什么是后端这个问题?

存在于每个同学的潜意识里的答案:Web 前端指的是用户看得见摸得着的东西,包括 UI 层面以及 Web 层面的交互实现;后端更多的是与数据库进行交互以处理相应的,实现功能、数据的存取、平台的稳定性以及性能等等

我想说的是一个通信层面上的区分, Web 应用基本上是基于 HTTP/HTTPS 构筑的,前端(或者我们延伸到大前端:Android、IOS、浏览器等多端)作为 HTTP/HTTPS 的 Client 端,而后端则作为协议的服务端

结合上述两点,可以简单的画一个图:

有可能要被吐槽的图

通过这个对比来服务于我们对于 Node 的理解,运行在浏览器的 Js 主要是操作 Dom (UI 层面),以及作为 HTTP 客户端操作网络通信。而扩展到服务器端的 Node,能力不再受浏览器沙盒的限制,可以启动 HTTP 服务(以及 WebSocket 等各种服务),可以操作数据库、轻松读写磁盘文件,等等等等

三、Node 和浏览器的组件构成对比

抄袭自 Node 深入浅出的图

是时候祭出用来回答开篇提到的知识星球问题的图了,在 Node 横空出世之前,Js 的主要运行环境是浏览器(Android/IOS 中的 WebView 也是浏览器),浏览器主要由布局引擎(也就是我们常常说的浏览器内核)和Javascript 引擎组成,拿 Chrome 浏览器来说,它的布局引擎是 WebKit(高版本的已经换成 Blink),布局引擎的主要作用就是解析 Html Dom 和 Css 样式规则;Javascript 引擎是 V8,顾名思义,Javascript 引擎的作用当然是编译执行 javascript

相比之下,Node 就不需要布局引擎了,毕竟不需要渲染界面,所以在 Node 中是没有 Window 对象的,因为它木有 Dom、Bom 的 api。注意到图中左右皆有中间层,但是它们并不一样,前者基于浏览器的沙盒,后者基于 libuv,在 IO 读写上的能力是不一样的,例如:在 Node 上可以轻松的读写磁盘文件,但是在浏览器中,麻烦到怀疑人生

至于 V8,已经超出了我能详细讲解的能力范围,但是 V8 作为一个开源的 Javascript 引擎,你可以很方便在你的应用中调用,举个栗子:

#include <v8.h> 
using namespace v8; 
int main(int argc, char *argv[]) { 
    // 创建一个句柄作用域 ( 在栈上 ) 
    HandleScope handle_scope; 
    // 创建一个新的上下文对象
    Persistent<Context> context = Context::New(); 
    // 进入上一步创建的上下文,用于编译执行 helloworld 
    Context::Scope context_scope(context); 
    // 创建一个字符串对象,值为'Hello, Wrold!', 字符串对象被 JS 引擎
    // 求值后,结果为'Hello, World!'
    Handle<String> source = String::New("'Hello' + ', World!'"); 
    // 编译字符串对象为脚本对象
    Handle<Script> script = Script::Compile(source); 
    // 执行脚本,获取结果
    Handle <Value> result = script->Run(); 
    // 释放上下文资源
    context.Dispose(); 
 
    // 转换结果为字符串
    String::AsciiValue ascii(result); 
 
    printf("%s\n", *ascii); 
 
    return 0; 
}

可以用一句话来概括上述使用 C++ 编写的 V8 调用实例:将 Js 代码(字符串形式),丢到 V8 中执行并返回执行结果。这是最简单的 V8 调用模板,要知道,Node 也是使用 C++ 基于 V8 写出来的,通过这个例子,是否对 Node 有多一点点的认识呢?

四、类比 Java 虚拟机

对 Java 有一定了解的同学,对它的跨平台特性肯定耳熟能详,这得益于它的虚拟机,什么是虚拟机?这又可以通过 Node 环境来帮助理解

Node 刚开始并没有 Windows 版本,知道 2011 年 7 月,Node 在微软的帮助下发布了 Windows 版本,从而实现了跨平台。兼容 Windows 和 *nix 平台主要得益于 Node 在操作系统与上层模块之间构建了一层平台架构层,也就是第三节中的中间层,也即 libuv。libuv 是许多系统实现跨平台的基础组件,感兴趣可以去了解下(具体的我也说不清楚了~~)

回到什么是虚拟机的问题,莫不过是在系统于上层模块之间架设的一套 IO 桥阶层

五、总结

不要给自己的知识领域设定边界~~

菲麦前端 是一个让知识深入原理的知识社群,我们有 知识星球、公众号以及群,欢迎加微勾搭:facemagic2014

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,780评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,424评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,397评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,576评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,997评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,945评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,107评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,850评论 0 208
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,625评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,804评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,285评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,613评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,291评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,164评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,963评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,096评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,886评论 2 278

推荐阅读更多精彩内容

  • JavaScript绝对是最火的编程语言之一,一直具有很大的用户群,随着在服务端的使用(NodeJs),更是爆发了...
    不去解释阅读 2,349评论 1 16
  • 两人逛正开心,就遇到了之前那两个女孩。 “真是阴魂不散!”窈窈撇了她俩一眼自顾自的拉着阿异的手逛着。 阿异显然也看...
    叔夜君阅读 199评论 1 2
  • 一天一夜的舟车劳顿,在做短暂的修正之后开始了真正的旅途。在都江堰清晨懒懒的空气里开始收拾行李。这一路都是未知数,却...
    阁C子阅读 410评论 0 0
  • 本作品参与#热血九月,迷彩青春#军训线上作品征集活动,本人承诺,作品内容为原创,且并未在其他平台上发表过。 一...
    很浅日记阅读 243评论 0 3
  • 在 Azure 中使用经典部署模型创建的所有 Windows 虚拟机都可以通过专用网络通道与同一云服务或虚拟网络中...
    ITknight阅读 273评论 0 0