深入浅析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 相关文章推荐
JS 类型转换常见方法小结
May 31 Javascript
ajax异步刷新实现更新数据库
Dec 03 Javascript
js+html5实现可在手机上玩的拼图游戏
Jul 17 Javascript
JS防止网页被嵌入iframe框架的方法分析
Sep 13 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
ES6中Array.find()和findIndex()函数的用法详解
Sep 16 Javascript
在vue-cli项目中使用bootstrap的方法示例
Apr 21 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 Javascript
JS几个常用的函数和对象定义与用法示例
Jan 15 Javascript
webpack5 联邦模块介绍详解
Jul 08 Javascript
浅谈vue.watch的触发条件是什么
Nov 07 Javascript
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
Jun 29 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
用PHP实现的随机广告显示代码
2007/06/14 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
PHP网站开发中常用的8个小技巧
2015/02/13 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
JSONP基础知识详解
2017/03/19 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
Python发送Email方法实例
2014/08/21 Python
Python编码爬坑指南(必看)
2016/06/10 Python
python类中super()和__init__()的区别
2016/10/18 Python
Python 字典与字符串的互转实例
2017/01/13 Python
python 获取网页编码方式实现代码
2017/03/11 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
应届生财务管理求职信
2013/11/06 职场文书
高中生物教学反思
2014/02/05 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
党员转正意见怎么写
2015/06/03 职场文书
医院见习总结
2015/06/24 职场文书
边城读书笔记
2015/06/29 职场文书