当前位置: 首页 > news >正文

前端 UI 框架发展史

上一小节我们了解了前端 UI 框架的作用和意义,接下来我们再来了解前端 UI 框架的发展历史。

虽然是讲历史,但我不想讲得太复杂,也不打算搞什么编年史记录啥的,毕竟我们不是来学历史的。

我会简单描述一下前端 UI 框架的发展历程,同时在这个过程中,把我自己的一些感受和想法分享给你。

你可以以轻松娱乐的心态来看这篇文章,同时也大概了解一下我们前端开发是怎么发展到现在这样子的。这样可以让你更好地去理解将要学习的前端 UI 框架

前端行业到底是怎样发展的呢?对于新人的你肯定是不了解的。我说说我的理解。

我认为整个前端行业是围绕着复杂度来发展的,跟很多其他的技术发展差不多。

因此,接下来我会以复杂度这个核心来聊聊前端 UI 框架的发展历程。

无复杂度:JSP & Dreamweaver

在互联网刚开始的阶段,网站的页面是非常简单的。在现在的我们看来,几乎就是纯静态的页面,没什么动效,也不会有多少复杂的交互,最复杂的交互就是填一张表单,然后提交到服务器。

当时最大的瓶颈是带宽。当时的网速贼慢,跟现在是完全没得比的,当时正常的网速搁现在,那就是卡顿,而且是卡得要死。当时有个笑话,当你要打开某个网站,在浏览器输入网址之后,可以先去洗个澡,回来才能看到网站。

在这种情况下,网站要做的就是提供最核心、最具性价比的内容和功能,而不是漂亮、用户体验好的网站。另一方面,程序员行业也没有迎来大发展,在当时,程序员还是个新型职业,从业人数非常少。

这些原因共同造成了一个结果:就是没有前端。那网页谁来开发呢?当然是后端,在当时,没有前端,所以也不叫后端,反正就叫程序员。当时,他们实现网页的方式是使用一种模板技术,不同的语言有自己的模板语言。在当时比较流行用 Java 来做 Web 站点,因此配套的模板语言 JSP 也比较流行。

我们可以看一段 JSP 代码感受一下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>xx 教程</title>
</head>
<body>
<h1>读取所有表单参数</h1>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>参数名</th><th>参数值</th>
</tr>
<%Enumeration paramNames = request.getParameterNames();while(paramNames.hasMoreElements()) {String paramName = (String)paramNames.nextElement();out.print("<tr><td>" + paramName + "</td>\n");String paramValue = request.getParameter(paramName);out.println("<td> " + paramValue + "</td></tr>\n");}
%>
</table>
</body>
</html>

这是我从网上随便找的,不需要太在意这个网页是干什么的,就单纯感受一下 JSP 的语法。

在后端的角度来看,要展示 Web 站点,就要给浏览器返回一个 HTML 文件,而这个 HTML 文件就是一段包含 HTML 代码的字符串。所以你会看到,上面的 JSP 代码都在处理字符串拼接的事情。有经验的同学应该能想到,这不就是 SSR 么,是的,它就是 SSR,本质是一样的。

你可能会问,那个时候既然没有前端,那谁来做 UI 呢?答案是设计师。当时有种职业叫原型开发。他也算设计师的一个分支,同时也是前端岗位的前身。当时的 UI 偏向纯静态站点,没有复杂交互,因此原型开发主要使用 HTML 和 CSS。

原型开发要么自己设计,要么根据设计师给的设计稿来开发 HTML & CSS 代码,调完了之后,把 HTML 文件发给后端开发,后端开发再把这个 HTML 文件转换成 JSP 代码。这就是原型开发和后端开发之间的协作方式。

当时在原型界非常火的一个框架是 Dreamweaver,严格来讲,它其实是个工具。

在这里插入图片描述

之前的图片很难找了,我随便找了一张图片,差不多能展示 Dreamweaver 是个什么工具了。简单地说,原型师可以在 Dreamweaver 中通过拖拽配置的方式来搭建网页,最后输出 HTML & CSS 代码。因此,当时很多原型师都不需要直接写 HTML & CSS 代码,他们只需要了解 HTML & CSS 语法知识就好了,所以说原型师还是更偏向于设计师,而不是开发。实际上,当时的程序员群体也是把原型师看做设计师的。

有经验的同学一下就看出来了,这不就是低代码么,没错,Dreamweaver 本质就是个低代码工具。是不是觉得很神奇,在互联网最开始,SSR 和低代码技术就已经大行其道了,所以现在前端届流行的 SSR 和低代码都不是什么新鲜事了,只是翻炒冷饭而已。

严格意义来说,当时都还没有前端,所以也谈不上前端 UI 框架,但是我觉得既然聊历史,那就不得不聊一下这段时期的事情。我把这一阶段的前端 UI 框架定义为 JSP 模板框架 + Dreamweaver 低代码框架工具。因为当时的网站 UI 主要就是这两个技术搭建出来的。

UI 效果复杂度:前端开发攻城狮

随着互联网的发展,网速上来了,网站可以做更多东西了,设计和交互越来越有创意了,这时网站的 UI 效果复杂度就越来越高了。

这带来的最直接的后果就是后端开发顶不住了。要同时负责前端和后端,如果是简单的小站点还好说,但如果是复杂的电商网站和博客网站就难顶了。术业有专攻,要同时深入研究后端技术,还要钻研前端动效,现在的全栈工程师都顶不住,何况当时。因此,在一些大型网站公司,慢慢地就出现了专门的前端团队,当时最出名的,就是百度、淘宝、QQ 空间几个前端团队了。

在当时,前端开发主要来源于 3 类:

  • 后端程序员转前端,这种算比较少,大部分是被强迫的;
  • 原型师发展为前端,这是最多的,自然而然的事情;
  • 新人程序员,直接上岗就做前端。

慢慢地,就没有原型师这个职业了,要么回到老本行做设计,要么去做前端了,现在几乎听不到原型这个职业了。

这段时期的初期,设计师提供设计稿,原型师实现出 HTML & CSS,然后前端开发 JavaScript 代码,后端再转换成 JSP。

最后随着前端发展壮大,就逐渐地前后端分离了,原型师被淘汰。最后的流程就是现在这样,设计师提供设计稿,前端开发 HTML&CSS&JS,后端开发提供数据接口。

这一时期的前端 UI 框架是什么?我觉得是前端开发攻城狮本人。前端开发通过自己的前端技术知识和程序员知识,把设计稿实现成复杂的、可交互的 UI 界面,这不就是最厉害地前端 UI 框架吗?

浏览器兼容复杂度:jQuery/ExtJs

随着前端技术大发展,标准不断更新,功能不断叠加,各家浏览器厂商为了争夺市场,也不遗余力的支持新标准和扩展功能。最终给前端界带来了新的复杂度:浏览器兼容性复杂度

这绝对是前端届深恶痛绝的事情。我们在实现繁重地需求功能还有应对老板的奇葩需求的同时,还要处理烦人的浏览器兼容性。这是一段煎熬的日子。

要处理浏览器兼容性,需要安装不同的浏览器,对于同一个浏览器来说,还要安装不同版本。

同一个页面,要在不同的浏览器,不同的版本,把所有功能都测试一遍。

QA 给我们提了一个 bug,用户给我们反馈了一个问题,很多时候都没办法复现。

现在的我回想当初,也是无比煎熬,我认为这是极大的消耗我们前端开发的生命!因为解决浏览器兼容性问题,对我们的职业生涯来说,毫无意义。

那段黑暗的日子就不多说了,我们聊回前端 UI 框架的话题。在当时,jQuery 是当之无愧的前端 UI 框架一哥,它的意义和流行程度比现在的 React/Vue 更有过之。在前端历史中,必有 jQuery 的一席之地。

jQuery 核心就是解决浏览器兼容性,统一了前端代码的写法。使用 jQuery,能避免大部分的 JS 兼容性,极大地提升了前端开发的效率。除此之外,jQuery 还有非常多优秀的设计:

  • 它的语法糖让人爱不释手
  • deferred 语法,那个时候还没有 Promise 呢
  • 动画队列,至今仍有借鉴意义

在 admin 领域,同样也有开箱即用的 UI 组件库,当时比较火的是 ExtJs。就是类似 antd 一样的开箱即用 UI 组件库,还有以此为基础的 admin 基础框架。值得一提的是,不管是 jQuery 还是 ExtJs,当时的前端库大多是用继承的概念来组织前端库的,不像现在,已经流行组合了。

前端工程复杂度:React/Vue

接下来就到了现在这个时代了,React/Vue 作为主流的前端 UI 框架。

互联网的蓬勃发展,对 Web 站点的功能、性能、交互体验等方面都有极大的要求。前端项目的代码量越来越多,页面越来越多,组件也越来越多,这些变化给前端项目的工程化带来极大的复杂度

而 jQuery 已经越来越力不从心了,jQuery 虽然解决了浏览器兼容性的问题,但它仍然是一个直接操作 DOM 的框架。使用 jQuery,我们不仅需要通过操作 DOM 来处理 UI 界面,还要处理复杂的逻辑。当这两部分的代码交织在一起的时候,就是我们加班改代码的噩梦所在。

jQuery 的自由度很高,但是想要基于 jQuery 把整个前端项目的代码给管理好,需要极高的编码功底,还有严格被执行的规范,才能做到不错的地步,仅仅是不错而已。

于是,React/Vue 应运而生,它们做了高度的封装,可以让前端开发不直接操作 DOM,而是通过操作数据来处理 UI。通过这种方式,来解耦 UI 和逻辑。我们在使用这些框架的时候,必须要遵循他们的基本用法,这样就极大地在我们的项目中应用了这些框架的方法论,让我们的前端项目代码可以被更好地组织和管理,从而拥有一个比较好的可维护性和开发效率。

当然,不是说我们只要使用了 React/Vue 就可以让我们的代码更好维护了,React/Vue 只是给我们提供了下限而已。想要让我们的代码更好维护,还需要不断提升我们自己的编码和设计能力。

好了,前端 UI 框架的发展历程差不多就介绍到这里了,可以看到,前端 UI 框架是伴随着互联网行业而发展的,你觉得,下一步,前端 UI 框架会如何发展呢?

----------------【END】----------------

如果你是真心喜欢前端,并相信成长,想要提升自己的话,欢迎加入之道前端学习圈子。

戳这里 免费获取 之道前端的学习资料和专属服务。

相关文章:

前端 UI 框架发展史

上一小节我们了解了前端 UI 框架的作用和意义&#xff0c;接下来我们再来了解前端 UI 框架的发展历史。 虽然是讲历史&#xff0c;但我不想讲得太复杂&#xff0c;也不打算搞什么编年史记录啥的&#xff0c;毕竟我们不是来学历史的。 我会简单描述一下前端 UI 框架的发展历程…...

【工控】线扫相机小结 第五篇

背景介绍 线扫相机通过光栅尺的脉冲触发&#xff0c; 我在调试线扫过程中&#xff0c;发现图像被拉伸&#xff0c;预设调节分配器。图像正常后&#xff0c;我提高的相机的扫描速度&#xff08;Y轴动的更快了&#xff09;。 动的更快的发现&#xff0c;图像变短了&#xff08;以…...

AI与SEO关键词智能解析

内容概要 人工智能技术正重塑搜索引擎优化的底层逻辑&#xff0c;其核心突破体现在关键词解析维度的结构性升级。通过机器学习算法对海量搜索数据的动态学习&#xff0c;AI不仅能够识别传统TF-IDF模型中的高频词汇&#xff0c;更能捕捉语义网络中隐含的关联特征。下表展示了传…...

STM32---FreeRTOS消息队列

一、简介 1、队列简介&#xff1a; 队列&#xff1a;是任务到任务&#xff0c;任务到中断、中断到任务数据交流的一种机制&#xff08;消息传递&#xff09;。 FreeRTOS基于队列&#xff0c;实现了多种功能&#xff0c;其中包括队列集、互斥信号量、计数型信号量、二值信号量…...

开关模式电源转换器 EMI/EMC 的集成仿真

介绍 在电力电子领域&#xff0c;电磁干扰 &#xff08;EMI&#xff09; 和电磁兼容性 &#xff08;EMC&#xff09; 问题可以决定设计的成败。开关模式电源转换器虽然高效且紧凑&#xff0c;但却是电磁噪声的常见来源&#xff0c;可能会对附近的组件和系统造成严重破坏。随着…...

Java虚拟机之垃圾收集(一)

目录 一、如何判定对象“生死”&#xff1f; 1. 引用计数算法&#xff08;理论参考&#xff09; 2. 可达性分析算法&#xff08;JVM 实际使用&#xff09; 3. 对象的“缓刑”机制 二、引用类型与回收策略 三、何时触发垃圾回收&#xff1f; 1. 分代回收策略 2. 手动触发…...

linux---天气爬虫

代码概述 这段代码实现了一个天气查询系统&#xff0c;支持实时天气、未来天气和历史天气查询。用户可以通过终端菜单选择查询类型&#xff0c;并输入城市名称来获取相应的天气信息。程序通过 TCP 连接发送 HTTP 请求&#xff0c;并解析返回的 JSON 数据来展示天气信息。 #in…...

字节顺序(大小端序)

在弄明白字节顺序之前先了解一下一些基础概念. 基础概念 字节&#xff08;byte&#xff09;‌&#xff1a; 字节是计算机中数据处理的基本单位&#xff0c;通常由8个位组成&#xff0c;即1字节等于8位。一个字节可以存储一个ASCII码&#xff0c;两个字节可以存放一个汉字国标…...

可复用的 Vue 轮播图组件

大家好&#xff0c;今天我想和大家分享一下如何开发一个通用的 Vue 轮播图组件。轮播图在各种网站中都很常见&#xff0c;无论是展示产品、活动还是文章&#xff0c;都能派上用场。我们今天要实现的这个组件会具备良好的可配置性和易用性&#xff0c;同时保证代码的可维护性。 …...

AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异

背景 字节跳动正式发布中国首个AI原生集成开发环境工具&#xff08;AI IDE&#xff09;——AI编程工具Trae国内版。 该工具模型搭载doubao-1.5-pro&#xff0c;支持切换满血版DeepSeek R1&V3&#xff0c; 可以帮助各阶段开发者与AI流畅协作&#xff0c;更快、更高质量地完…...

Linux红帽:RHCSA认证知识讲解(五)从红帽和 DNF 软件仓库下载、安装、更新和管理软件包

Linux红帽&#xff1a;RHCSA认证知识讲解&#xff08;五&#xff09;从红帽和 DNF 软件仓库下载、安装、更新和管理软件包 前言一、DNF 软件包管理基础1.1 核心操作命令安装软件包卸载软件包重新安装软件包 1.2 软件仓库原理 二、配置自定义软件仓库步骤 1&#xff1a;清理默认…...

云上特权凭证攻防启示录:从根账号AK泄露到安全体系升级的深度实践

事件全景:一场持续17分钟的云上攻防战 2025年3月9日15:39,阿里云ActionTrail日志突现异常波纹——根账号acs:ram::123456789:root(已脱敏)从立陶宛IP(164.92.91.227)发起高危操作。攻击者利用泄露的AccessKey(AK)在17分钟内完成侦察→提权→持久化攻击链,完整操作序列…...

从3b1b到课堂:教育3D化的理想与现实鸿沟

从3b1b到课堂&#xff1a;教育3D化的理想与现实鸿沟 3Blue1Brown&#xff08;3b1b&#xff09;凭借精妙的三维动画与直观的知识可视化&#xff0c;重新定义了数学教育的可能性。然而&#xff0c;当前教育实践中&#xff0c;3D技术的渗透仍显不足&#xff0c;多数课堂停留在平面…...

FPGA入门教程

引言 FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;是一种灵活且强大的硬件设备&#xff0c;广泛应用于数字电路设计、信号处理、嵌入式系统等领域。与传统的ASIC&#xff08;专用集成电路&#xff09;不同&#xff0c;FPGA允许用户…...

Liunx系统 : 进程间通信【IPC-Shm共享内存】

文章目录 System V共享内存创建共享内存shmget 控制共享内存shmctl shm特性 System V System V是Liunx中的重要的进程间通信机制&#xff0c;它包括&#xff08;shm&#xff09;共享内存&#xff0c;&#xff08;msg&#xff09;消息队列和&#xff08;sem&#xff09;信号量。…...

KafkaRocketMQ

Kafka 消息生产与消费流程 1. 消息生产 生产者创建消息&#xff1a; 指定目标 Topic、Key&#xff08;可选&#xff09;、Value。可附加 Header 信息&#xff08;如时间戳、自定义元数据&#xff09;。 选择分区&#xff08;Partition&#xff09;&#xff1a; 若指定 Key&am…...

HarmonyOS Next 中的状态管理

在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染&#xff0c;在ArkU…...

基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙

目录 创建metadata 把数据导入qiime2 去除引物序列 双端合并 &#xff08;dada2不需要&#xff09; 质控 &#xff08;dada2不需要&#xff09; 使用deblur获得特征序列 使用dada2生成代表序列与特征表 物种鉴定 可视化物种鉴定结果 构建进化树&#xff08;ITS一般不构建进化树…...

【软件测试开发】:软件测试常用函数1.0(C++)

1. 元素的定位 web⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素&#xff0c;然后才能对元素进⾏具体的操作。 常⻅的元素定位⽅式⾮常多&#xff0c;如id&#xff0c;classname&#xff0c;tagname&#xff0c;xpath&#xff0c;cssSelector 常⽤的主要由cssSelector和xpath…...

vue2项目修改浏览器显示的网页图标

1.准备一个新的图标文件&#xff0c;通常是. ico格式&#xff0c;也可以是. Png、. Svg等格式 2.将新的图标文件(例如&#xff1a;faviconAt.png)放入项目的public文件夹中。如下图 public文件夹中的所有文件都会在构建时原样复制到最终的输出目录(通常是dist) 3. 修改vue项目…...

开源、创新与人才发展:机器人产业的战略布局与稚晖君成功案例解析

目录 引言 一、开源&#xff1a;机器人产业的战略布局 促进技术进步和生态建设 吸引人才和合作伙伴 建立标准和网络效应 降低研发风险与成本 二、稚晖君&#xff1a;华为"天才少年计划"的成功典范 深厚的技术积累与动手能力 强烈的探索和创新意识 持续公开…...

线程相关作业

1.创建两个线程&#xff0c;分支线程1拷贝文件的前一部分&#xff0c;分支线程2拷贝文件的后一部分 #include "head.h"#define BUFFER_SIZE 1024// 线程参数结构体&#xff0c;包含文件名和文件偏移量 typedef struct {FILE *src_file;FILE *dest_file;long start_o…...

通义万相2.1开源版本地化部署攻略,生成视频再填利器

2025 年 2 月 25 日晚上 11&#xff1a;00 通义万相 2.1 开源发布&#xff0c;前两周太忙没空搞它&#xff0c;这个周末&#xff0c;也来本地化部署一个&#xff0c;体验生成效果如何&#xff0c;总的来说&#xff0c;它在国内文生视频、图生视频的行列处于领先位置&#xff0c…...

【模拟CMOS集成电路设计】带隙基准(Bandgap)设计与仿真(基于运放的电流模BGR)

【模拟CMOS集成电路设计】带隙基准&#xff08;Bandgap&#xff09;设计与仿真 前言工程文件&部分参数计算过程&#xff0c;私聊~ 一、 设计指标指标分析&#xff1a; 二、 电路分析三、 仿真3.1仿真电路图3.2仿真结果(1)运放增益(2)基准温度系数仿真(3)瞬态启动仿真(4)静态…...

如何选择国产串口屏?

目录 1、迪文 2、淘晶驰 3、广州大彩 4、金玺智控 5、欣瑞达 6、富莱新 7、冠显 8、有彩 串口屏&#xff0c;顾名思义&#xff0c;就是通过串口通信接口&#xff08;如RS232、RS485、TTL UART等&#xff09;与主控设备进行通信的显示屏。其核心功能是显示信息和接收输入…...

Solana中的程序派生地址(PDAs):是什么,为什么,以及如何?

程序派生地址 (PDA) 在 Solana 中的应用&#xff1a;什么、为什么和如何&#xff1f; 在学习 Solana 时&#xff0c;你会经常听到关于 程序派生地址 (PDAs) 的讨论。它们就像这样 —— 强大、多功能&#xff0c;而且最重要的是&#xff0c;稍微被误解。如果你是一个开发者&…...

利用FatJar彻底解决Jar包冲突(一)

利用FatJar彻底解决Jar包冲突 序FatJar的加载与隔离⼀、 FatJar概念⼆、FatJar的加载三、FatJar的隔离四、隔离机制验证五、 FatJar的定位六、 打包注意点 序 今天整理旧电脑里的资料&#xff0c;偶然翻到大概10年前实习时写的笔记&#xff0c;之前经常遇到Java依赖冲突的问题…...

Spring MVC笔记

01 什么是Spring MVC Spring MVC 是 Spring 框架中的一个核心模块&#xff0c;专门用于构建 Web 应用程序。它基于经典的 MVC 设计模式&#xff08;Model-View-Controller&#xff09;&#xff0c;但通过 Spring 的特性&#xff08;如依赖注入、注解驱动&#xff09;大幅简化了…...

BurpSuite插件jsEncrypter使用教程

一、前言 在当今Web应用安全测试中&#xff0c;前端加密已成为开发者保护敏感数据的常用手段。然而&#xff0c;这也给安全测试人员带来了挑战&#xff0c;传统的抓包方式难以获取明文数据&#xff0c;测试效率大打折扣。BurpSuite作为一款强大的Web安全测试工具&#xff0c;其…...

【C#实现手写Ollama服务交互,实现本地模型对话】

前言 C#手写Ollama服务交互&#xff0c;实现本地模型对话 最近使用C#调用OllamaSharpe库实现Ollama本地对话&#xff0c;然后思考着能否自己实现这个功能。经过一番查找&#xff0c;和查看OllamaSharpe源码发现确实可以。其实就是开启Ollama服务后&#xff0c;发送HTTP请求&a…...