我总是有点恼火,javascript项目有两个主要领域 - 节点和"浏览器" - 虽然大多数浏览器JS都可以在Node内部轻松运行,如果需要,可以使用几个DOM来存储DOM,将Node内容移植到浏览器通常是事后的想法。
这一切似乎都是开发人员社区浪费的精力,所有JS开发人员都可以通过开发最少的共同点来减轻这种压力。 (浏览器)并使用各种填充程序来使用除普通旧浏览器之外仅在Node或其他JS环境中可用的功能。
这不仅会削减很多生态系统,还会使浏览器中的开发变得更加真实,这也使浏览器超级大国变得司空见惯......例如在browserver查找,设置一个浏览器内部的http服务器,但由于浏览器实际上无法接受http请求,因此使用websockets与代理节点服务器通信即可。
所以我想问一下,网络浏览器的javascript环境与Node相比有哪些真正的技术限制? 我认为Node只是一个javascript环境,加上http服务器和本地文件系统,减去了DOM和chrome"。是否存在技术原因导致开发人员无法转向我上面描述的方法,为浏览器JS环境开发(这有官方名称吗?)并使用节点的填充程序?
答案 0 :(得分:3)
在客户端上运行的代码通常与服务器上运行的代码具有非常不同的目标。然而,当它有意义在两个环境中使用一些libarary的功能时,很多都是使用通用AMD形式定义的,这使得它们与平台无关(例如Q )。
两种环境之间的主要区别在于,一种环境受到严格的安全策略和限制(浏览器),而另一种环境则不受影响。浏览器也是安全相关操作的不可信任环境,例如强制执行安全权限。
我还会在这里添加@jfriend00评论,因为我认为它也非常相关,会暴露其他差异:
最大的实际区别是你必须设计一个浏览器 应用程序在已安装的现有浏览器基础上工作 包括旧版本(最低公分母)。部署时 节点应用程序,您可以选择您的ONE版本节点 想要开发和部署。这允许节点开发人员 使用节点中最新的最大功能,这些功能将无法使用 跨越一般浏览器人口多年。 @ jfriend00
像浏览器这样的项目非常有趣,而且我都在进行实验性开发,但它们在实践中是否真的有用?应该为他们真正有用的环境设计图书馆。在两种环境中提供所有库没有任何好处。这不仅会导致代码复杂性增加,有些功能有时也不会变质,导致平台之间的API不一致。
答案 1 :(得分:0)
以下是这两种环境之间的一些差异:
Node.js 具有用于 HTTP 和套接字通信的内置库,它可以通过这些库创建 Web 服务器,从而替代其他类型的服务器,例如。 Apache 或 Nginx
Node.js 没有与 DOM、CSS、性能、文档以及所有与“window”对象相关的 API 相关的浏览器 API。正是因为缺少window对象,全局对象才改名为“global”。
Node.js 可以像任何其他源应用程序一样完全访问系统。这意味着它可以直接读写文件系统,也可以无限制地访问网络,并且可以执行软件...
由于 JavaScript 的发展速度非常快,浏览器往往滞后于 JavaScript 新功能的实现,因此您需要在浏览器中使用旧版本的 JavaScript,但这不适用于 Node.js。如果您的 Node.js 版本支持,您可以使用所有现代 ES6-7-8-9 JavaScript。
尽管在 ES6 中存在处理模块的语法(导入/导出语法),但它最近才作为实验选项添加到 node.js 中。 Node.js 主要使用 CommonJS 语法来处理模块。