Frontend 2020

从个人角度总结一下前端领域2020年的发展吧~~

一、框架

由于个人工作原因,今年个人的主要使用框架从Vue切到了React,不过平时做一些小项目的时候还是会首先考虑Vue。

逐渐感受到Vue(2.x)在组织大型项目的时候,有些力不从心,首先,TypeScript无法引入,或者说即使引入体验也很差。此外,JSX实在是太香了,将JavaScript嵌入DOM表达中简直是天才的设想,比在我看来要比Vue原先那套Template语法要好写得多。(当然,Template可以提供更好的性能预优化)

不过2020年最重要的前端事件之一就是Vue 3.x的发布了,由于时间问题,我还没有使用过Vue3.x开发过任何项目,也就不展开讲了。不过Vue3.x的Vue Composition API看上去就是吸取了React Hooks的优点,应该很有发展潜力。

说到React Hooks,我只能说真香。一开始我认为React Hooks引入了新的心智模型,而且他的用法是反直觉了,需要一定的学习成本。但是最近我想法变了:难道Class Component那一套东西就不需要学习成本吗,一堆生命周期用法对新手来说同样是新的概念。同样是新概念,React Hooks尽管上手并不那么直观,但上手后深入却更容易,对组件细粒度的控制更方便,确实很香。

和框架息息相关的就是状态管理,今年由于工作原因开始使用Mobx,总的来说体验还可以,比Redux的一大堆Template Code要好得多,但高度封装也可能导致一些开发意外,不过熟悉之后都还好说,开启严格模式也能避开不少坑。近年来状态管理库层出不穷,但是实际上并没有出现称得上是突破性的新范式,mobx-state-tree我认为是对mobx的一次成功封装,让mobx能够更好地服务于大型项目(尤其是巨型SPA)。

一些状态管理库的尝试很有意思,但是目前还看不到实用的可能性。比如hox,通过额外挂载一个组件保存状态,缺点是状态只能是全局的,而且没法做SSR(这基本就断了上生产的可能性)。

业界,淘宝今年双十一宣传落地了预渲染技术,其实不是什么新奇玩意,不过收益还是很高的,有望就此流行。不过预渲染需要App配合,有一定技术门槛,小厂不一定玩得转。

React在年底提出Server Component的概念,非常有意思,跟群友讨论后觉得比较像Blazor Websocket,不过鉴于服务端/客户端基于现有生态且语言统一,应该大有可为,期待可用的Demo。

二、浏览器

2020年Chrome增加了Web USB API、Web NFC API、File System Access API、Web HID API,这些API极大扩展了Web的边界,让许多之前无法设想的事情在Web上成为可能,这很让人激动,这也是一片蓝海,等待开发者发掘。

Optional Chaining、String.prototype.replaceAll等特性得到了浏览器支持,虽然目前不用Babel是不可能上生产的,但是至少也是很好的发展方向。

Fetch的流式上传开始在Chrome实验,Fetch API无法取得上传进度的痛点终于有望解决。

移动端上,iOS14终于开始支持WebP图片格式,虽然在动图支持上有一些问题但也是可喜可贺。说到图片格式,AVIF的Chrome支持也在2020年落地了,其超高的压缩比让人心动,可惜目前来说浏览器支持还是太差。

三、CSS

CSS的发展在近年加速。

content-visibility属性开始被浏览器支持,这个属性可以指定浏览器优先渲染指定区域,Web性能优化从未这么简单(x

https://juejin.cn/post/6886258269137043464

这篇文章比较全面地介绍了CSS的下一代特性,可以参考。

对于CSS的发展,这里要特别提一下一个期待,希望leading-trim属性能够尽快落地,解决文字垂直居中的终极问题。

四、工程化

Webpack5于2020年发布,该大版本没有重大变更,因此也没有什么讨论的热度。

但横空出世的vite绝对是关注的重点之一,借助Native ES Module的特性分割项目让编译速度获得了成倍的提升。esbuild换用Golang获得的性能提升不是一倍两倍,更是令人激动(大型项目的开发体验终于有质的提升。今年一定要抽时间玩一下。

五、其他

2020年玩了很多Electron,目前来说体验还是很好的,虽然坑也不少,但已经足以承载复杂的现代应用了。

近两年非常火的Serverless在前端领域落地的所谓JAMStack(JavaScript、APIs、Markup)式架构开始逐渐流行。

JAMStack站点比较适合内容类网站,比如说个人博客/企业官网等以内容为中心的网站,利用服务端渲染和静态构建这两种主要方法把内容直接交付给用户。网站如果需要与后端交互,则通常将后端部署在Serverless平台,以函数为部署单位进行开发。而Markup则主要是指内容的存储。

不知道为什么这种架构在日本非常流行,Qiita上可以看到许多相关文章。但是在实际日本业界用Serverless的(一般是Google Cloud Functions或者AWS Lambda)新网站很多,但是大部分体验都是一堆垃圾,以后有时间专门写一篇文章批判。

JAMStack架构很有代表性的框架Next.js倒是很有意思,学习成本也不高,很有兴趣在近期玩一下。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注