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


Posted in Javascript onAugust 14, 2018

正好最近有朋友咨询我这个问题,那就简单谈一下我理解的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环境和浏览器的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
!DOCTYPE声明对JavaScript的影响分析
Apr 12 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
购物车选中得到价格实现示例
Jan 26 Javascript
bootstrap data与jquery .data
Jul 07 Javascript
yarn的使用与升级Node.js的方法详解
Jun 04 Javascript
React/Redux应用使用Async/Await的方法
Nov 16 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
Jan 23 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
Feb 06 Javascript
JavaScript使用小插件实现倒计时的方法讲解
Mar 11 Javascript
JS实现随机点名器
Apr 12 Javascript
JQuery获得内容和属性方法解析
May 30 jQuery
解决Vue-Router升级导致的Uncaught (in promise)问题
Aug 07 Javascript
解决JavaScript layui 下拉框不显示的问题
Aug 14 #Javascript
react实现换肤功能的示例代码
Aug 14 #Javascript
详解vue-cli3使用
Aug 14 #Javascript
详解angular部署到iis出现404解决方案
Aug 14 #Javascript
学习React中ref的两个demo示例
Aug 14 #Javascript
React 无状态组件(Stateless Component) 与高阶组件
Aug 14 #Javascript
浅析Vue实例以及生命周期
Aug 14 #Javascript
You might like
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
Javascript Objects详解
2014/09/04 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
Python修改MP3文件的方法
2015/06/15 Python
Python中有趣在__call__函数
2015/06/21 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python 读入多行数据的实例
2018/04/19 Python
Python datetime包函数简单介绍
2019/08/28 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
python程序如何进行保存
2020/07/03 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
奉献演讲稿范文
2014/05/21 职场文书
清明节随笔
2015/08/15 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript