2017值得一瞥的JavaScript相关技术趋势

2017值得一瞥的JavaScript相关技术趋势从属于笔者的Web 前端入门与工程实践,推荐阅读2016-我的前端之路:工具化与工程化获得更多关于2016年前端总结。本文主要内容翻译自,笔者对于每个条目进行了些许完善。

本文中提及的这些趋势可能离大部分开发者还很远,或者说离真正的大规模工程化应用还很远,不过不妨碍我们提前两三年了解下。本文仅代表原作者个人看法,不喜留言轻喷,译者也很好奇大家对这个列表的看法。

跨年前两天,Dan Abramov在Twitter上提了一个问题:

JS社区毫不犹豫的抛出了它们对于新技术的预期与期待,本文内容也是总结自Twitter的回复,按照流行度降序排列。有一个尚未确定的小点是既然函数式编程已不再是少数派,是否要把它踢出红毯呢?

WebAssembly

去年笔者就表示过了对于WebAssembly的期待,WebAssembly就是面向Web平台的底层代码。其初衷是希望能够使所有语言都能够编译运行到Web平台,这一点对于很多函数式编程、响应式编程的粉丝充满吸引力。特别是随着这几年JavaScript社区的突飞猛进,很多开发者并不能跟得上这门语言衍化的速度,因此他们也非常希望能够直接用自己习惯的语言而不是要去重头学一门从入门到直接放弃的语言。不过JavaScript目前还处于明显的上升势头,暂时还没人唱衰它。并且WebAssembly仍处于襁褓中,才进入到预览阶段,离真正的发布还有很长的距离。总结而言,笔者建议我们都应该对WebAssembly保持一定的关注,毕竟它会对未来的JavaScript造成极大的影响。如果你对于WebAssembly有兴趣,那么推荐阅读Eric
Elliott的相关博客。

Elm

笔者个人不太意愿使用Elm,不过其特性还是很有借鉴价值

2016年不少的开发者参与到Elm的开发中,Elm不仅仅是JavaScript的扩展库,而是一门可以编译到JavaScript的编程语言,对于很多热衷于函数式编程的开发者是个不错的选择。参考Elm 入门介绍,Elm提供了如下特性:

  • 并不会存在运行时错误,没有null,没有undefined is not a funtion。
  • 非常友好的错误提示信息能够辅助你开发。
  • 比较严格的代码规范与项目架构,保证了你的应用在快速迭代中依然保持着最佳实践。
  • 自动为所有的Elm包添加语义版本描述。

总而言之,Elm为我们提供了优秀的工具来保证编写干净、简单与碎片化的代码,并且因为Elm是可以编译到JavaScript,因此很多JavaScript开发者都可以保持下关注或者尝试下。

babili(babel-minify)

Babili最早于2016年8月份发布,它是基于Babel工具链上的支持原生ES6语法的压缩工具。Henry Zhu在这篇文章中称述了为什么我们需要另一个压缩工具,关键点如下:

目前大部分压缩工具只能

够处理ES5代码,因此在压缩之前需要先进性编译,而Babili能够支持直接输入ES2015+。随着浏览器性能的提升,越来越多的浏览器支持直接运行ES2015的代码,因此我们不需要再进行转换编译。另外Babili也可以作为Babel
preset引入到现有的Babel配置中,也可以作为直接使用的命令行工具。

这里举个简单的例子,我们编写了如下的ES6类:


  1. class Mangler {    
  2.    constructor(program) {    
  3.      this.program = program;    
  4.    }    
  5.  }    
  6.  // need this since otherwise Mangler isn't used    
  7.  new Mangler();  

之前,利用传统的Babel进行编译与压缩,会得到如下代码:


  1. // ES2015 code -> Babel -> Uglify/Babili -> Minified ES5 Code    
  2.  var a=function a(b){_classCallCheck(this,a),this.program=b};a();  

而Babili的效果如下:


  1. // ES2015 code -> Babili -> Minified ES2015 Code    
  2.  class a{constructor(b){this.program=b}}new a;  

OCaml

OCaml本身和JS没啥关系,不过列表接下来的两项都是基于OCaml,因此还是要先介绍下。如果你关注了近两年来的函数式编程崛起之路,你或许听过Haskell。而得益于OCaml能够编译到就S,其以后来居上的姿态凌驾于Haskell。Facebook的不少开发者都是OCaml的粉丝,他们的Hack、Flow以及Infer都是基于OCaml构建的。

BuckleScript

BuckleScript是基于OCaml实现的服务端框架,由著名的Bloomberg团队创造而来。Duane Johnson对他们的解释如下:

BuckleScript或者bsc,是个基于OCaml编译器的相对较新的JavaScript服务端框架。换言之,你可以使用优秀的函数式、自带类型的OCaml语言,同时也能继续背靠基于npm包管理器的Web生态系统。

我们来简要的看下BuckleScript代码风格,譬如用BuckleScript实现简单的服务端:


  1. let port = 3000    
  2.  let hostname = "127.0.0.1"    
  3.  let create_server http =    
  4.    let server = http##createServer begin fun [@bs] req resp ->    
  5.        resp##statusCode #= 200;    
  6.        resp##setHeader "Content-Type" "text/plain";    
  7.        resp##_end "Hello world\n"    
  8.      end    
  9.    in    
  10.    server##listen port hostname begin fun [@bs] () ->    
  11.      Js.log ("Server running at http://"^ hostname ^ ":" ^ Pervasives.string_of_int port ^ "/")    
  12.    end    
  13.  
  14.  let () = create_server Http_types.http  

编译输出为:


  1. 'use strict';    
  2.  var Pervasives = require("bs-platform/lib/js/pervasives");    
  3.  var Http       = require("http");    
  4.  
  5.  var hostname = "127.0.0.1";    
  6.  
  7.  function create_server(http) {    
  8.    var server = http.createServer(function (_, resp) {    
  9.      resp.statusCode = 200;    
  10.      resp.setHeader("Content-Type", "text/plain");    
  11.      return resp.end("Hello world\n");    
  12.    });    
  13.    return server.listen(3000, hostname, function () {    
  14.      console.log("Server running at http://" + (hostname + (":" + (Pervasives.string_of_int(3000) + "/"))));    
  15.      return /* () */0;    
  16.    });    
  17.  }    
  18.  
  19.  create_server(Http);  

OCaml最大的特性就是其函数式语言特性,我们再看下其对于不可变类型的支持,我们使用OCaml stdlib实现的不可变类型如下:


  1. module IntMap = Map.Make(struct    
  2.    type t = int    
  3.    let compare (x : int) y = compare x y    
  4.  end)    
  5.  
  6.  let test () =    
  7.    let m = ref IntMap.empty in    
  8.    let count = 1000000 in    
  9.    for i = 0 to count do    
  10.      m := IntMap.add i i !m    
  11.    done;    
  12.    for i = 0 to count do    
  13.      ignore (IntMap.find i !m)    
  14.    done    
  15.  
  16.  let () = test()  

而如果要用Facebook Immutable实现的代码为:


  1. 'use strict';    
  2.  
  3.  var Immutable = require('immutable');    
  4.  var Map = Immutable.Map;    
  5.  var m = new Map();    
  6.  
  7.  function test() {    
  8.    var count = 1000000;    
  9.    for(var i = 0; i < count; ++i) {    
  10.      m = m.set(i, i);    
  11.    }    
  12.    for(var j = 0; j < count; ++j) {    
  13.      m.get(j);    
  14.    }    
  15.  }    
  16.  
  17.  test();  

性能评测下,二者的执行时间对比为:

  • BuckleScript: 1186ms
  • JavaScript: 3415ms

编译后的体积为:

  • BuckleScript (production): 899 Bytes
  • JavaScript: 55.3K Bytes

ReasonML

ReasonML与React师出同门,是基于OCamel设计的语法友好、编辑器支持程度高,并且有强大的编译工具支持的语言。建议阅读Sean Grove对ReasonML的介绍。本文简单介绍几个JavaScript与Reason的语法对比:

Purescript

另一个强类型、高性能的能够编译到JavaScript的编程语言,其定位与Elm类似,主要特性为:

  • 没有运行时错误
  • 严格的,类似于JavaScript的计算
  • 支持JavaScript 对象语法
  • 提供相较于Hashkell更强大方便的类型系统
  • 更方便地JavaScript库集成

Webpack-blocks

Dan Abramov说过,Webpack的定位就是在相对底层,因此将配置以编程块的方式实现会更加完备。


  1. const { createConfig, defineConstants, env, entryPoint, setOutput, sourceMaps } = require('@webpack-blocks/webpack2')          
  2.    const babel = require('@webpack-blocks/babel6')          
  3.    const devServer = require('@webpack-blocks/dev-server2')          
  4.    const postcss = require('@webpack-blocks/postcss')          
  5.    const autoprefixer = require('autoprefixer')          
  6.  
  7.    module.exports = createConfig([          
  8.      entryPoint('./src/main.js'),          
  9.      setOutput('./build/bundle.js'),          
  10.      babel(),          
  11.      postcss([          
  12.        autoprefixer({ browsers: ['last 2 versions'] })          
  13.      ]),          
  14.      defineConstants({          
  15.        'process.env.NODE_ENV': process.env.NODE_ENV          
  16.      }),          
  17.      env('development', [          
  18.        devServer(),          
  19.        devServer.proxy({          
  20.          '/api': { target: 'http://localhost:3000' }          
  21.        }),          
  22.        sourceMaps()          
  23.      ])          
  24.    ]);  

GraphQL

GraphQL是个不错的REST替代查询语言,特别是对于那些拥有大量数据的公司。这个案例分析很好地阐述了从REST到GraphQL的转变之路。我能够想象2017年GraphQL会继续处于上升势头,不过要谈到真的大规模实施,还要到2018年吧。

React Storybook

相信大家对于React Storybook并不陌生了,你能够独立于应用而交互式的开发你的组件,就如下图所示:

[jQuery 3.0]()

爷爷辈的jQuery仍然处于不断的迭代更新中,可能很多开发者忽略了2016年6月份发布的jQuery 3.0版本,可以参考这里获取更多信息。

Pixi.js

如果你打算在浏览器中实现精彩的2D效果,特别是对于使用WebGL的游戏开发者,Pixi.js是个值得一看的库,可以参考这里获取更多的Demo。

Preact与[inferno]()

非常优秀的React的替代库。

Rust

Rust可以编译到JavaScript啦(通过emscripten)。

Custom Elements

Custom Elements(包括Shadow
DOM)一直不被主流的开发者接受,不过看似2017这一点将会发生些许变化。变化的关键因素在于浏览器支持比例的改善。个人还是蛮期待Custom
Elements的,可以关注SmashingMag或者Google’s关于Custom Elements的解释。

WebRTC

很难相信WebRTC已经五岁了,Facebook、Slack、Snapchat以及WhatsApp都在他们的服务中集成了WebRTC。可以预见WebRTC会在2017年被更多的公司采用,蒸蒸日上。

Next.js

Next.js是个基于React、Webpack与Babel构建的,支持服务端渲染的小框架,其来源于ZEIT团队,在React社区获得了不小的关注度。

作者:佚名

来源:51CTO

时间: 2024-11-10 01:34:53

2017值得一瞥的JavaScript相关技术趋势的相关文章

2017年的数据存储热门技术趋势

2017年已经来临,IT行业人士希望从数据存储技术趋势列表中了解哪些是热门技术,哪些将会没落. 年初岁尾是人们进行总结和预测的时候.在新的一年,人们开始预测数据存储技术的趋势,相信将在新的一年会对存储世界产生巨大的影响.像往年一样,这里没有不切实际的预测,那些日益更新的存储技术被证明是实用的.因此,虽然所提供的存储技术趋势列表是存储行业提供的最好和最全的,但它只包括用户现在可以购买和部署的技术. 以下讨论哪些存储技术将在2017年将产生最深刻的影响. (1)云到云的备份 运行在云计算中的数据并不

如何更好地理解Gartner 2017年十大战略技术趋势

10月25日消息,Gartner近日发布2017年十大战略技术趋势榜单.该榜单跟2016年和2015年的并不一样,当中有更多的趋势过去几年还没有被领先的CIO进行实施.从对企业CIO的调查来看,不少都已经将那些趋势纳入公司的发展路线图.不过,CIO们都希望更好地理解那些趋势,以便判断应当再将哪些趋势性技术纳入发展计划. 福布斯近日专门精选了相关书籍.文章和播客,方便企业团队和读者通过它们更好地理解Gartner榜单中提及的概念. 1)人工智能与先进机器学习 人工智能(AI)和先进机器学习(ML)

2017技术趋势:最受欢迎的几大工具

对于IT专业人士来说,世界永远不会停滞不前:总是会有新技术要去发现,边界要去跨越,知识要去扩张,差距要去缩小. 今年年初时,JAXenter曾针对"2017你最感兴趣的技术"这一话题展开过调查(为期一个月,受访人数900+),其目的是找出2017年备受关注的语言,框架和工具.由于上周JAXenter已经公布了最流行的框架,所以本期咱们关注的重点是目前的一些顶级工具. DevOps工具:趋势 DevOps是一个复杂的概念, 它代表了一种文化.运动或实践.是一组过程.方法与系统的统称,用于

数据播报 | 福布斯发布2017年17大技术趋势:中国将成为全球最大机器人市场

每年,福布斯都会发布对未来1年的大事预测.本月早些时候,福布斯也照例与Frost & Sullivan前瞻创新团队的未来学家.分析师和顾问们,一起发布了对2017年17大技术趋势预测. 其中,福布斯预言,在2017年,中国可能开始在机器人领域发挥其潜力,令其他国家望尘莫及. 本期数据播报,美女主播维维将为我们讲述福布斯2017年又做出了哪些预测,上班路上不想低头看手机的读者请猛戳下面的音频,或者点击文末阅读原文跳转我们的喜马拉雅专栏收听节目. 大数据文摘"数据也疯狂"播报栏目每

对Gartner发布2017年十大技术趋势的分析

近日Gartner公司着重介绍了在2017年对多个组织具备战略意义的重大科技发展趋势.分析师在座无虚席的Gartner ITxpo座谈会介绍了他们的发现.这次发布的十大技术趋势报告,可以总结概括为:以智能为中心,通过数字化实现万物互联. Gartner将战略科技发展趋势定义为具有颠覆性潜力.脱离初级阶段且影响范围和用途不断扩大的战略科技发展趋势,这些趋势在未来五年内迅速增长.高度波动.预计达到临界点. "2017年十大战略科技发展趋势为Gartner智能数字网(Intelligent Dgita

Gartner最新发布:2017年十大战略技术趋势

◆ ◆ ◆ 导读 据福布斯杂志报道,在美国奥兰多举行的Gartner研讨会上,市场研究机构Gartner Research的副总裁兼资深研究员大卫·卡利(David Cearley)介绍了该机构预测的2017年十大战略技术趋势.他所谓的"战略技术",是指那些在未来5年拥有显著颠覆潜力的技术.他还指出,这些技术将成为数字和算法商业机遇背后的主要推动者,十大趋势如下: ◆ ◆ ◆ AI与高级机器学习 人工智能(AI)与高级机器学习由深度学习和神经网络等技术组成.这类技术通常使用算法来自动化

2016年值得关注的物联网五大连线技术趋势

物联网已逐渐深入现代人的生活,分析师估计2015年年底的连线装置数量将达到50亿台,比2014年成长30%.到了2020,这个数量预估将达到400亿台,远远超过地球的人口数. IoT的核心是让万物相连成为可能的连线技术.而在2015年后以及未来,有哪些值得关注的新兴连线技术趋势? 使用802.11a/ad Wi-Fi上网和串流内容 首先是透过两种新无线技术提供上网与串流功能--5GHz频段的802.11ac与60GHz频段的802.11ad. 由于消费者串流的内容愈来愈多,因此稳定的无线网路连线

2016年有哪些值得关注的新兴连线技术趋势?

物联网已逐渐深入现代人的生活,分析师估计2015年年底的连线装置数量将达到50亿台,比2014年成长30%.到了2020,这个数量预估将达到400亿台,远远超过地球的人口数. IoT的核心是让万物相连成为可能的连线技术.而在2015年后以及未来,有哪些值得关注的新兴连线技术趋势? 博通无线连线部门副总裁暨总经理Lewis Brewster 使用802.11a/ad Wi-Fi上网和串流内容 首先是透过两种新无线技术提供上网与串流功能--5GHz频段的802.11ac与60GHz频段的802.11

2017年5个网络行业快速发展技术趋势

在每个新年伊始,来自不同公司的专家和预测者都会开始预测在未来12个月内可能影响技术行业的趋势.对于2017年,下面是可能对IT专业人员带来影响的主要技术和趋势: 2017年5个网络行业快速发展技术趋势 ▲Image: harrivicknarajah0/Pixabay 1.人工智能 人工智能(AI)在2016年开始崭露头角,该技术在2017年可能会快速发展.企业正在试图利用AI技术来帮助他们了解其大数据(特别是物联网数据)以及帮助他们为客户提供更好的服务.在2017年,Forrester公司预测