2

我是一名 java 程序员,几个月前我发现使用 javascript 和 html 进行前端编程,这非常酷。所以这是一个js新手的问题。

是否有任何 IDE、默认工作流程或 JavaScript 库开发的最佳实践?我不是指覆盖率和单元测试或类似的东西。我的意思是,例如,在使用一些 js 逻辑开发 html 控件时,我应该使用任何工具或技术吗?我是否应该在文本编辑器中编写小测试页面并在十几个浏览器中打开它,每分钟按 F5 并在浏览器的控制台上观看,或者也许有一些神奇的 IDE 将在按钮按下时重新加载所有浏览器实例并从浏览器收集报告?

4

3 回答 3

4

JavaScript 基础

确保您了解该语言。JavaScript 在这方面有点棘手:您可以很容易地认为您理解该语言,但有些奇怪的东西可能会偷偷摸摸。我强烈推荐Douglas Crockford的 JavaScript:The Good Parts。他还在 Youtube 上进行了一些同名的谈话,绝对值得一看。

JSLint

在您的工作流程中集成JSLint或类似工具。它是 Javascript 的样式检查器和静态分析工具,有助于捕捉细微的错误。

避免 F5

查看live.js

只需包含 Live.js,它就会通过向服务器发送连续的 HEAD 请求来监控当前页面,包括本地 CSS 和 Javascript。对 CSS 的更改将被动态应用,HTML 或 Javascript 更改将重新加载页面。尝试一下!

浏览器开发者工具

熟悉他们。与 Firefox/Firebug 相比,我个人更喜欢 Chrome 的开发人员工具,但无论您选择哪一种,都要学习如何使用调试器。

节点.js

您还应该知道,您不必在浏览器中测试 Javascript 逻辑:您可以使用node.js将其用作任何其他脚本语言。

于 2012-07-06T09:22:51.977 回答
3

作为一名经验丰富的程序员,这里是您应该遵循的 JS lib 生产步骤。

  1. 将 UI 与应用程序逻辑分开。 在这种情况下,为应用程序逻辑创建一个与所有 API 访问完全分离的组件。API 访问,这意味着 DOM 和 WSH 和 Node.js,应该分开。我什至使用不同的文件来强制和确保分离。
  2. 创建 UI 环境以访问您的逻辑。 拥有一个供您的观众访问的生产 UI 控件,以及一个用于沙盒开发的单独的内部 UI 控件。例如,我在http://prettydiff.com/上编写了我的应用程序,以便在命令行和浏览器中工作。我还编写了应用程序访问的访问方法,类似于已发布的 HTML,但对于我自己的开发来说不同,以实现更快速的单元测试。在沙盒 UI 中,可以使用递归 setTimeout 以间隔刷新页面,以便在编写和保存代码时进行自动化测试计划验证。
  3. 关注可用性和分发。 人们可以直接从我的网站、Github 和 NPM for Node 获取我的库。我有一个严格的流程,在产品发布期间我将代码上传到站点,然后在浏览器中执行快速验证。如果发布没有破坏应用程序,则推送到 Github,然后将这个完全相同的位置推送到 NPM。
  4. 分布式访问代码操作就更好了。 在线快速甚至自动访问库非常好,但能够通过请求访问单元测试更好。我可以通过 URI 告诉我的应用程序请求代码示例,直接在线访问代码示例,从而远程对我的应用程序的代码进行单元测试。这意味着不仅我的静态代码可用于分发和测试,而且它的操作也是如此。
  5. 好的文档就是一切。 如果文档薄弱,我什至不会费心检查一个库。我不是在谈论代码注释,尽管这些很重要。我说的是最终用户文档。我希望能够阅读文档并了解有关该主题的所有信息。Node.js 之所以流行,是因为即使在代码库稳定之前,它的文档就已经很糟糕了。让其他人在对您的代码进行 QA 之前对您的文档进行 QA。如果没有令人惊叹的文档,您的库对我来说就毫无价值了。
  6. 了解你的使命。 每个库都应该有一个清晰、简单和明确的目的。如果这没有建立,那么 lib 还没有准备好发布。如果增强功能混淆了库的用途,那么可能是时候将一个库划分为多个较小的库了。专注于精确、清晰、直接,并且只关注 lib 的唯一声明使命。
  7. 独立对于收养至关重要。 我不喜欢依赖于其他库或框架的库。你的 jQuery 库可能是自切片面包以来最好的东西,这很好,但我不会看它。独立性意味着更大的可移植性和自由度,它将它与您不知道的其他库混合和匹配。
  8. 风格很重要。 这是一个敏感的话题,但风格很重要。使您的库中的逻辑尽可能简单和声明性。如果您的代码本质上是绝对声明性的,那么您的算法模式就很棒。避免使用new关键字,除非您是经验丰富的 JavaScript 坏蛋并且严格限制使用this关键字,因为它会使您在以后的维护操作中失败。不要在算法上用连接构建大字符串,并不断观察代码的执行速度。因为即使是对样式的微不足道的更改或对逻辑的看似微小的改进也会破坏执行效率,所以我在我的所有 UI 控件上都设置了一个计时器。在您的开发中使用分析器,例如 Chrome 的 web 工具来跟踪 JS 执行中的长时间操作。
  9. Be open about your failures. Software is never perfect and other developers will always respect this. If you encounter a bug before anybody else then be open about the existence of the bug. If it will take more than a week to get the solution out then don't delay notification. Notify your users immediately so that they are aware. I recently rolled back a major enhancement to the logic of my diff algorithm because additional unit testing showed heavy slippage. I rolled back the same day I made a decision the prior release or two was flawed and was open about the rollback. If you want people to contribute to your code base or provide bug reports then openness is critical.
于 2012-07-06T09:49:26.473 回答
2

我知道您可能已经明确表示您不是指单元测试,但这正是我建议您编写 javascript 库的方式。

如果您是 Java 开发人员,您可能熟悉 jUnit。如果是这样,qUnit对您来说可能更自然。否则,我建议你看看JasmineMocha虽然我更喜欢 Mocha,但由于很棒的Jasmine-Jquery 插件,我对 Jasmine 的体验通常更适合浏览器内开发。

如果您正在编写 qUnit 测试,请查看IntelliJ IDE,它允许您执行测试以及提供代码覆盖率。

如果您在浏览器上进行开发,请查看LiveReload。它会为您观看文件并自动刷新您的浏览器 - 非常适合即时反馈。

为了浏览器的兼容性,我建议您先合理地让它在一个上工作,然后再担心其他的。不时检查一下,看看您是否发现问题。看看 jQuery 是否可以为您抽象出一些混乱。否则,请查看Adob​​es BrowserLab

于 2012-07-06T09:33:41.380 回答