本文所述为个人感悟和观点,实际情况可能与所述内容略有不同。本文并不代表任何组织或团体的观点和立场。读者应该在理解本文内容的同时,结合自身的背景和实际情况进行思考和判断。
Foreword
五月初,Gartner 发布的文章 Gartner Identifies the Top 10 Data and Analytics Trends for 2023 列出了 2023 年十大数据和相关分析趋势,文中反复提到了 AI,不管是新兴的 AI(ChatGPT)服务或是 AI 的风险管控都是未来的趋势以及下一波浪潮如何使其变得普及和更加具有价值。了解数据管理和人工智能等未来科技趋势,虽然与我的工作无直接关联,但我希望通过这些趋势来分析我的工作内容,以避免在行业中迷失方向。例如,对于人机交互,前端如何优化应用交互,做好连接用户与数字世界的桥梁。
并且,我想到了他之前发布的一篇文章 Gartner Top 10 Strategic Technology Trends for 2023。虽然现在 2023 已经过半,但是现在来看这篇文章,正好可以印证我们所处的互联网环境。和过去几年有所区别,之前大多都是强调 IOT、数字孪生等相关内容,现在趋势看来更加的趋向于未来的产品,例如:元宇宙、AIGC、超级应用、数字免疫系统等,这些听起来似乎还有一定的距离。那么这些科技趋势与前端又有何联系呢?之后前端的哪些技术值得我花大量时间去投入呢?
Development of Front-End
就我而言,只有一年的前端开发经验,尽管我没有亲身经历过前端的不同阶段开发,但我仍然能够感受到前端技术的演变。从静态页面时代只能用 HTML、CSS 展示一些简单的页面到动态页面时代支持 JavaScript、Ajax 和 Flash 等,可以实现更多的交互与动态的功能;再到后来移动互联网的兴起,催生出了响应式设计和移动端开发。当时主要使用的技术有 HTML5、CSS3、jQuery Mobile 和 Bootstrap 等;再到现在随着随着 Web 技术的不断发展和浏览器性能的提高,Web 应用开始逐步替代传统的桌面应用程序。这就催生出了 SPA(Single Page Application)和前端框架等技术,例如:React、Vue 等,当然也是目前我们所处于的阶段。
前端技术的发展离不开一个团队的维护,TC39,他们由代表不同组织和公司的技术专家组成,包括 Mozilla、Google、Microsoft、Apple 等公司。TC39 负责管理 ECMAScript 标准(即 JavaScript 的官方规范),并定期更新和发布新的标准版本,以确保 JavaScript 语言的稳定性、安全性和可靠性。TC39 的标准对于推动 Web 应用程序的发展和提高开发效率具有重要意义。
可以说在前端社区人员的积极推动下,技术、语法、工具、框架等方面的发展已经变得非常蓬勃,同时相关生态也得到了进一步的完善和提升。随着前后端分离技术的发展,开发模式也发生了巨大的变化,像是BFF(Backend For Frontend),给技术人员带来了便利。并且技术的提高,网络已经成为人们获取信息和娱乐的重要渠道,我们所能接触到的信息载体也在不断变化。从最初的单一文本到图片,再到现在的视频和媒体直播,内容变得丰富多彩。同时,终端技术的不断升级,交互方式也发生了巨大的变化。从早期只能通过键鼠向电脑发出指令,到现在我们可以通过触屏、语音、摄像头等更加自然的方式与终端进行交互,极大地提高了用户的使用体验。这种技术革新也带来了更多的可能性,更加方便、快捷地获取信息、娱乐和服务,同时拓宽了前端的方向,例如:跨端、智能化、交互、中后台、可视化等(下文我将针对不同的方向展开谈谈我的理解),这些不同方向的内容让前端开发人员不再是单一的页面仔、切图仔,而是需要具备更强业务能力的开发人员。现在的前端开发范围已经远远超出了以往,包括网络、性能优化、安全等多个方面,这也让前端更加向后端开发靠拢,实现了我们俗称的“全栈开发(Full Stack)”。
AIGC And Web3.0
最近在 YouTube 上看到一段视频,关于AIGC 大时代。今年一月底,腾讯研究院也发布了AIGC 发展趋势报告:迎接人工智能的下一个时代一文,文中提到AIGC 绝非昙花一现,其底层技术和产业生态已经形成了新的格局。可见 AIGC 必将成为日后的热点话题。
回顾过往,早期大多内容都是 PGC(Professionally-Generated Content),例如电影。在这个模式下,由于要求高质量的内容创作,需要投入大量的技术成本和人力资源,使得内容生产和变现的权利更多地掌握在少数人手中,导致集中程度更高和垄断效应更强,并且会受限于创作者能力。后面短视频的爆发,让 UGC(User-Generated Content) 变得愈发的流行,有创作能力的人,可以通过自己或者组建团队拍摄出视频上传到网络平台进行变现。不仅仅是短视频,文章,图片等任何自己所创作的内容都可以通过不同平台进行变现。网络降低了生产门槛,提升了创作产能,当然缺点也很显著,生产规模得到了大幅提升,但由于平台对创作者的内容主题未设限,其质量参差不齐不可避免地遭到反噬。
对于日益爆炸的网络信息,AIGC 的入局具有极高的价值,既能满足内容质量也能保证内容的产出速度。文本相关生成的 AI 已经现阶段获得了许多人的认可,以 GPT3.5 为例,可以进行聊天、代码编写、识别翻译和文章报告的撰写工作,其也早已成为我目前开发过程中的利器。除此之外,Github Copilot 的出现让我在编码中已经好像离不开它了,智能联想推测出我的思路代替了许多固有的插件。
AIGC 不仅仅只有这些,在腾讯发布的那篇文章中提到在产业互联网领域,基于 AIGC 技术的合成数据(synthetic data)迎来重大发展,合成数据将牵引人工智能的未来。Gartner 也预测称到 2030 年合成数据将彻底取代真实数据,成为训练 AI 的主要数据来源。由于 AI 训练需要大量图片的训练集,在过去采集时,通过人工拍摄、标注、喂入模型。存在一些高危场景采集麻烦和标注不准的情况,训练效率因此会变低,AIGC 则可以自己生成训练图像进行训练,一直循环避免这些问题。
前面所提到的这么多关于 AIGC 的内容看似好像和前端没有任何的关系,但是实际上其发展牵动了整个行业,所有技术也会得到进一步提升。AIGC 将在 Web3.0 大放异彩,Web3.0 的出现引出了元宇宙等概念的出现,甚至 Meta 召开过关于其的发布会,它们关系密切不可分。
元宇宙是一种虚拟的、基于区块链技术的数字世界,它是一种类似于虚拟现实的互动式体验,可以让用户在其中创造、交互、交易和学习等。而 Web3.0 则是一种新型的互联网技术体系,它的目标是通过区块链技术来实现去中心化的 Web 应用程序,使用户可以更加安全、去中心化地访问和使用互联网。
在这个虚拟的数字世界中,需要大量的内容,例如:NPC、场景等。如果单靠社区维护,内容死板、质量参差不齐且难以维护,此时 AIGC 的出现便有效的解决这些问题。如果元宇宙与 Web3.0 可行并且 AIGC 的能力越来越强,那么 AIGC 会在 Web3.0 会至关重要,前端技术所在这种新的交互方式中也不可分割以及在区块链相关的上层应用,前端技术会有重要的运用场景。例如:DApp、智能合约等。
Web3.0 技术正在催生着一个全新的数字经济生态系统,涉及的行业和领域非常广泛例如:金融、社交媒体、游戏、版权保护、物联网 、健康医疗、学习教育等。
Trends
谈了前端之后可能会发展的方向与方式后,那么对于整个前端领域,我们又应该去做哪些努力呢?
工程化
上文提到了前端散发出来的行业方向有许多,例如:跨端、智能化、交互、中后台、可视化等。这些我觉得这些前端方向是在工程化的基础上进行的,工程化是一个“泛概念”,涉及到的内容可以延伸出许多,打包、包管理、工程管理等。Tooling.Report 网站上数据显示,Webpack 的地位仍然不可动摇,其生态繁荣,综合能力强,仍然是大多数项目的首选打包工具。Vite、Rollup 等其他构建方案在行业中也有一席之地,但是如果想要替代 Webpack 在工程化中的地位,目前还是很难的。
而对于工程管理,目前我所在的公司还在使用传统的 Multirepo ,但 Monorepo 在前端社区里已经广泛使用(两者区别可以参考这篇文章:Mono vs Multi Repos - Pick Your Poison)。其中,lerna、pnpm、nx 等都是比较常见的 Monorepo 管理工具,它们可以帮助开发者更好地管理 Monorepo 中的多个项目和组件。同时,Turbopack 推出的 Turborepo 则是一种针对 Monorepo 整个仓库管理的大闭环解决思路,它能够帮助开发人员更好地管理整个 Monorepo 代码库,包括版本控制、构建、测试、发布等方面。
跨端
对于跨端,我没有接触太多,整个跨端领域专注于Write Once, Run EveryWhere的理念,但确实很难做到。无论是使用什么技术,都可以使用 WebComponent(一种 Web 标准,可以将 UI 组件封装为独立的组件)思想进行跨端开发,然后在不同的客户端上使用这些组件。
Electron 应该也是目前进行跨端的首选,但是由于需要同时运行 Node.js 和 Chromium,将会导致内存开销过大并且 UI 渲染使用的是 Chromium 的渲染引擎,会导致一些卡顿和延迟的性能问题;最致命的可能是安全问题,Electron 可以直接访问本地文件系统和系统资源,如果开发者不谨慎编写代码,可能会引发安全问题。
Tauri 作为 Electron 的竞品,其本身是它基于 Rust 语言和 Web 技术栈进行构建的,Tauri 相比于 Electron 有更小的应用程序体积、更高的性能、更好的安全性、更好的可扩展性和更好的平台支持。因此,对于需要开发桌面应用程序的项目,如果需要更高的性能和更好的安全性,可以考虑使用 Tauri。
智能化
对于智能化方向是借助一些 AI 的能力,来改善开发流程,接触最多的可能是低代码平台的开发,国内主流的项目是阿里开源的alibaba/lowcode-engine,LowCodeEngine 提供了一个可视化的开发环境,使开发人员不需要编写大量的代码,通过拖拽和配置组件等方式,快速构建应用程序,从而提高开发效率和减少开发成本。
就我而言,我一直挺反感低代码平台的,主要因为“自由度”受限。使用低代码工具,开发人员必须按照平台提供的规则和组件进行开发。这种东西因人而异,有些平台为了方便制作大量页面,采用低代码开发,例如马上要提到的可视化大屏,这种可以使用低代码方案。
可视化
数据可视化占主导位置,衍生出可视化交互、可视化设计、可视化编辑器、可视化 Debug 等。一方面是帮助用户更好呈现具体的内容,另一方面可视化调试能帮助开发人员快速定位和解决问题。三维可视化的 ThreeJs,图表可视化的 Echarts,地图可视化的 Mapbox 都是这类的代表,目前我更偏向于去研究地图可视化。
地图可视化是一种将地理信息数据(常用的是 GeoJSON)在前端页面中以可视化的方式呈现出来的技术。通过前端地图可视化技术,例如 deck.gl、kepler.gl 等,可以将各种地理数据以图形、标记、热力图等形式展示在地图上,方便用户对地理信息进行查询、分析和展示。
End
除了上面那些方面,最近有一个框架是令我印象很深的,Astro.js,我在多篇博客中反复提及这个框架,其采用 islands 新的 Web 架构模式(Astro Islands),一个页面上可以有多个岛屿,并且每个岛屿都被独立呈现。在 Astro 中,你可以使用任何被支持的 UI 框架(比如 React, Svelte, Vue)来在浏览器中呈现群岛。
最后,想再强调下,由于刚入行一年时间,自己对于行业发展的理解还不够深刻,这些内容会比较片面。因此,文章只是阐述我目前的认知水平,希望能够多角度地看待这个问题。未来任何行业的发展趋势都是无法预测的,只能通过关注行业的新闻、技术架构发展等方面,不断学习、不断进步,跟上步伐,避免被淘汰。而这也正是在这个快速变化的时代中所需要具备的能力和素养。