第66期:前端的本质是什么

2024-06-30

前端的发展可以粗略的划分为 jQuery 时代和现代前端框架时代。jQuery 时代前端主要是配合 JSP、PHP 等做一些内容展现,比如文章新闻、报表数据等;现代前端框架时代,以 React、Vue 等框架为代表,推动了前端的工程化和前后端分离,同时前端页面的交互性也更强,实现了从页面到应用的转变。

现代前端框架与 jQuery 最大区别是更新页面的方式。以一个表格页面为例,当数据发生变化时,比如翻页或刷新等,使用 jQuery 需要开发者自行去更新页面上的 DOM 节点,而现代前端框架则只需要关注数据本身即可,数据到页面的更新则是由框架自动完成。除了业务数据,也有一些页面状态相关的数据需要处理,比如弹窗的打开关闭状态、输入框的聚焦状态等。

由此可见,无论是 jQuery 时代和现代前端框架时代,前端本质上都是在做数据的管理和呈现,这些数据包含业务数据和页面状态数据等。在 jQuery 时代有点刀耕火种的感觉,任何一项数据的变化都需要开发者自行操作 DOM 去处理,而且数据的管理也比较分散,不太好维护;而现代前端框架时代,数据的管理有各种各样的状态管理库,而数据的呈现则由框架来接管,开发者无需直接操作 DOM,大大提升了工程化能力和代码的可维护性。

而现在随着 React 19 服务端组件的发布和各种 SSR 框架的发展,前端对数据的管理也越来越复杂了,开发者需要考虑某个数据是应该放在客户端还是服务端、要考虑客户端与服务端的数据同步问题、要考虑数据怎么传输,也因此衍生出更多的数据,比如数据请求是否完成的状态等,想想就头大。


技术

Turborepo 2.0

Turborepo 是 Vercel 开源的、用于 JavaScript 和 TypeScript 的高性能代码构建工具,主要针对 monorepo 项目设计。最近发布的 2.0 版本带来了全新的终端 UI,可以进行交互式的任务,日志展示更清晰,另外新增了 Watch Mode 用于监控代码变更后执行某些任务,同时开源协议也变更为 MIT 协议。

从 jQuery 切换到原生 JavaScript 的速查表

现在都在用 React 或 Vue 之类的框架,都很少直接操作 DOM 了,更是很少用到 jQuery 了,但不可否认 jQuery 是个很优秀的库,目前原生 JS 也吸收了其部分设计,可以通过这篇文章对比一下 iQuery 与原生的 API,顺便学习一些原生 DOM 操作的 API。

A virtual DOM in 200 lines of JavaScript

目前大多数的前端框架都是基于虚拟 DOM 实现的,比如 React、Vue 等,本文通过 200 行代码来实现一个虚拟 DOM,可以用于学习和理解这些框架的底层原理。

开源

Mako

Mako 是蚂蚁集团开源的 Web 打包工具,功能类似于 Vite 或 Rspack 等,使用 Rust 编写,其主要卖点是高性能。它与现有社区生态不太兼容,比如不能使用 webpack 或 Rollup 的插件等,从功能设计上来看属于极端的实用主义,堆砌了大量的常用功能,但看上去并没有系统化的设计,比如有些功能通过插件去实现更好,但它确实是内置的,总的来说不看好其前景,更像是一个 KPI 项目。

frp

frp 是一个用于内网穿透的高性能的反向代理应用,使用 Go 编写,支持 TCP、UDP、HTTP 等多种协议,它可以将内网的服务通过某个具有公网 IP 服务器中转到公网。

Valtio

Valtio 是一个用于 React 或原生 JavaScript 的状态管理库,其底层基于 Proxy 实现,用法也比较简单直接,文档也比较全面细致。

设计

Hong

这是一位 18 岁的全栈开发者的个人网站,之所以放到设计这个分类下,是因为这个网站设计的很好看,并且动效做的也不错,可以用做参考。