为了深入剖析2019年 JavaScript 的发展状况,我们从以下几个方面针对 JavaScript 开展了问卷调查:
语言特征
能够编译成JavaScript的语言
前端框架
数据层
后台框架
测试
跨移动与桌面开发的工具
其他工具
开发人员整体的看法
共计21,717名开发人员参与了此次问卷调查。这些开发人员来自不同的国度,薪资、开发经验、所在公司规模、性别、职位等各个方面的差异性也很大:
在这里小编建了一个前端学习交流扣扣群:132667127,我自己整理的最新的前端资料和高级开发教程,如果有想需要的,可以加群一起学习交流
国家:美国、加拿大、俄罗斯、法国、德国、巴西、澳大利亚等
薪资:0-20万美元+
开发经验:0-20年+
公司规模:1-1000人+
职位:全栈开发、前端开发、Web开发、后台开发等
概述
在深入分析之前,让我们先来看一看2019年 JavaScript 生态系统的全面概述!
2016-2019年间各项技术和框架的发展曲线
上图中每条线代表一种语言或框架在2016-2019年间的发展曲线。纵向越高代表使用这项技术的人越多,而横向越靠右代表想学习这项技术的人越多。
满意度与使用情况
上图显示了每种技术的用户满意度。大致可分为以下四个象限:
评估:低使用率,高满意度。代表值得关注的技术。
采用:高使用率,高满意度。代表可安全采用的技术。
回避:低使用率,低满意度。代表目前应避免的技术。
分析:高使用率,低满意度。 如果你正在使用该技术,请重新评估。
语言特征
JavaScript 作为一种编程语言,最值得令人欣慰的事情就是它一直在不断的发展中。从箭头函数到解构,在过去的几年中 JavaScript 增添了许多关键功能,且已成为我们编写代码时不可或缺的一部分。
下面我们将从语法、语言、数据结构、浏览器API以及其他方面深入分析 JavaScript 编程。
使用情况概述
上图显示了 JavaScript 各个类别的功能的使用情况。
外圈代表了解该功能的用户总数,内圈则代表实际使用过该功能的用户。
语法
1. 解构(destructuring)
一种 Javascript 表达式, 可以将属性/值从对象/数组中取出,赋值给其他变量。
85.1%的用户曾使用过,8.4%的用户有所了解但未曾使用,6.5%的用户未曾听说过。
2. 展开语法(spread syntax)
可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;还可以在构造字面量对象时, 将对象表达式按key-value的方式展开。
89.5%的用户曾使用过,7.5%的用户有所了解但未曾使用,3%的用户未曾听说过。
3. 箭头函数(Arrow Function)
箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或new.target。这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。
97%的用户曾使用过,2.2%的用户有所了解但未曾使用,0.8%的用户未曾听说过。
语言
1. Proxy 对象
Proxy 对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。
17.3%的用户曾使用过,39.7%的用户有所了解但未曾使用,43%的用户未曾听说过。
2. Async/Await
async function 用来定义一个返回 AsyncFunction 对象的异步函数。
88.4%的用户曾使用过,10.7%的用户有所了解但未曾使用,0.9%的用户未曾听说过。
3. Promise
Promise 对象用于表示一个异步操作的最终完成 (或失败),及其结果值。
93.8%的用户曾使用过,5.2%的用户有所了解但未曾使用,1%的用户未曾听说过。
4. 装饰器(Decorator)
简单来说,装饰器是将一段代码与另一段代码包装在一起的一种方式。
37.9%的用户曾使用过,37.4%的用户有所了解但未曾使用,24.7%的用户未曾听说过。
数据结构
1. Map
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
70.6%的用户曾使用过,23.5%的用户有所了解但未曾使用,5.9%的用户未曾听说过。
2. Set
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
56.5%的用户曾使用过,30.6%的用户有所了解但未曾使用,12.9%的用户未曾听说过。
3. TypedArray
JavaScript TypedArray 是一种类似于数组的对象,其提供了在内存缓冲区中读写二进制数据的机制。
28.1%的用户曾使用过,35.4%的用户有所了解但未曾使用,36.5%的用户未曾听说过。
4. Array.prototype.flat()
flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中元素合并为一个新数组返回。
26.8%的用户曾使用过,40.8%的用户有所了解但未曾使用,32.5%的用户未曾听说过。
浏览器API
1. Fetch
Fetch API 提供了一个获取资源的接口(包括跨域请求)。任何使用过 XMLHttpRequest 的人都能轻松上手,而且新的 API 提供了更强大和灵活的功能集。
81.5%的用户曾使用过,11.3%的用户有所了解但未曾使用,7.1%的用户未曾听说过。
2. 国际化(i18n)
Intl 对象是 ECMAScript 国际化 API 的一个命名空间,它提供了精确的字符串对比、数字格式化,和日期时间格式化。Collator,NumberFormat 和 DateTimeFormat 对象的构造函数是 Intl 对象的属性。本页文档内容包括了这些属性,以及国际化使用的构造器和其他语言的方法等常见的功能。
41.6%的用户曾使用过,39.5%的用户有所了解但未曾使用,18.9%的用户未曾听说过。
3. 本地存储(local storage )
只读的localStorage 属性允许你访问一个Document 源(origin)的对象 Storage;存储的数据将保存在浏览器会话中。
88%的用户曾使用过,10.3%的用户有所了解但未曾使用,1.7%的用户未曾听说过。
4. Service Worker
Service workers 本质上充当Web应用程序与浏览器之间的代理服务器,也可以在网络可用时作为浏览器和网络间的代理。它们旨在(除其他之外)使得能够创建有效的离线体验,拦截网络请求并基于网络是否可用以及更新的资源是否驻留在服务器上来采取适当的动作。他们还允许访问推送通知和后台同步API。
36.1%的用户曾使用过,54%的用户有所了解但未曾使用,9.8%的用户未曾听说过。
5. Web 动画
Web Animations API 允许同步和定时更改网页的呈现, 即DOM元素的动画。它通过组合两个模型来实现:时序模型和动画模型。
14.2%的用户曾使用过,52%的用户有所了解但未曾使用,33.8%的用户未曾听说过。
6. Web 音频
Web Audio API 提供了在Web上控制音频的一个非常有效通用的系统,允许开发者来自选音频源,对音频添加特效,使音频可视化,添加空间效果 (如平移),等等。
20.6%的用户曾使用过,58%的用户有所了解但未曾使用,21.4%的用户未曾听说过。
7. Web 组件
作为开发者,我们都知道尽可能多的重用代码是一个好主意。这对于自定义标记结构来说通常不是那么容易 — 想想复杂的HTML(以及相关的样式和脚本),有时你不得不写代码来呈现自定义UI控件,并且如果您不小心的话,多次使用它们会让页面变得一团糟。
27.7%的用户曾使用过,61.2%的用户有所了解但未曾使用,11.1%的用户未曾听说过。
8. WebGL
WebGL (Web图形库) 是一种JavaScript API,用于在任何兼容的Web浏览器中呈现交互式3D和2D图形,而无需使用插件。
16.7%的用户曾使用过,68.6%的用户有所了解但未曾使用,14.7%的用户未曾听说过。
9. WebRTC
WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。
10.9%的用户曾使用过,46.3%的用户有所了解但未曾使用,42.9%的用户未曾听说过。
10. WebSocket
WebSockets 是一种先进的技术。它可以在用户的浏览器和服务器之间打开交互式通信会话。使用此API,您可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得响应。
59.2%的用户曾使用过,33.8%的用户有所了解但未曾使用,7.1%的用户未曾听说过。
11. Web Speech API
Web 应用可以利用 Web Speech API 处理语音数据。这个API包含两个组件:SpeechSynthesis(文字转语音)和 SpeechRecognition (异步语音识别)。
7.5%的用户曾使用过,46.8%的用户有所了解但未曾使用,45.7%的用户未曾听说过。
12. WebVR
WebVR API 能为虚拟现实设备的渲染提供支持 — 例如像Oculus Rift或者HTC Vive 这样的头戴式设备与 Web apps 的连接。
3%的用户曾使用过,48.4%的用户有所了解但未曾使用,48.6%的用户未曾听说过。
其他特征
1. 渐进式Web应用(Progressive Web App,PWA)
PWA 运用现代的 Web API 以及传统的渐进式增强策略来创建跨平台 Web 应用程序。这些应用无处不在、功能丰富,使其具有与原生应用相同的用户体验优势。
48.2%的用户曾使用过,45.5%的用户有所了解但未曾使用,6.3%的用户未曾听说过。
2. WebAssembly
WebAssembly 是一种新的编码方式,可以在现代的网络浏览器中运行 - 它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如C / C ++等语言提供一个编译目标,以便它们可以在Web上运行。它也被设计为可以与JavaScript共存,允许两者一起工作。
7.1%的用户曾使用过,75.1%的用户有所了解但未曾使用,17.8%的用户未曾听说过。
开发人员对 JavaScript 的看法
为了保证编程语言的健康发展,我们应该听从社区的呼声。我们可以从开发人员对 JavaScript 各个方面的看法中发现问题,例如 JavaScript 的发展方向是否正确、复杂度是否在加剧、使用情况、以及变化速度等。