Twitter工程师聊JS

2018-04-03 17:05:33 浏览数 (1)

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

01

关于框架

框架的目标是减少繁琐的工作,是基础的脚手架工具 很多流行框架都针对一个问题: “我如何创建一个支持复杂用户交互的单页应用,并且可以在前端管理我的业务逻辑?” 单页应用特点是无需页面跳转刷新,例如 Facebook首页、Gmail邮箱 应该使用哪个框架呢?React? Angular? Ember? 这些框架都是用来帮助你更好的开发应用,没有一个确切的答案说是应该用谁 如果你是刚起步的JS开发者,可能都不需要框架,用jquery就很好了,可能会枯燥,但可以让你更好的了解JS是如何工作的 如果开发复杂一些的网站,就建议考虑下React、Angular、Ember 现在框架太多,比较起来不容易,建议看一个网站 http://todomvc.com TodoMVC用不同的框架实现了同一套TODO功能,便于大家对不同框架进行对比 个人推荐 React/Angular Lodash

02

应该使用哪种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这类的工具能够帮你

03

用什么build工具?

请求每个JS的依赖通常是一个script tag接着一个script tag,很慢 所以出现了JS bundle的概念,把所有依赖都放到一个文件中,并压缩 有些工具还支持 hot reloadingsourcemaps hot reloading 当文件内容变化时,在浏览器中动态更新文件 sourcemaps 使debug更加容易,使bundle回到原始形式 Grunt、gulp、broccoli、brunch、browserify、webpack 都是JS build工具 他们每个都侧重于解决不同的问题,不好比较 对于新项目,我个人建议使用 webpack,因为他已经被广泛采用,可以处理具有复杂依赖关系的大型应用

04

如何测试?

JS的测试越来越重要,JS本身没有测试框架,需要依赖外置库 MochaJasmine是两个主流库,你来定义预期行为,然后进行断言 对于运行测试,Mocha提供了命令行工具,而Jasmine没有,很多开发者使用Karma,他是一个test runner,Mocha和Jasmine的测试都可以使用Karma运行 我个人的建议是 Karma Jasmine,如果需要用到浏览器测试时,使用PhantomJS PhantomJS 是一个没有界面的浏览器,常用来配合自动测试 还有一些其他有用的测试工具: Selenium 可以在浏览器中进行真实的集成测试 Sinon 对于AJAX请求类型的测试很有帮助 你也可以建立一套持续集成系统,使用 JenkinsTravis 参考原文 http://www.infoq.com/articles/state-of-javascript-2016

0 人点赞