JS爆炸下的技术选型    刘尚奇    ThoughtWorks, 高级咨询师

  JS每6个星期出现一个新框架,那么如何进行JS的选型。以下从四个方面来分析。

  1、工具

     NPM for all the things   用来管理项目依赖就足够了。

     Webpack    除了资源的loader,还可以做编译构建等。

     很多时候只是用NPM +Webpack就足够对前端工程进行构建,打包,压缩等,不用再去引入像Gulp、Grunt这样的工具。

  2、类库

    react,官方更愿意是一个类库,是mvc中V的部分。

  3、框架

    对Angular.JS持谨慎态度

      首先,使用Angular.JS的团队并没有考虑到自己项目的真实情况。像这种MVVM框架 不能做SEO,可能去做企业内部的项目很合适,但是去做互联网的面对终端的一些项目,

    可能不是非常合适。另外,像Angular.JS这种双向绑定可能在管理数据复杂度上会有一些问题。如果你的应用增长到非常大的规模,如果你的状态维护成了一个问题,

    可能不是那么的合适。还有一点,Angular 2比Angular 1的api做了非常大的改变,导致Angular的前景和未来不是很明朗。

    推荐的替代框架

      Ember.js,它的命令行构建工具,约定优于配置的设计,以及ES6的支持为它赢得了诸多的支持者。

      Aurelia.js ,采用最新的javaScript:ECMAScript2016标准开发而成,被认为是下一代JavaScript客户端开发框架。Aurelia最了不起的是它的高度模块化,包含了许多小型库,

    可以非常方便的进行定制化开发。Aurelia遵循约定优于配置的理念,而且其约定恰到好处,很容易进行模块的产生和使用。

  4、语言

    不在推荐使用javaScript的一些替代性语言,相反去年ES6终于来了。 它里面包含等待已久的一些特性,比如Modules、Classes、Promises、Destructuring 。

    更重要的是JavaScript已经变成了一个事实的标准。可以确定, 如果现在你要开始一个项目,你应该使用ES6进行开发。

    总结:从工具》类库》框架》语言,类库和工具可以很容易替换,但是框架对项目的侵入性非常强,语言是项目非常难以改变的。依赖程度不断加深,越是往核心选型越应该谨慎。

  讲完了选型,下面来聊下架构

  那么在js爆炸下,什么样是一个好的架构,可以帮助你更好的升级技术。可以从以下这几个维度来看

  1、建立分层和抽象,提炼出POJO

    任何的项目都是需要一个合适的分层和抽象,这一部分是和具体的技术是无关的,更换技术时可以复用。

  2、模块化和依赖注入方便组件替换和升级

  3、依赖可翻转,让框架依赖核心代码

    在核心层构建代码,把代码注入到框架里,这样替换框架时,只是在替换调用点。

  4、可测试

    总结:认为架构选择比技术选择更重要。与其投入更多的时间去选择技术,不如投入更多的时间在一个合适的架构上。

    

《2016ThoughtWorks技术雷达峰会----js爆炸下的技术选型》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. Ajax+PHP+MySQL 登陆示例

    PHP是一门很好的语言,可以很方便的开发web应用程序,下面介绍一下PHP如何通过AJAX方式实现登录功能: 1 login.php 登录界面中,javascript脚本用ajax方式异步请求dolo ...

  2. JavaScript 数据类型判断

    JavaScript 的数据类型分为两类:原始类型(基本类型)和对象类型(引用类型).原始类型包括数字.字符串和布尔值,另外有两个特殊的原始值:null 和 undefined,除此之外的都是对象.对 ...

  3. HTML 表单

    HTML 表单包含表单元素. <form> 元素定义 HTML 表单 表单元素指的是不同类型的 input 元素.复选框.单选按钮.提交按钮等等. HTML 表单用于搜集不同类型的用户输入 ...

  4. UITableViewDataSource协议

    前言: 在iOS开发中,表视图UITableView 是我们做UI界面设计时的重要视图. 那么,使用表视图UITableView 需要遵守哪些协议呢? <UITableViewDataSourc ...

  5. SAP 使用较频繁的日期时间处理函数总结

    在ABAP实际开发中,经常需要用到一些日期时间处理函数,个人感觉经常使用到的函数进行一下汇总 1.  根据工厂日历 计划交货日期 和 收货处理时间 来计算 销售计划中计划完工日期,其他类似日期计算等 ...

  6. Dotfuscator混淆加密

    混淆加密 1. 需要安装Dotfuscator软件 2. 安装好后打开软件,找到编译好的DLL文件 3. 打开[setting]设置属性,如下图: 把 Disable String Encryptio ...

  7. XMPP学习——2、用户登录

    最近在学习XMPP的使用,打算完成一个完整较为完整地Demo示例,通过这个示例掌握xmpp的使用与开发.同时打算在这个示例中学习使用一下其他的开源类库,在此作为记录学习. 包括服务器端--Openfi ...

  8. iOS之属性修饰符 retain、strong和copy区别测试

    时不时会有点迷惑属性修饰符retain.strong.copy三者之间的区别,还是把测试过程记录下来好一点! 1.属性修饰符结论 2.给retain.strong.copy修饰的字符串属性赋值指针变化 ...

  9. Android JNI简介

    JNI简介 JNI (Java Native Interface),Java的本地接口 JNI是Java众多开发技术中的一门,意在利用本地代码,为Java程序提供 更高效,更灵活的拓展.应用场景包括: ...

  10. 安卓开发NDK环境搭建

    第一步preferences - android - NDK 第二步 输入ndk文件所在目录 第三步 创建文件名(右击项目,阿 androidtool - add native sppuort)