node环境和浏览器的区别

一、全局环境下this的指向

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

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。

二、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也有这方面的补充,相信未来会更好。。。

 


更多专业前端知识,请上 【猿2048】www.mk2048.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]: 你提到了关于在浏览器中执行Webpack代码的问题。目前有一些解决方案可以在浏览器中进行Webpack编译,例如codesandbox。Codesandbox是一个基于浏览器的编译策略,可以用于在浏览器中打包React、Vue等应用。它可以被看作是Webpack的浏览器版本。然而,目前还没有直接在浏览器中执行Webpack而不是创建一个新的Webpack的方法。\[1\] 引用\[2\]: 你还提到了关于在浏览器中模拟Node.js运行环境的问题。虽然Node.js和Chrome都使用了V8引擎,并且许多Node.js库的代码可以在Chrome中执行,但是在浏览器中完全模拟Node.js的运行环境是非常困难的。尽管有一些库可以帮助我们构建这样的环境,如BrowserFS、memfs和rollup-plugin-node-builtins,但是关键的Node.js模块在浏览器中是不可用的,需要进行修改。目前,Node.js支持CommonJS(cjs)和ES模块(esm),但是为了简化问题,你目前只开发了cjs模块。\[1\] 总结来说,目前还没有直接在浏览器中执行Webpack而不是创建一个新的Webpack的方法。在浏览器中完全模拟Node.js的运行环境也是非常困难的,因为关键的Node.js模块在浏览器中是不可用的。尽管有一些库可以帮助我们构建类似的环境,但是需要进行修改和适配。\[1\] #### 引用[.reference_title] - *1* *2* [浏览器运行node.js_如何在浏览器中运行Node.js [教程]](https://blog.csdn.net/dfsgwe1231/article/details/107264234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值