深入浅析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 相关文章推荐
Javascript实现的分页函数
Dec 22 Javascript
Ruffy javascript 学习笔记
Nov 30 Javascript
Javascript在IE或Firefox下获取鼠标位置的代码
Dec 18 Javascript
JQuery学习笔记 nt-child的使用
Jan 17 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
Javascript核心读书有感之语句
Feb 11 Javascript
JavaScript深度复制(deep clone)的实现方法
Feb 19 Javascript
JavaScript类型系统之布尔Boolean类型详解
Jun 26 Javascript
JS常用加密编码与算法实例总结
Dec 22 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
Jun 21 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 Javascript
Vue 实现从小到大的横向滑动效果详解
Oct 16 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
PHP HTML代码串 截取实现代码
2009/06/29 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
jquery中this的使用说明
2010/09/06 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
分析python服务器拒绝服务攻击代码
2014/01/16 Python
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
python里glob模块知识点总结
2021/01/05 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
11月升旗仪式讲话稿
2014/02/15 职场文书
校园标语大全
2014/06/19 职场文书
2014年技术员工作总结
2014/11/18 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
Python pandas求方差和标准差的方法实例
2021/08/04 Python
vue 自定义组件添加原生事件
2022/04/21 Vue.js