node环境和浏览器的区别

1、全局环境下this的指向javascript

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

  

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

  并且在浏览器中的window下封装了很多的API 好比 alert 、document、location、history 等等还有不少。我门就不能在node环境中xxx();或window.xxx();了。由于这些API是浏览器级别的封装,存javascript中是没有的。固然node中也提供了很多node特有的API。node

2、js引擎jquery

  在浏览器中不一样的浏览器厂商提供了不一样的浏览器内核,浏览器依赖这些内核解释折咱们编写的js。可是考虑到不一样内核的少许差别,咱们须要对应兼容性好在有一些优秀的库帮助咱们处理这个问题好比jquery、underscore等等。npm

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

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

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

3、DOM操做闭包

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

4、I/O读写

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

5、模块加载

  javascript有个特色,就是原生没提供包引用的API一次性把要加载的东西全执行一遍,这里就要看各位闭包的功力了。所用东西都在一块儿,没有分而治之,搞的特别没有逻辑性和复用性。若是页面简单或网站固然咱们能够经过一些AMD、CMD的js库(好比requireJS 和 seaJS)搞定事实上不少大型网站都是这么干的。

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

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

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

 

  固然,关于node和浏览器的区别还有不少,我会随时补充上。

相关文章
相关标签/搜索