服务器端 Javascript 最佳实践?
-
10-07-2019 - |
题
我们有一个基于 Java 构建的 CMS,它有用于服务器端 JS 的 Mozilla Rhino。目前 JS 代码库很小,但正在不断增长。在为时已晚和代码变得一团糟之前,我想介绍一些最佳实践和编码风格。
显然,名称空间控制非常重要。但是其他最佳实践怎么样——尤其是对于 Java 程序员来说?
解决方案
以下是来自前线的一些提示:
- 与 Java 一样,对函数使用 Doxygen/JsDoc 风格的文档块
- 单元测试。个人喜欢JsTestDriver,因为它也可以从CI服务器自动执行。
- 使用 JSLint。它会对糟糕的代码挑剔
- 考虑使用 Google Closure 编译器。它会对像 JSLint 这样的代码挑剔,但它对于发现糟糕的文档块等很有帮助。
- 确保团队中的每个人都了解闭包的工作原理。不然会引起头痛
- 正如您提到的,命名空间非常重要,特别是如果您希望代码与其他 JS 库(
var myns = myns || {};
) - 就我个人而言,我发现使用一个提供 OOP 帮助程序(例如类等)的库。有帮助。您可以使用原型继承,但这种方式通常有点棘手。
其他提示
正如 Douglas Crockford 喜欢说的那样,JavaScript 是世界上最容易被误解的编程语言。虽然很多人不知道,但是有一个 正确的 使用 JavaScript 进行编码的方式。我毫不怀疑,如果您让 Java 开发人员在了解如何编写良好的 JavaScript 之前就开始编码,您将遇到严重的麻烦。
首先要做的就是确保每个人都阅读了 Mozilla 的优秀文章 A re-introduction to JavaScript (https://developer.mozilla.org/en/a_re-introduction_to_javascript)。JavaScript 最大的问题之一是有很多方法可以完成最常见的任务,本文应该让人们达成共识。另一个重要的参考文献是 Douglas Crockford 的作品,包括 JavaScript:好的部分。
另一件令许多 Java/C++ 程序员感兴趣的事情是 JavaScript 使用 功能 作用域不是块作用域。这可能会导致一些非常棘手的问题。A List Apart 上有一篇关于这个问题的很棒的文章,名为 Binding in JavaScript。
总结上述资源中讨论的主要问题,需要学习的最关键的差异是
- 如何使用原型继承(与基于类的继承)编写面向对象的代码
- 如何使用闭包和 lambda
- 如何利用动态物体的力量
- 如何编写函数范围的代码
由于你有一个Java引擎,所以养成为JS代码编写单元测试的习惯。选择编码风格并大力应用。如果可能,请使用工具检查代码是否符合编码样式。