Twitter工程师聊JavaScript
本文是Twitter软件工程师Bonnie Eisenman对JS现状的看法和对开发者的一点建议
1、关于框架
框架的目标是减少繁琐的工作,是基础的脚手架工具
很多流行框架都针对一个问题:
“我如何创建一个支持复杂用户交互的单页应用,并且可以在前端管理我的业务逻辑?”
单页应用特点是无需页面跳转刷新,例如 Facebook首页、Gmail邮箱
应该使用哪个框架呢?React? Angular? Ember?
这些框架都是用来帮助你更好的开发应用,没有一个确切的答案说是应该用谁
如果你是刚起步的JS开发者,可能都不需要框架,用jquery就很好了,可能会枯燥,但可以让你更好的了解JS是如何工作的
如果开发复杂一些的网站,就建议考虑下React、Angular、Ember
现在框架太多,比较起来不容易,建议看一个网站 https://todomvc.com
TodoMVC用不同的框架实现了同一套TODO功能,便于大家对不同框架进行对比
个人推荐 React/Angular + Lodash
2、应该使用哪种Javascript?
Javascript 不是一个单一的语言,每个浏览器有自己的JS引擎,在不同浏览器和版本之间产生了不少差异
兼容性问题比较麻烦,https://caniuse.com 这个网站给出了各个API在不同浏览器下的支持情况
ES6 是最新的JS规范,引入了一些新的语法和功能,例如 箭头符、类、本地模块、模板字符串 ……
https://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 reloading 和 sourcemaps
hot reloading 当文件内容变化时,在浏览器中动态更新文件
sourcemaps 使debug更加容易,使bundle回到原始形式
Grunt、gulp、broccoli、brunch、browserify、webpack 都是JS build工具
他们每个都侧重于解决不同的问题,不好比较
对于新项目,我个人建议使用 webpack,因为他已经被广泛采用,可以处理具有复杂依赖关系的大型应用
4、如何测试?
JS的测试越来越重要,JS本身没有测试框架,需要依赖外置库
Mocha和Jasmine是两个主流库,你来定义预期行为,然后进行断言
对于运行测试,Mocha提供了命令行工具,而Jasmine没有,很多开发者使用Karma,他是一个test runner,Mocha和Jasmine的测试都可以使用Karma运行
我个人的建议是 Karma + Jasmine,如果需要用到浏览器测试时,使用PhantomJS
PhantomJS 是一个没有界面的浏览器,常用来配合自动测试
还有一些其他有用的测试工具:
Selenium 可以在浏览器中进行真实的集成测试
Sinon 对于AJAX请求类型的测试很有帮助
你也可以建立一套持续集成系统,使用 Jenkins 或 Travis
本文作者:杜亦舒
你也许感兴趣的:
- ECMAScript 2024新特性
- 【外评】JavaScript 变得很好
- 一长串(高级)JavaScript 问题及其解释
- 不存在的浏览器安全漏洞:PDF 中的 JavaScript
- Python 里的所有双下划线(dunder)方法、函数和属性
- 【程序员搞笑图片】JavaScript
- JavaScript 膨胀于 2024 年
- 解码为什么 JS 中的 0.6 + 0.3 = 0.89999999999999 以及如何解决?
- 用 JavaScript 实现的 17 个改变世界的方程式
- 【译文】Dropbox:我们如何将 JavaScript 打包程序的大小减少 33% 的
你对本文的反应是: