JavaScript专业规则12条

 

  学习JavaScript是困难的。它发展的如此之快,以致于在任何一个特定的时刻,你都不清楚本身是否“作错了”。有些时候,感受像是坏的部分超过了好的部分。然而,讨论这些并无意义,JavaScript正在征服世界,因此,咱们也只能这么作了。javascript

 

下面是个人一些建议:java

 

一、JS应该放到 .js 文件中 

  “额,只有那么几行而已…”,是的,个人意思是全部的 JS 都应该放在 .js 文件中。为何呢?由于这有助于可读性,节省带宽。行内 JavaScript 在每次页面加载时都会从新下载,相反的,单独的 .js 文件则会被缓存起来。正如你所看到的,这个规则有助于支持以下一长串的其余规则。这就是为何它的规则# 1。react

 

二、JS 应该是静态的

  我看到过不少程序员喜欢动态的使用JavaScript。他们喜欢像使用服务器端语言如C#, Ruby, Java那样来动态的使用JavaScript。千万不要这么作。你失去了代码着色、语法高亮显示和智能感知的支持。记住,JavaScript 应该属于一个 .js 文件(见规则 #1)。程序员

  然而,使用JSON引入动态行为。我把这称为JavaScript配置对象模式。具体方法以下:把JSON注入到你应用程序的头部,并根据业务逻辑的须要利用这些数据。你可能会想:“嘿,这违背了规则 #1”。我把 JSON 看做是数据,而不是代码,因此我破例,为了支持静态的、单独的JavaScript文件。web

 

StackOverflow 使用的这种模式,Google 也是。你能够看下他们的代码:npm

 

  正如你看到的,StackOverflow 注入了一些我的的设置,如 isNoticesTabEnabled。这个简单的JSON代码片断为你使用静态JavaScript文件自定义行为提供了必要的数据支持。为了实现这一点,须要序列号服务器端类为JSON,而后放置在 <head> 中。而后你能够在静态的JavaScript文件中根据须要参考这个数据结构,可以使用它,是由于它被注入到 <head> 中。gulp

 

三、JS 应该被压缩

  压缩能够减少文件体积,从而提高页面加载速度。记住,性能也是一项功能。由于,为了压缩,你须要把 JS 放到一个单独的文件中(见规则 #1)。压缩JS曾经很麻烦,但如今彻底是简单自动化的。有一打的方式能够作到,而Gulp 和 gulp-uglify 是一种低摩擦和自动化的办法。浏览器

 

四、JS 应该位于页面底部

  若是你把 <script> 标签放在 <head> 中,它会阻碍页面渲染。位于 <head> 中的脚本必须在页面显示前加载,所以把 <script> 放在底部的 </body> 前面能够先显示页面,而不用等 JS 文件下载完毕。这有助于提高感知性能。若是你的JavaSctipe必须位于 <head> 中,能够考虑使用 jQuery 的 $(document).ready 这样你的脚本能够等到 DOM 加载完毕后再执行。缓存

 

五、JS 应该实时的 Linted

  Linting 遵循代码风格、发现错别字、有助于避免错误。有不少这样的工具,我建议使用 ESLint。你可使用 Gulp 的 gulp-eslint 来运行它。Gulp 能够查看你全部的 JS 文件,并在你每次保存的时候运行 linter。另外,你须要把你的 JS 代码放在单独的 .js 文件中才能运行 linter 。服务器

 

六、JS应该有自动化测试

  在过去的几年中,咱们知道了测试的重要性。但它在很大程度上忽略了在JavaScript,直到最近才被重视。如今典型的JavaScript应用须要测试的部分远比你实际手动测试到的要多。使用JavaScript处理这么多的逻辑,关键的是具备自动测试。

  您能够经过工具,如 Selenium 自动化集成测试。然而,集成测试每每是脆弱的,因此我建议专一于自动化单元测试。自动化单元测试有多种选择。若是你是新手, 我建议你使用Jasmine,而若是你想要终极配置,可使用Mocha with Chai。

 

七、JS 须要封装

  前些年咱们了解了全局变量的风险,值得庆幸的是,如今有不少的方法来封装JS: 

  • Immediately Invoked Function Expressions (aka IIFE)
  • Revealing Modules
  • AMD (typically via RequireJS)
  • CommonJS (used by Node.js, use in browser via Browserify or Webpack)
  • ES6 modules

 

  ES6模块是将来。好消息是,虽然在浏览器中还不能很好的支持,但你能够用 Babel 来使用它。

  若是你不想 transpile, CommonJS多是你最佳的选择。因为 Node 使用的 CommonJS 模式,因此你可使用npm 来下载数千个包。CommonJS 不能在浏览器中运行,因此你可能须要  Browserify,Webpack, or JSPM.

 

8. JS 依赖应当明确

  这条规则与上述规则紧密相关。一旦你开始封装JavaScript,您须要一个简单的方法来引用其余模块。这就是常说的现代模块系统CommonJS和ES6模块的好处。你只须要在文件顶部指定依赖,就像 Java 或 C# 那样一句声明:

 

//CommonJS var react = require('react'); //ES6 Modules import React from 'React'

 

九、Transpile to JS

  最新版本的JavaScript,EcmaScript 2015(被你们熟知的名字是ES6) 官方版本在 6月份发布了。浏览器还不能很好的支持它的不少特性,但这并没有关紧要。你能够用 Babel 来体验它的新特性。Babel 把 ES6 transpile 到 ES5,若是你能忍受这么作,你如今就能够享受 ES6 的新特性。JavaScript预计一年发布一次的新版本了,因此你可能一直须要transpiling 。

  或者你喜欢强类型?那么你能够考虑 TypeScript。

 

十、JS应该自动构建

  咱们已经谈到了 linting、压缩、transpilation 和测试。但如何才能让这一切自动发生?很简单:使用自动构建。Gulp 就是这样一个结合了全部功能的工具。不过你也能够选择 Grunt 和 Webpack。或者若是你是一个高手,你也可使用 npm 来构建。问题的关键是,不要期望人记得手动运行这些东西的,自动化是一个很是棒的选择。

 

十一、使用框架或者库

  拿一些现成的东西来用。想保持轻量级?试试Backbone 或 Knockout。 或者 jQuery就够了。想要更多更全功能的?试试  Angular, Ember,,或者 React with Flux。

关键是:

不要试图从头开始。站在巨人的肩膀上。

  无论你选择哪一个框架,都应该分开你的关注,这就是下一点..

 

十二、JS Should Separate Concerns

  把 JS代码放到一个文件中的习惯很容易养成,或者盲目跟从你的框架的意见。当你移动到客户端的时候,不要忘记你在服务器端学到的经验教训。

  这里并不只仅意味着就像你在Angular 和 Knockout等 MVC 框架中那样分离模型、视图、控制器。编写JavaScript的时候应该像服务器端开发者那样思考问题。把你的业务逻辑和数据访问分离出来。

  这意味着AJAX调用都应该在一个地方。建立一个集中的客户端“数据访问层”。业务逻辑模块应包含纯JavaScript的。这使得逻辑易于重用,易于测试,升级也不受影响。

 

 

 

来自:WEB资源网  连接:http://webres.wang/12-rules-for-professional-javascript-in-2015/

原文:https://medium.com/@housecor/12-rules-for-professional-javascript-in-2015-f158e7d3f0fc

相关文章
相关标签/搜索