【发布时间】:2011-12-23 00:45:59
【问题描述】:
我正在浏览器和运行 node.js 的服务器之间开发一个网络应用程序。我现在正在共享很多代码,但是当我实际部署它时,我希望客户端只获取客户端特定的代码。我现在的选择是:
1.) 使用继承实现任何浏览器/node.js 差异。我已经在几个地方尝试过这个,我最终得到了很多非常非常基本的类,它们的父类通常只是部分专门化了一个功能。这不是我非常喜欢的风格,因为当你试图找出实际发生的事情时,它意味着很多间接性。
2.) 在全局范围内定义一个类似 IS_BROWSER 的常量,然后在我需要更改浏览器与 node.js 上的代码路径时检查它。然后闭包编译所有具有高级优化的 js 以删除浏览器上的死代码(设置 IS_BROWSER = true)。假设我做了我需要做的任何事情来在闭包编译器中进行高级优化,这种方法是否有任何问题?
3.) ??我愿意接受建议。
【问题讨论】:
-
您使用的是什么 JavaScript 库?相当多的 JavaScript 库将为您抽象出浏览器和 node/rhino 之间的差异。按照你的 #2 使用全局常量也很有效,但我相信最好的方法是使用抽象所有这些的库。
-
许多差异实际上是应用程序逻辑差异,因此它们不会被库抽象掉。
-
我很好奇,浏览器环境与无头服务器环境会有什么逻辑差异? AFAIK,它们都支持环境中的大多数相同功能。如果对 CPU 使用率、线程等有顾虑,那么我认为使用“has.js”库进行环境特征检测可能是未来最灵活的方式。
-
@StephenChung:您能否举一个“库将为您抽象出浏览器和 node/rhino 之间的差异”的示例?
-
@bukzor,例如 Dojo 支持大多数浏览器、rhino 和 node(虽然我不确定 node 支持是否正式推出)。
标签: javascript node.js google-closure-compiler