Twitter工程师聊JavaScript

本文是Twitter软件工程师Bonnie Eisenman对JS现状的看法和对开发者的一点建议

1、关于框架

框架的目标是减少繁琐的工作,是基础的脚手架工具

很多流行框架都针对一个问题:

“我如何创建一个支持复杂用户交互的单页应用,并且可以在前端管理我的业务逻辑?”

单页应用特点是无需页面跳转刷新,例如 Facebook首页、Gmail邮箱

应该使用哪个框架呢?React? Angular? Ember?

这些框架都是用来帮助你更好的开发应用,没有一个确切的答案说是应该用谁

如果你是刚起步的JS开发者,可能都不需要框架,用jquery就很好了,可能会枯燥,但可以让你更好的了解JS是如何工作的

如果开发复杂一些的网站,就建议考虑下React、Angular、Ember

现在框架太多,比较起来不容易,建议看一个网站 http://todomvc.com

TodoMVC用不同的框架实现了同一套TODO功能,便于大家对不同框架进行对比

个人推荐 React/Angular + Lodash

2、应该使用哪种Javascript?

Javascript 不是一个单一的语言,每个浏览器有自己的JS引擎,在不同浏览器和版本之间产生了不少差异

兼容性问题比较麻烦,http://caniuse.com 这个网站给出了各个API在不同浏览器下的支持情况

ES6 是最新的JS规范,引入了一些新的语法和功能,例如 箭头符、类、本地模块、模板字符串 ……

http://blog.teamtreehouse.com/get-started-ecmascript-6

这个网站是个很好的ES6入门读物

尽管JS有着不同的运行环境,但并不影响使用ES6新特性,因为有了像Babel这类很棒的工具,可以把你的代码转换为兼容各个平台的代码

JS还有一些变体,例如 ClojureScript、TypeScript、CoffeeScript

ClojureScript 是Clojure转换到JavaScript,而Clojure是一种运行在Java平台上的Lisp方言

TypeScript 本质上就是JavaScript,带有一套类型系统,因为JS本身无类型,TypeScript变添加了类型,使其更加标准

CoffeeScript 也很接近JavaScript,添加了很多语法糖,有些已经被ES6采用

那么如何选择?

建议使用ES6,因为各个浏览器的支持度越来越好,并且还有Babel这类的工具能够帮你

3、用什么build工具?

请求每个JS的依赖通常是一个script tag接着一个script tag,很慢

所以出现了JS bundle的概念,把所有依赖都放到一个文件中,并压缩

有些工具还支持 hot reloadingsourcemaps

hot reloading 当文件内容变化时,在浏览器中动态更新文件

sourcemaps 使debug更加容易,使bundle回到原始形式

Grunt、gulp、broccoli、brunch、browserify、webpack 都是JS build工具

他们每个都侧重于解决不同的问题,不好比较

对于新项目,我个人建议使用 webpack,因为他已经被广泛采用,可以处理具有复杂依赖关系的大型应用

4、如何测试?

JS的测试越来越重要,JS本身没有测试框架,需要依赖外置库

MochaJasmine是两个主流库,你来定义预期行为,然后进行断言

对于运行测试,Mocha提供了命令行工具,而Jasmine没有,很多开发者使用Karma,他是一个test runner,Mocha和Jasmine的测试都可以使用Karma运行

我个人的建议是 Karma + Jasmine,如果需要用到浏览器测试时,使用PhantomJS

PhantomJS 是一个没有界面的浏览器,常用来配合自动测试

还有一些其他有用的测试工具:

Selenium 可以在浏览器中进行真实的集成测试

Sinon 对于AJAX请求类型的测试很有帮助

你也可以建立一套持续集成系统,使用 JenkinsTravis

本文作者:杜亦舒

余下全文(1/3)
分享这篇文章:

请关注我们:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注