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. 15款精美的 WordPress 电子商务网站模板

    在这篇文章中,我们收集了15款精美的 WordPress 电子商务网站模板.WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许多第三方开发的免费模板,安装 ...

  2. CSS实现DIV水平 垂直居中-1

    水平大家都知道,一般固定宽度给个margin:0 auto:就可以了.下面实现水平垂直都居中 HTML <div class="parent"> </div> ...

  3. [js开源组件开发]数字或金额千分位格式化组件

    数字或金额千分位格式化组件 这次距离上一个组件<[js开源组件开发]table表格组件>时隔了一个月,由于最近的项目比较坑,刚挖完坑,所以来总结性提出来几个组件弥补这次的空缺,首先是金额和 ...

  4. 手把手系列:实现Nat地址转换

    1.实验目的: 掌握内网中的主机C1连接到Internet时,通过NAT实现私有全局地址转换.   2.实验拓扑: 3.实验步骤: 步骤一:给主机C1和C2配置IP地址.子网掩码和网关.如图: C1: ...

  5. SharePoint 2010 站点附加数据升级到SP2013

    首先,去SharePoint 2010的数据库服务器上,找到站点的数据库,备份.还原到SharePoint 2013环境中: 如果不知道数据库服务器是哪台,可以通过服务器场上的服务器查看: 如果不知道 ...

  6. SharePoint Online 创建门户网站系列之导航

    前 言 关于SharePoint Online中的导航,基本是由Html + Css + JavaScript组成效果以及样式,然后在后台列表或者SharePoint Online元数据导航当做数据源 ...

  7. SharePoint 判断用户是否在字段"人员和组"里面

    两个自己平时写的方法,记录下来,方便以后查找使用: 1.判断用户是否在字段人员和组里面: public static bool IsUserInFiled(int UserID, string Lis ...

  8. 在ArcGIS中如何进行POI点抽稀

    对POI点添加权重等级类型信息.例如添加短整形字段Weight,并根据业务逻辑设置不同种类的POI的权重值,如分5类,0代表重要性最低的POI,4代表重要性最高. 在ArcMap的标注管理栏中,设置使 ...

  9. Linux学习心得之 LVM管理与Linux系统安装

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 LVM管理与Linux系统安装 1.前言 2.LVM 简介与术语 3.LVM 使用 4.Li ...

  10. [Android]使用RecyclerView替代ListView(三)

    以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4268097.html  这次来使用RecyclerView实现Pinn ...