Node环境和浏览器javascript环境的区别

我总是有点恼火,有两个主要的领域的JavaScript项目 – 节点和“浏览器” – 而大多数浏览器JS可以很容易地在Node内运行一些DOM的东西,如果需要的话,移植节点给浏览器的东西通常是事后的事情。

这一切似乎都是开发人员社区所浪费的精力,所有JS开发人员只是为了“最小公分母”(浏览器)而开发,并使用各种垫片来使用仅在节点或其他节点上可用的function除了普通的旧浏览器之外的JS环境。

这不仅会削减很多生态系统的残余,并使浏览器中的开发更加现实,而且还会让浏览器超级大国变得很平常……以浏览器为例,它在浏览器内build立一个http服务器,但因为浏览器实际上不能接受http请求,所以使用websocket与代理节点服务器通信。

所以我想问一下,浏览器的javascript环境与Node的真正技术约束是什么? 我认为节点只是“一个JavaScript环境,加上http服务器和本地文件系统,减去DOM和铬”。 是否有技术上的原因,为什么开发人员不能转移到我上面描述的方法,开发浏览器JS环境(这是否有一个正式名称?)和使用Shims的节点?

在客户端上运行的代码通常与运行在服务器上的代码有着非常不同的目标 。 然而, 在这两种环境中使用libarary的一些特性时,有很多是使用通用AMDforms定义的,这使得它们与平台无关(如Q )。

两种环境的主要区别在于,一方面受到严格的安全策略和限制(浏览器),另一方面则不受限制。 浏览器也是安全相关操作的不可信赖的环境,例如强制执行安全权限。

我也会在这里添加@ jfriend00评论,因为我相信这也是非常相关的一个暴露其他的区别:

最大的实际区别是,您必须devise一个浏览器应用程序,以在现有浏览器(包括旧版本(最低公分母))的已安装基础上工作。 部署节点应用程序时,您可以select要开发并部署的节点的ONE版本。 这使得节点开发人员可以使用节点中最新的最佳function,这种function在多年的浏览器群体中将无法使用。 @ jfriend00

browserver这样的项目很有意思,我都是为了实验性的开发,但是在实践中它们真的有用吗? 图书馆应该为其真正有用的环境而devise。 在两种环境下可以使用所有库都没有任何好处。 不仅如此,通常会导致代码复杂度的增加,有些function有时不会导致平台之间的API不一致。