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

前端开发的前世今生

现代前端开发简介

  • 前端开发的历史
    • CGI
    • Server Page
    • RIA
    • AJAX
    • 前端组件化和工程化
  • 现代前端开发模式
    • 前端工程化
    • 前端组件化
    • 单页应用
    • 微前端
  • 更多相关技术
    • 游戏开发
    • Web Assembly
  • 小结

今天我们来稍微聊一下现代前端开发的过去和现状。

前端开发的历史

CGI

在互联网刚刚开始兴起的时代,静态的html网页功能实在有限,前端脚本javascript 也不过是用于表单输入验证这样的简单功能。开发者想在网站上开发强大的功能就得使用动态生成的网页。
公共网关接口(Common Gateway Interface,CGI)就是早期动态网页的简单实现,基本原理就是让服务器不仅仅提供静态的html文件,而且可以根据输入参数用程序生成结果,简单,直接,有效。

Server Page

随着互联网的发展,需要的网站功能越来越强,对应的动态网页也就越来越复杂。这时候“Xxx server page” 这样的技术应运而生,其主要特点是把后端脚本嵌入到html页面代码中来生成动态网页,其实说白了就是一个语法糖,让生成动态网页的代码更直观容易理解。其中最有代表性的有:

  • JSP, 全称java server page, J2EE的最基础功能之一, Java 在互联网和企业级应用开疆扩土的功臣,可以运行在tomcat 或者jetty这样的java web容器之上。
  • ASP,全称active server page, 是微软推出的技术,运行于微软的IIS服务器之上。
  • PHP,被人戏称为“世界上最好的编程语言”,至今还顽强的生存着。

RIA

动态生成的网页,从后端来看可以动态填充数据已经不错了,但前端表现力和灵活性未免差了一些。为了提高用户体验和绕开当时笨拙缓慢的javascript脚本,人们发明了RIA(Rich Internet Applications)富互联网程序,做法就是人工给浏览器安装RIA 运行时插件,扩展浏览器的功能以运行RIA的程序。记得当时听说过的实现有:

  • Flash / Flex, 这个是n年前处于统治地位的插件,地表最强,没有之一
  • Java Applet / Fx,Java applet 曾经是早期的java流行的原因之一,但终究未成气候。后来晚些时候又推出了 java Fx,但反响并不强烈。
  • SilverLight,既然是软件技术竞争,又怎么可能少了微软,这个SilverLight就是微软晚些时候推出来的和Flex, Java Fx竞争的。

虽然上述技术曾经是打得你来我往甚是热闹,但架不住技术大潮的方向没有选择RIA,比如业界领军的苹果当年就坚持不支持flash。覆巢之下岂有完卵,曾经热门的技术终究逐渐销声匿迹了。

AJAX

"xxx server page"的技术虽然兴盛一时,但混合前后端代码的开发方式确实有些混乱和不直观。我们都知道解耦合和分层是软件设计中降低复杂度增加可读性的基本操作方法。在这里仍然适用。有一种名为AJAX ( Asynchronous JavaScript and XML)的技术静悄悄地发展。在 AJAX 中,JavaScript 代码向服务器发起请求,但不会令浏览器刷新页面,也不会改变网页。这种技术可以实现异步更新网页的部分内容,而不需要重新加载整个页面,从而提高用户体验。
直到后来行业巨头谷歌用它打造了前后端分离模式下的Gmail和google doc,这项技术一下子火爆起来。然后就有了老前端们所熟知的JQuery。个人感觉JQuery的名字可能就来自于它的核心功能之一:封装了AJAX调用功能。

前端组件化和工程化

AJAX火了数年,期间前端也变得越来越复杂,面临越来越多的挑战。再后来就出现了我们现在所熟知解决方案:前端组件化和工程化。下面我们会介绍一下现代前端开发的模式。

现代前端开发模式

前端工程化

随着前端复杂度的提升,传统写javascript 脚本和css的模式开发难度逐渐加大,难以为继,然后就出现了前端开发工程化的趋势。
前端开发工程化是指将前端开发过程中的一系列流程和工具进行规范和自动化,从而提高开发效率、减少重复劳动、降低出错率。其核心概念包括模块化、打包构建、自动化部署、自动化测试和持续集成等。旨在提高开发过程中的开发效率,减少不必要的重复工作时间,让开发人员更加专注于业务逻辑的开发。
前端开发工程化的主要实现方式有:

  • 脚手架项目:模板化的于快速搭建项目基础的工具,它可以通过简单的指令或命令来生成项目的基础代码和配置,从而避免重复编写相同的代码框架和基础配置。
  • 工具集:用于前端开发编译部署等生命周期中的各种工具软件

那么工程化具体的功能有哪些呢:

  • 模块化: import,
  • 项目配置:package.json, lock文件
  • IDE工具集:VScode及其插件
  • 构建:检查(lint), 编译(Babel), 打包(webpack, vite)
  • 测试:单元测试(如Jest), 集成测试(如Cypress)
  • CICD: 如Jenkins
  • 监控告警:如google firebase, Sentry

前端组件化

前端组件化其实是解耦合,封装,内聚,复用代码等编程思想的一种有效的实现的方法。而具体实践则是由React, Vue为代表的框架来实现。甚至还出现了浏览器原生的组件化标准即web components(但它一直不温不火的)
组件化的流行还带来了如下小趋势:

  • JSX 使用类似HTML/XML的方式来编写组件,JSX虽然只是语法糖,但却是改变前端开发思维方式的重要一步,更直观的代码,大大平缓了学习曲线。
  • CSS In JS:既然是组件,自然会有将界面逻辑和界面样式都封装到一个组件的需求。Styled Component等CSS in JS的方案,使得外观和逻辑代码可以轻松结合在一起封装成组件。
  • Theme: 现代UI组件库往往提供自定义Theme和切换Theme的能力。使得我们可以在组件外观绑定的同时给予UI风格一致的灵活性。

单页应用

SPA即single page application,是最典型的React/Vue组织前端页面的方法,即整个前端应用其实是一个页面,里面页面切换使用前端路由,浏览器层面并未发生真正的页面跳转。使得应用能够与用户交互,无需重新加载整个页面,代码逻辑也是一个整体,更像一个应用程序而不是分散的网页。
前端路由本质是对 url 的 hash 值进行改变和监听,通过切换对应页面组件的 dom 结构来实现多个页面的效果。前端路由可以将不同的路由对应到不同的内容或页面,使得页面不刷新,提高用户体验,也是实现SPA的基石。

##前端适配
现代前端以及不仅仅指狭义的网页开发了,往往要兼容和适配多不同终端:

  • 多种运行时:
    • 浏览器
    • 原生App(iOS, Android,鸿蒙
    • APP内嵌Web View
    • 兼容性APP(Flutter)
    • 小程序(微信,京东,支付宝…)
  • 多种设备
    • 电脑
    • 平板
    • 手机
    • 其他可穿戴或者嵌入式设备

微前端

微前端是一种发挥着 多个团队通过独立发布功能的方式来共同构建现代化 web应用的技术手段及方法策略。
微前端的核心目标是将巨石应用拆解成若干可以自治的松耦合微应用,这样才能确保微应用真正具备独立开发、独立运行的能力。

更多相关技术

游戏开发

除了上面介绍的经典前端应用外,其实游戏也是一个很有价值的方向。

  • WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起在浏览器中运行。WebGL的出现大大拓展了前端绘图能力,使得在浏览器,小程序或web view中3D绘图变得可行,而且速度也不错,这是web 游戏能够实现的根基。
  • 游戏引擎,不少游戏引擎支持浏览器环境运行,比如著名的Cocos,轻量级的PixiJS,以及曾经火爆的白鹤引擎(白鹤是优秀的国产游戏引擎,市场占有率非常高,但后来大概是因经营原因停止更新了,很可惜)

Web Assembly

如果我不想用javascript 或者typescript怎么办?试试Web Assembly吧。
WebAssembly是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果。它设计的目的不是为了手写代码而是为诸如 C、C++和Rust等低级源语言提供一个高效的编译目标。
因为它的安全性,隔离性以及语言无关性,Wasm 运行时可以以近似原生性能安全地隔离和执行用户空间代码,所以Web Assembly也可以用在其他需要沙箱机制的地方,比如Envoy Proxy 就率先使用 Wasm 作为扩展机制作为对数据平面的编程。

小结

本文大概介绍了前端开发的前生今世,希望能对不熟悉的人和新手前端有所帮助。任何意见和建议,都欢迎留言讨论。

相关文章:

前端开发的前世今生

现代前端开发简介 前端开发的历史CGIServer PageRIAAJAX前端组件化和工程化 现代前端开发模式前端工程化前端组件化单页应用微前端 更多相关技术游戏开发Web Assembly 小结 今天我们来稍微聊一下现代前端开发的过去和现状。 前端开发的历史 CGI 在互联网刚刚开始兴起的时代&a…...

CAP概念和三种情况、Redis和分布式事务的权衡

借鉴:https://cloud.tencent.com/developer/article/1840206 https://www.cnblogs.com/huanghuanghui/p/9592016.html 一:CAP概念和三种情况 1.概念: C全称Consistency(一致性):这个表示所有节点返回的数…...

npm pnpm yarn(包管理器)的安装及镜像切换

安装Node.js 要安装npm,你需要先安装Node.js。 从Node.js官方网站(https://nodejs.org)下载并安装Node.js。 根据你的需要选择相应的版本。 一路Next,直到Finish 打开CMD,输入命令来检查Node.js和npm是否成功安装 nod…...

Javase | Java工具类、(SSM)各种依赖的作用

目录: Java工具类:日期工具类文件上传工具类 短信工具类验证码工具类邮件工具类代码生成器 (SSM)各种依赖的作用:spring-context 依赖:spring-context-supprt 依赖:spring-tx 依赖:mysql-connector-java 依赖:spring-j…...

深入探究Python中的JSON、Pickle和Shelve模块:特性与区别

更多资料获取 📚 个人网站:ipengtao.com 在Python中,处理数据序列化和持久化是极其重要的。JSON、Pickle和Shelve是三种常用的模块,它们提供了不同的方法来处理数据的序列化和持久化。本文将深入研究这三个模块,探讨它…...

文心大模型3.5 VS ChatGPT3.5,谁更会写代码 ?

问题:请帮我写一段代码,SAP物料凭证创建接口的代码 ? 文心大模型3.5:写了一段 python ChatGPT3.5 : 写的还可以啊,理解的很到位,而且用的是S/4新语法呀 ! DATA: lt_header TYPE TABLE OF bapi2017_gm_head_…...

【网络安全】用永恒之蓝(Eternal blue)测试windows系统的安全性

一、kali默认账户和密码都为kali 攻击机:Linux 的 kali 目标机:Windows7 x64 二、kali、metasploit、metasploit 攻击 windows操作系统、metasploit 攻击 永恒之蓝 全流程 ①kali:是黑客攻击机。开源免费的Linux操作系统,含有300…...

对于Web标准以及W3C的理解、对viewport的理解、xhtml和html有什么区别?

1、对于Web标准以及W3C的理解 Web标准 Web标准简单来说可以分为结构、表现、行为。 其中结构是由HTML各种标签组成,简单来说就是body里面写入标签是为了页面的结构。 表现指的是CSS层叠样式表,通过CSS可以让我们的页面结构标签更具美感。 行为指的是…...

大语言模型概述(一):基于亚马逊云科技的研究分析与实践

大型语言模型指的是具有数十亿参数(B)的预训练语言模型(例如:GPT-3, Bloom, LLaMA)。这种模型可以用于各种自然语言处理任务,如文本生成、机器翻译和自然语言理解等。 大语言模型的这些参数是在大量文本数据上训练的。…...

LuatOS-SOC接口文档(air780E)--repl - “读取-求值-输出” 循环

示例 --[[ 本功能支持的模块及对应的端口 模块/芯片 端口 波特率及其他参数 Air101/Air103 UART0 921600 8 None 1 Air105 UART0 1500000 8 None 1 ESP32C3 UART0 921600 8 None 1 -- 注意, 简约版(无CH343)不支持 ESP32C2 …...

SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问

1.问题描述: 使用springboot开发一个项目,开发文件上传的时候,通常会将上传的文件存储到资源目录下的static里面,然后在本地测试上传文件功能没有问题,但是将项目打成jar包放到服务器上运行的时候就会报错&#xff0c…...

Selenium Grid

Selenium Grid 什么是Selenium Grid Selenium是Selenium套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上 Selenium Grid的两个版本 Grid1与Grid2两个版本的原理和基本工作方式完全相同,Grid2同时支持Selenium1和Selenium2&#x…...

ubuntu系统下搭建本地物联网mqtt服务器的步骤

那么假如我们需要做一些终端设备,例如温湿度传感器、光照等物联网采集设备要接入呢?怎么样才能将数据报送到服务器呢? 以下内容基于我们ubuntu系统下的emqx成功启动的基础上。我们可以用浏览器键入控制板的地址,如果启动成功&…...

计算机二级考试题库(答案)

题目一:计算机网络基础 1.计算机网络的定义是什么? 计算机网络是指由通讯设备和不同类型计算机组成的计算机系统,利用传输介质,如电缆、光缆、无线等与通讯协议,实现计算机之间的信息传递和共享资源。 2. 内网和外网有什么区别?…...

React Native 源码分析(五)—— Fabric创建View的过程

这篇文章详细分析一下,在React Native 新架构下,Fabric是如何创建View的,从React层发送把View信息到原生端开始分析。说明一点,React 层fiber的创建更新过程,不属于Fabric。其中Yoga的绘制过程不会太详细,只会给出大概流程,像布局缓存这些。文章的重点是帮你理解Fabric的…...

为什么同样的C代码在arm64-v8a可以跑,在armeabi-v7a会奔溃?

文章目录 背景过程第一个坑第二个坑 arm64-v8a 和 armeabi-v7a的区别实例64位,Android设备CPU:arm64-v8a32位,Android设备CPU:armeabi-v7a 基本数据类型在32位和64位的区别指针长度在32位和64位的区别 其他可能性chatgpt回答参考 背景 使用NDK开发项目的…...

C++初学者线路图 23年12月

高精度计算 1. 高精度加减法 高精度加减法课程(12月1日~12月4日)高精度加减法配套程序(12月5日~12月6日) 2. 高精度乘法 高精度乘法课程(12月7日~12月10日)高精度乘法…...

Day37| Leetcode 738. 单调递增的数字

今天就一个题目,做完吃完饭抓紧做六级试题。 Leetcode 738. 单调递增的数字 题目链接 738 单调递增的数字 本题目思路还是比较巧妙的,对于98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首…...

【工具分享】| 阅读论文神器 使用技巧 AI润色 AI翻译

文章目录 1 使用技巧1.1 功能一 即时翻译1.2 功能二 文献跳转1.3 功能三 多设备阅读1.4 功能四 小组讨论笔记共享1.5 功能五 个人文献管理 2 其他功能 超级喜欢Readpaper这一款论文阅读软件,吹爆他哈哈 为什么? 当然是他可以解决我们传统阅读论文的种种…...

String.prototype.match进行==判断

今天发现一个String.prototype.match的奇葩用法 export const isWeChat (() > {let ua window.navigator.userAgent.toLowerCase();return ua.match(/MicroMessenger/i) "micromessenger"; })();这是我在网站上找到的一个判断是否是微信浏览器的方法&#xff…...

less 笔记

<link rel"stylesheet/less" type"text/css" href"styles.less" /> <script src"https://cdn.jsdelivr.net/npm/less4" ></script>变量&#xff08;Variables&#xff09; 原生已支持 --前缀定义属性 var() 函数获取…...

Java中的异常你了解多少?

目录 一.认识异常二.异常分类三.异常的分类1.编译时异常2.运行时异常 四.异常的处理1.LYBL&#xff1a;事前防御型2.EAFP&#xff1a;事后认错型 五.异常的抛出Throw注意事项 六.异常的捕获1.异常的捕获2.异常声明throws3.try-catch捕获并处理 七.自定义异常 一.认识异常 在Jav…...

查找算法及哈希表

1 二分查找 1.1 重要概念 拟解决的问题&#xff1a;判断某个区间是否包含某个元素&#xff0c;无法确定区间中包含重复元素的具体位置&#xff1b;使用条件&#xff1a;查找的区间必须符合单调性&#xff1b;本质&#xff1a;采用分治思想&#xff0c;将某个单调区间一分为二…...

ELK分布式日志管理平台部署

目录 一、ELK概述 1、ELK概念&#xff1a; 2、其他数据收集工具&#xff1a; 3、ELK工作流程图&#xff1a; 4、ELK 的工作原理&#xff1a; 5、日志系统的特征&#xff1a; 二、实验部署&#xff1a; 1、ELK Elasticsearch 集群部署 2、安装 Elasticsearch-head 插件 …...

四、虚拟机网络配置

目录 1、VMware网卡配置模式 1.1 桥接模式 1.2 NAT模式 1.3 仅主机模式 ​​​​​​​2、编辑虚拟机的网络编辑器 ​​​​​​​3、编辑Window的虚拟网卡 ​​​​​​​4、修改IP地址为静态 4.1 查看网卡名字 4.2 编辑修改网卡IP地址的配置文件 4.3 重启网络: 4.…...

四、Lua循环

文章目录 一、while(循环条件)二、for&#xff08;一&#xff09;数值for&#xff08;二&#xff09;泛型for&#xff08;三&#xff09;repeat util 既然同为编程语言&#xff0c;那么控制逻辑里的循环就不能缺少&#xff0c;它可以帮助我们实现有规律的重复操作&#xff0c;而…...

生成对抗网络(GAN)手写数字生成

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09; 二、什么是生成对抗网络1. 简单介绍2. 应用领域 三、网络结构四、构建生成器五、构建鉴别器六、训练模型1. 保存样例图片2. 训练模型 七、生成动图 一、前言 我的环境&#xff1…...

LeetCode Hot100 31.下一个排列

题目&#xff1a; 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列…...

Redis主从与哨兵架构详解

目录 主从架构 主从环境搭建 主从复制流程 1. 全量复制 2. 部分复制 主从风暴 哨兵架构 概念 哨兵环境搭建 主从架构 主从环境搭建 1. 复制一份redis.conf文件, 修改下面几行配置 port 6380 pidfile /var/run/redis_6380.pid logfile "6380.log" dir /usr/…...

Linux:docker的数据管理(6)

数据管理操作*方便查看容器内产生的数据 *多容器间实现数据共享 两种管理方式数据卷 数据卷容器 1.数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中&#xff0c;可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立刻可见&#xff0c;并且更新数…...