JavaScript 生态圈和技术趋势,这一年发生了这些变化 ...

开发
JS 生态圈最权威的调查报告 state-of-js 终于是出来了 。

今天,我来带大家看看 2021  state-of-js 的调查结果:

速览

下面是我挑出来的几个比较重点的,我们先来速览一下:

  • 可选链操作符使用率已经高达 85% 
  • 空值合并操作符( ?? )使用率提升了 21% 
  • 将近 50% 的受访者在使用 Shadow DOM API 
  • esbuild 是满意度调查中同比增长最大的工具。
  • Vite 97%26%
  • 当前有 5.6% 的受访者正在使用 Deno 
  • 一些老牌 JS 库 Axios、Lodash  Moment 仍然是最受欢迎的。
  • TypeScript JavaScript Elm

JS特性 - 语言

Proxy

Proxy 在各种框架和库中使用的越来越多了(特别是 Vue.js 3.0 开始使用后),所以了解到它的同学也越来越多,但是实际使用率没有太大变化。

Promise.allSettled()

Promise.allSettled() 我还没用过,用法类似于 Promise.all ,区别是:它所有给定的 promise 不管是 fulfilled 还是 rejected 状态,只要全部返回后它就会返回。在你不关心所有的异步任务是不是都必须成功的时候可能会用到它。

Dynamic Import

动态导入:只有 15% 的人还不知道它,接近 50% 的小伙伴都用过了,一般会在懒加载的时候用到。

Nullish Coalescing

空值合并运算符:这玩意这么多人都在用吗?用过的小伙伴可以在评论区说一下,我平时用的比较多的还是 || 或者 && 

空值合并操作符( ?? ),会在左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。

 || 的区别是, || 会在左侧是 0 的时候也返回右侧,而 ?? 会返回 0 

const baz = 0 ?? 42;
console.log(baz); // 0

const conard = 0 || 42;
console.log(conard); // 42

Optional Chaining

可选链:使用率已经高达 85% ,非常实用的特性,不多说了。

Private Fields

私有属性:只有 20% 的人用过,我们在类里面定义的属性或方法默认情况下都是公有的,可以通过在前面加个 # 来变成私有的(仅在类内部可以访问)。

class ClassWithPrivateField {
#privateField;
}

class ClassWithPrivateMethod {
#privateMethod() {
return 'hello ConardLi';
}
}

BigInt

BigInt 可以解决 Number 的精度丢失问题,一般大于 2^53 的数我们建议用 BigInt 来表示,不过现在使用率还很低,大家通常还是用一些库去处理数字。

String.prototype.replaceAll()

replaceAll :可以让我们按照一个正则进行更灵活的字符串替换,第一年参加调查, Chrome85 才开始支持的函数,已经有这么多人用过了,真的是一个非常实用的函数:

const regex = /ConardLi/ig;
console.log(p.replaceAll(regex, '棒!'));

JS特性 - 浏览器 API

Service Workers

Service Worker :一个服务器与浏览器之间的中间人角色,它可以拦截当前网站所有的请求,我们可以在这中间做很多灵活的判断和处理,只有 8% 的人不知道它了,使用率已经高达 45% 

Intl

Intl 浏览器给我们提供的一个原生的用来做国际化的 API ,国际化的需求一般比较复杂,反正我们国际化都是用库,省心很多,这个还没用过。

Web Audio API

控制 Web 音频的 API ,只有特定领域的开发者才会用到,变化也不大。

WebGL

Web 图形化的需求越来越复杂多样, WebGL 的普及也不可避免。现在大多数人都有过了解,但是使用者还局限在特定领域,今年的增长率已经有了小的变化,相信未来会迎来一个爆发增长~

Web Animations API

dom 上的 animate 函数,就属于 Web Animations API 中的一个,我们日常使用 CSS 实现的一些动画,都可以借助它转换成 JS 实现:

document.getElementById("CoonardLi").animate(
[
{ transform: 'rotate(0) translate3D(-50%, -50%, 0)', color: '#000' },
{ color: '#431236', offset: 0.3 },
], {
duration: 3000,
iterations: Infinity
}
);

这个应该大家都有了解过吧,一般 XXX 网页动画实战 这样的课程和文章都会提到,但是实际开发中实现动画还是用 CSS 或者一些 JS 库比较多一点。

WebRTC

WebRTC ( Web Real-Time Communications ) 是一项实时通讯技术,可以在网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点的连接,实现视频流和(或)音频流或者其他任意数据的传输。

同样,也是特定领域(如直播)会用到的 API ,使用者很局限。

Web Speech API

用于处于 Web 音频的 API ,也是特定需求场景才会用到的 API,使用率很低,变化也不大。

Websocket

这个调查里使用率最高的 Web API 了,不用多说,只有 4% 不知道它是啥东西了 ...

Shadow DOM

Shadow DOM  Web Components 里面的一个重要 API:浏览器将模板、样式表、属性、 JavaScript 码等,封装成一个独立的 DOM 元素。外部的设置无法影响到其内部,而内部的设置也不会影响到外部,与浏览器处理原生网页元素(比如 <video> 元素)的方式很像。

Shadow DOM 最大的好处有两个,一是可以向用户隐藏细节,直接提供组件,二是可以封装内部样式表,不会影响到外部。

// attachShadow() creates a shadow root.
let shadow = div.attachShadow({ mode: 'open' });
let inner = document.createElement('b');
inner.appendChild(document.createTextNode('Conard Li Hiding in the shadows'));

// shadow root supports the normal appendChild method.
shadow.appendChild(inner);
div.querySelector('b'); // empty

这个使用率已经这么高了吗?大家在开发里有用到过吗?

Page Visibility API

页面可见性 API,可以帮助我们检测当前用户是不是还在当前页面,当网页被最小化或者切换到其他 tab 的时候,会触发一个 visibilitychange 事件,我们就可以在这个时候去停掉一些耗时的操作来节省资源。

document.addEventListener(visibilityChange, handleVisibilityChange, false);

function handleVisibilityChange() {
if (document.hidden) {
// 页面隐藏了
} else {
// 页面又活跃了
}
}

一个挺好用的 API ,兼容性也不错,大家可以用起来~

JS特性 - 其他技术

PWA

PWA 使用率今年涨幅挺大的,也是属于一个比较成熟的技术了。

WebAssembly

WebAssembly  88% 的人都有了解过,但是使用率只有 15% ,相比去年只增加了 5% ,它给 Web 开发带来了更多的可能性,相信未来会得到爆发式增长。

JS 库

满意度

这张图挺有意思的,按照 S、A、B、C 四个等级的满意度,对比了前端框架、服务端框架、测试库、构建工具、移动和桌面端技术、Monorepo 工具,下面我们来逐个部分看一下。

时间变化

紫色代表人气下降,蓝色代表人气上升,向上代表用的人越来越多,向右代表有更多的人想学习它。

怎么看起来大家今年都不太想学东西了呢?哈哈,另外对一些新型的库比如 Sevelte 学习欲望还是有增长的。

前端框架

使用率

使用率今年整体都没有太大变化, React 依然以 80% 的使用率 高居榜首,因为调查的老外比较多,所以 Angular  Vue.js 使用率还要高,不过前者已经是下降趋势了。另外 Svelte 的使用率在今年有了 5% 的增长。

满意率

Solid.js 是一匹黑马,今年以 90% 的满意率高居榜首,不过它的使用率只有 3% ,满意度自然也就高一点。

React 的满意度已经连续三年下降,来到了第三位,不过在使用率这么高的情况下仍然有 84% 的满意度,依然坚挺!

Ember.js 应该是崩了,使用率和满意率都连续下降... 没救了。

后端框架

使用率

几乎没变化 ... Express 依然占据霸主地位,今年新出来的框架不少,像 Remix 仅有 5% 的使用率。

不过,有点震惊, Koa 去哪了?难倒只有中国人用吗???

满意率

新出来的框架更能满足大家的痛点,所以满意度普遍较高, SvelteKit  96% 的满意度高居榜首。

测试框架

Jest 仍然是最常用的测试框架, Testing Library 的使用率增长不多,但是满意度高达 96% 

移动端和客户端

使用率

今年 Elctron 来到了使用率的第一位,不过仍然只有 36% 的人用过它,RN 是第二位,二者应该就分别是桌面端和移动端最常用的技术了。

满意率

值得注意的是,今年新出的 Tauri 占据了榜首,不过它只有 3% 的使用率。

Tauri 是一个 Electron 的替代技术,主要用来解决 Electron 包体积和内存消耗过大的问题。

构建工具

使用率

webpack 仍然是使用率最高的框架, tsc 依托于 TypeScript 的大火来到了第二位,并且还有 17% 的增长。另外表现最为亮眼的还是 Vite ,第一年推出就有了 30% 的使用率。

满意率

满意度上今年出现了非常大的分歧, Snowpack 的满意度下降了 24% ,相比 swc 的满意度提升了 14% 。而 Vite 以恐怖的 98% 的满意度来到第一位!。 Gulp 应该是没救了,使用率和满意度都在持续降低。

Monorepo 工具

使用率

满意度

Monorepo 今年第一次参加调查,表示这种开发方式越来越普及了。但是使用率最高的 Lerna 依然只有 25% 、被吹上天的 pnpm 也只有 13% 的使用率。

其他

工具库

jQuery 已经跌到 11% 了吗? Axios 为啥使用率还这么高,大家不用 Fetch 吗?

JS 运行时

Node.js  Browser 还高? Deno 拥有了 5.6 的使用率 ...

可以编译成 JS 的语言

TypeScript 占据绝对霸主地位。

评估指标

在评估是否使用一个库时,考虑最多的因素是什么?

文档 > 开发体验 > 用户体验 > 用户规模 > 社区 > 开发者和团队

对 JS 的看法

JS 生态是不是变化的太快了

口口声声的喊,学不动了的人都去哪了?为什么同意这个观点的人越来越少了呢?

JS 的主要痛点

依赖管理 > 代码架构 > 状态管理 > 调试 > 日期管理 > 编写模块 > 查找包 > 异步

颁奖

  • 空值合并运算符 ( ?? ) 使用率增长了 21% 
  • esbuild 只有两岁,使用率提升了 20% 
  • Vite 成为最受关注和满意度最高的技术。

调查范围


最后还得吐槽一下,和 state-of-css 一样, state-of-js 的中国参与者仍然很少 ...

责任编辑:张燕妮 来源: code秘密花园
相关推荐

2018-12-24 09:47:06

2022-12-08 00:09:20

CSS生态圈技术趋势

2023-01-11 08:06:42

2016-01-05 11:56:34

2023-04-04 13:31:18

2016-11-01 14:30:09

大数据大数据技术

2016-07-14 15:57:06

华为

2016-01-07 13:19:21

大数据分析生态圈

2021-03-23 11:00:41

网络安全网络攻击网络钓鱼

2011-06-29 15:48:29

Java

2012-06-15 10:03:57

2023-12-05 08:31:47

2015-04-09 11:25:06

云智慧APICloud应用性能管理

2019-11-28 08:23:14

容器Kubernetes编排

2018-07-16 14:36:24

编程学习代码

2013-01-04 10:58:21

JavaScriptWebJS

2015-10-08 09:33:48

2015-03-04 11:19:59

2021-01-14 11:39:05

云计算

2020-12-31 14:34:16

比特币数据以太坊
点赞
收藏

51CTO技术栈公众号