深入浅析Node环境和浏览器的区别

正好最近有朋友咨询我这个问题,那就简单谈一下我理解的node环境和浏览器的区别,高手请略过。

一、全局环境下this的指向

  在node中this指向global而在浏览器中this指向window,这就是为什么underscore中一上来就定义了一 root;

 var root = typeof self == 'object' && self.self === self && self ||
       typeof global == 'object' && global.global === global && global ||
       this;

 而且在浏览器中的window下封装了不少的API 比如 alert 、document、location、history 等等还有很多。我们就不能在node环境中xxx();或window.xxx();了。因为这些API是浏览器级别的封装,纯javascript中是没有的。当然node中也提供了不少node特有的API。

二、js引擎

  在浏览器中不同的浏览器厂商提供了不同的浏览器内核,浏览器依赖这些内核解释折我们编写的js。但是考虑到不同内核的少量差异,我们需要考虑浏览器兼容性。好在有一些优秀的库帮助我们处理这个问题,比如jquery、underscore等等。

  NodeJS是基于Chrome's JavaScript runtime,也就是说,实际上它是对GoogleV8引擎(应用于Google Chrome浏览器)进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。

NodeJS并不是提供简单的封装,然后提供API调用,如果是这样的话那么它就不会有现在这么火了。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。例如,在服务器环境中,处理二进制数据通常是必不可少的,但Javascript对此支持不足,因此,V8.Node增加了Buffer类,方便并且高效地 处理二进制数据。因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各环境下更加给力。

  js引擎都固定了,还对应神马兼容性。

三、DOM操作

  浏览器中的js大多数情况下是在直接或间接(一些虚拟DOM的库和框架)的操作DOM。因为浏览器中的代码主要是在表现层工作。但是node是一门服务端技术。没有一个前台页面,所以我门不会在node中操作DOM。

四、I/O读写

  与浏览器不同,我们需要像其他服务端技术一样读写文件,nodejs提供了比较方便的组件。而浏览器(确保兼容性的)想在页面中直接打开一个本地的图片就麻烦了好多(别和我说这还不简单,相对路径。。。。。。试试就知道了要么找个库要么二进制流,要么上传上去有了网络地址在显示。不然人家为什么要搞一个js库呢),而这一切node都用一个组件搞定了。

五、模块加载

  javascript有个特点,就是原生没提供包引用的API一次性把要加载的东西全执行一遍,这里就要看各位闭包的功力了。所用东西都在一起,没有分而治之,搞的特别没有逻辑性和复用性。如果页面简单或网站当然我们可以通过一些AMD、CMD的js库(比如requireJS 和 seaJS)搞定事实上很多大型网站都是这么干的。

  在nodeJS中提供了CMD的模块加载的API,如果你用过seaJS,那么应该上手很快。

  node还提供了npm 这种包管理工具,能更有效方便的管理我们饮用的库

  当然浏览器这边ES6也有这方面的补充,相信未来会更好。。。

总结

以上所述是小编给大家介绍的Node环境和浏览器的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • node.js调用Chrome浏览器打开链接地址的方法

    本文主要介绍的是node.js调用Chrome浏览器打开链接地址的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 借助open模块实现 通过node-open模块,可以在任何平台上打开某个浏览器网址. 通过NPM安装 npm install open 使用Chrome打开网址 var open = require("open"); open("http://www.google.com", "chrome"); 调用Start打开

  • NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解

    1.windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的"INSTALL"按钮,直接点击就会自动下载安装了. 2.安装过程基本直接"NEXT"就可以了.(windows的安装msi文件在过程中会直接添加path的系统变量,变量值是你的安装路径,例如"C:\Program Files\nodejs"). 3.安装完成后可以使

  • vue+node+webpack环境搭建教程

    一.环境搭建 1.1.去官网安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html ) 注意node的版本,只有支持和谐模式的node才会支持es6,在基于webpack构建项目名称时才不会报错.推荐最新版本. 下载安装包之后直接点击安装即可.测试安装成功的界面如下: 1.2.利用npm安装webpack命令行语句为npm install webpack -g.测试安装成功的界面如下: 1.3.下面就是安装淘宝镜像,如下图

  • Node.js中环境变量process.env的一些事详解

    前言 最近这两天在和运维GG搞部署项目的事儿.碰到一个问题就是,咱们的dev,uat,product环境的问题. 因为是前后端分离,所以在开发和部署的过程中会有对后端接口的域名的切换问题.折腾了一下午,查询了各种资料这才把这Node环境变量process.env给弄明白. 下面这就做个问题解决的记录.希望能对这个不明白的人有所帮助.话不多说了,来一起看看详细的介绍吧. Node环境变量 首先,咱们在做react.vue的单页应用开发的时候,相信大家对配置文件里的process.env并不眼生.

  • mac下的nodejs环境安装的步骤

    说明 我们以brew的方式进行安装. node安装 #我们安装时要附加参数,因为在新版中,默认的安装参数不会安装npm包管理器. brew install node --with-npm #检查安装是否成功 ➜ node -v v6.0.0 ➜ npm -v 3.8.6 使用淘宝的npm源 #淘宝提供了多种使用方式,这里我使用别名的方式, echo '\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao

  • Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)

    今天,抽空了浏览了下node.js ,哈哈,看了一篇入门的文章(http://www.nodebeginner.org/index-zh-cn.html),自我感觉是入门了,不过里面一句话,挺有感悟: 复制代码 代码如下: 不过,这些毕竟都是前端技术,尽管当想要增强页面的时候,使用jQuery总让你觉得很爽,但到最后,你顶多是个JavaScript用户,而非JavaScript开发者.然后,出现了Node.js,服务端的JavaScript,这有多酷啊?于是,你觉得是时候该重新拾起既熟悉又陌生的

  • javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异

    在您开始本文的阅读前,我强烈建议您可以先读一读此篇:http://w3help.org/zh-cn/causes/SD9004.            HTMLCollection 接口定义 interface HTMLCollection{      readonly attribute unsigned long   length;      Node               item(in unsigned long index);      Node               na

  • 深入浅析Node环境和浏览器的区别

    正好最近有朋友咨询我这个问题,那就简单谈一下我理解的node环境和浏览器的区别,高手请略过. 一.全局环境下this的指向 在node中this指向global而在浏览器中this指向window,这就是为什么underscore中一上来就定义了一 root: var root = typeof self == 'object' && self.self === self && self || typeof global == 'object' && glo

  • 深入浅析Node.js 事件循环、定时器和process.nextTick()

    什么是事件循环 尽管JavaScript是单线程的,但通过尽可能将操作放到系统内核执行,事件循环允许Node.js执行非阻塞I/O操作. 由于现代大多数内核都是多线程的,因此它们可以处理在后台执行的多个操作. 当其中一个操作完成时,内核会告诉Node.js,以便可以将相应的回调添加到 轮询队列 中以最终执行. 我们将在本主题后面进一步详细解释. 事件循环解释 当Node.js启动时,它初始化事件循环,处理提供的输入脚本(或放入 REPL ,本文档未涉及),这可能会进行异步API调用,调度计时器或

  • 深入浅析springboot中static和templates区别

    静态页面的return默认是跳转到/static/目录下,当在pom.xml中引入了thymeleaf组件,动态跳转会覆盖默认的静态跳转,默认就会跳转到/templates/下,注意看两者return代码也有区别,动态没有html后缀. 1.1 在static下新建hello1.html 运行程序,浏览器输入http://localhost:8080/hello1.html so,可以在根目录下访问hello1.html,static目录类似于传统Java web中的webroot或webcon

  • 浅析 ArrayList 和 LinkedList 有什么区别

    ArrayList 和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题.可能大部分小伙伴和我一样,能回答出"ArrayList 是基于数组实现的,LinkedList 是基于双向链表实现的." 关于这一点,我之前的文章里也提到过了.但说实话,这样苍白的回答并不能令面试官感到满意,他还想知道的更多. 那假如小伙伴们继续做出下面这样的回答: "ArrayList 在新增和删除元素时,因为涉及到数组复制,所以效率比 LinkedList 低,而在遍历的时候,Arra

  • 深入理解node exports和module.exports区别

    我们只需知道三点即可知道 exports 和 module.exports 的区别了: 1.exports 是指向的 module.exports 的引用 2.module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {} 3.require() 返回的是 module.exports 而不是 exports 所以: • 我们通过 var name ='nswbmw'; exports.name = name; exports.sayName =function(

  • 浅析node Async异步处理模块用例分析及常用方法介绍

    最近在研究nodejs,令我感受比较深的是--熟悉js代码的地球人都知道,js的加载顺序很重要!很重要!!那么问题来了,在编写node的时候,会在后台去请求很多接口(我们公司是与java后台交接数据的),接口就会有个回调,这么多回调怎么办呢--每个回调回来的加载顺序怎么去处理是个问题--总不可能去嵌套--嵌套--这样吧,那会显的多麻烦!!这么大的一个问题怎么没有处理方法呢,那是不可能的--对吧! Async异步处理模块! 以下是小sam的理解: 安装很简单,就跟普通的安装模块一样就行了 这样就安

  • 浅析Node.js非对称加密方法

    前言 刚回答了SegmentFault上一个兄弟提的问题<非对称解密出错>.这个属于Node.js在安全上的应用,遇到同样问题的人应该不少,基于回答的问题,这里简单总结下. 非对称加密的理论知识,可以参考笔者前面的文章<NODEJS进阶:CRYPTO模块之理论篇>. 完整的代码可以在 <Nodejs学习笔记> 找到,也欢迎大家关注 程序猿小卡的GitHub. 加密.解密方法 在Node.js中,负责安全的模块是crypto.非对称加密中,公钥加密,私钥解密,加解密对应的

  • 在node环境下parse Smarty模板的使用示例代码

    因为某种原因,我们的项目必须采用smarty模板,一直没找到好用的npm包 不得已扒开了fis3-smarty, gulp-smarty的代码,找到了一个npm包 smarty4Js 然后解决了node环境渲染smarty的问题 代码如下: // index.js: const express = require('express'); const smarty4Js = require('smarty4Js'); const path = require('path'); const app

  • 浅析Flutter AbsorbPointer 与 IgnorePointer的区别

    Flutter是什么? Flutter是Google一个新的用于构建跨平台的手机App的SDK.写一份代码,在Android 和iOS平台上都可以运行. AbsorbPointer AbsorbPointer是一种禁止用户输入的控件,比如按钮的点击.输入框的输入.ListView的滚动等,你可能说将按钮的onPressed设置为null,一样也可以实现,是的,但AbsorbPointer可以提供多组件的统一控制,而不需要你单独为每一个组件设置. 用法如下: AbsorbPointer( chil

  • linux服务器快速卸载安装node环境(简单上手)

    1.先卸载npm sudo npm uninstall npm -g 2.卸载node yum remove nodejs npm -y 看看是否有残留 进入 /usr/local/lib 删除所有 node 和 node_modules文件夹 进入 /usr/local/include 删除所有 node 和 node_modules 文件夹 进入 /usr/local/bin 删除 node 的可执行文件 3. 安装node 下载: wget https://cdn.npm.taobao.o

随机推荐