关于前端开发:起源、架构、变迁、前端应用领域、语言、框架、工具、前端学习路线 关于 Web 标准:标准组织、W3C 及 Ecma 会员、W3C 规范制定流程、如何参与标准制定 一些问题和回答
# Web 标准与前端开发 - 笔记
# 关于前端开发
# 起源
在 1989 年,在 CERN 工作的 Tim Berners-Lee 写了一个关于信息管理的建议《Informational Management: A Proposal》,提及基于超文本来构建文档网络的想法,这份文档被公认为 Web 的起源。
# 架构
直到现在,很多人也不是很清楚 “上网” 指的是上什么网。“上网” 实际上指的就是接入 Internet,而我们平时使用搜索引擎、访问网页、使用网络聊天应用都是指使用 Web。前者相当于一个高速公路,提供各种底层的数据传输协议、架构等,后者相当于是一个非常大的物流公司,提供具体服务,比如说:在浏览器中输入网址、访问网页,实际上就是访问远程服务器的 80(HTTP)/443(HTPPS) 端口,而还有其他的服务(比如收发邮件)则使用的是另外的对应端口。
1989 年诞生时,Web 由三种技术构成:HTML、HTTP、URL,而 CSS 和 JavaScript 是几年之后(1995 年前后)才出现的。
HTML 是超文本标记语言,用来做 Document;
HTTP 是超文本传输协议,用来传输 Document,在 TCP/IP 之上,封装的是 HTTP 这个资源的数据包;
URL 是统一资源定位符,在 HTTP 的上下文中,一般也被称为网址,在浏览器的地址栏中显示,例如 https://developer.mozilla.org
。
客户端(浏览器)因为是直接面向用户,所以就是前端,而服务器因为用户不能直接接触到,所以就成了后端。
# 变迁
- 1989-2004(只读时代):
HTML/CSS/JavaScript
- 单项发布
- 静态只读
- 链接跳转
- 刷新页面
- 表格对齐元素
- CGI
在这个时代中,浏览器更像是一个阅读器,页面的更新必须依靠浏览器的刷新(重新向服务器发送一次请求,获取 HTML)进行页面的整体替换。
- 2005-2010(体验时代):
Ajax/Web API/jQuery
- 动态交互
- 社交媒体
- 用户生成内容(UGC)
- 单页应用(SPA)
- jQuery
- YUI
这个时代的标志就是 Ajax,浏览器可以不用刷新网页,通过 JS 的对象在后台就能向服务器发送请求,局部更新页面,实现了 Web 从一个简单的页面到 Web App 的跨越。
- 2010-2021(敏捷时代):
Fetch/Node.js/Webpack
- 模块化
- 组件化
- 转译(transpiling)
- 打包(bundling)
- React&Vue
这个时代是从 iPhone 的发布开始的,Web 逐渐开始跨向移动领域,用户体验越来越被重视,前端开始真正变成一个独立的工种(职业),得益于 Node.js 的问世,前端工程师也能够处理后端的工作了,为前端的规模化、敏捷化打下了基础
# 前端应用领域
- ToB(To Business):面向企业、大型组织 & 机构
- 包括商业引擎、CRM、中后台管理面板等
- ToC(To Customer):面向终端客户 & 消费者
- 包括门户网站、电商平台、在线教育、新闻资讯、生活娱乐平台等
- ToD(To Developer):面向开发者
- 包括面向开发者的平台、框架、工具、VSCode 等
Web 浏览器主要分为:
- 桌面端:Chrome 内核(Chrome、Edge、Opera)、Firefox、Safari
- 移动端:Android(WebView)、IOS(Safari)
服务器技术主要有:
- Node.js
- Express.js
- koa
- Deno(基于 Rust 语言的新一代 js&ts 运行时)
终端和跨端技术主要有:
- 命令行 / 终端(脚手架):
- Webpack CLI
- Bacel CLI
- React/Vue CLI
- 桌面跨端:
- Electron
- NW.js
- 移动跨端:
- React Native
- Flutter
# 语言、框架、工具
浏览器语言有:
- HTML、CSS、JavaScript:在很长时间都是浏览器中只能使用的语言
- WebAssembly:2019 年成为标准,是一种类汇编的语言,可以由 C/C /Rust/Kotlin 等语言编译而成,可以与 JavaScript 互操作、传递消息、共享内存,速度接近平台的原生速度
常用框架和工具有:Node.js、koa、React、Vue、TypeScript、git、Babel、webpack、esbuild 等 *(在学习一个框架 / 工具时,可以去了解一下其作者,写这个框架 / 工具的初衷是什么,这样可以帮助更好的理解和学习)*
# 浏览器、网络、服务器
推荐两篇文章:
- 深入理解现代浏览器:告诉你在浏览器输入网址按回车之后,真正发生的事情
- HTTP 概述 - MDN:帮助你理解 HTTP 协议
# 前端学习路线
路线图推荐:
- 中文:ObjTube
- 英文:RoadMap.sh
学习永无止境,翻滚吧后浪!
# 关于 Web 标准
# 标准组织
- W3C: World Wide Web Consortium(万维网联盟) 制定了 HTML、CSS、DOM 相关标准
- Ecma: Ecma International(Ecam 国际) 制定了 JavaScript 相关的语言标准,如:ES5、ES6、ES2015、ES2016、ES2017、ES2018、ES2019、ES2020、ES2021
- WHATWG: Web Hypertext Application Technology Working Group(Web 超文本应用技术工作组) 制定了 DOM、Web API 相关标准
- IETF: Internet Engineering Task Force(互联网工程任务组) 制定了 HTTP 等基础通信协议标准
# W3C 及 Ecma 会员
- W3C 目前在全球有 457 家会员,其中北航总部(中国区)会员 47 家 全球很多著名互联网公司(特别是浏览器厂商)都是 W3C 会员,根据加入组织的年营业额来缴纳会费
- Ecma 的 AM(Associate Member)会员目前有 18 家,中国公司有字节跳动、360、阿里、华为、腾讯等 5 家 Ecma 的会员分为 AM 和 OM,OM 比 AM 多了一项投票权,可以决定一些 Ecma 的重大事务(包括是否批准新会员的加入),AM 的会费一年大概 250,000RMB 左右
# W3C 规范制定流程
- WD(Worker Draft)
- CR(Candidate Recommendation)
- PR(Proposed Recommendation)
- REC(Recommendation)
# Contribute
Explainer demo
Find the right community/group
Web IDL for APIs link
Step-by-step algorithms
GitHub, Markdown, respec, bikeshed, etc.
Get an early review w3ctag/design-reviews
Write web-platform-tests (WPT) tests
# Ecma TC39 规范制定流程
- STAGE 0(strawman):以任何形式提交的想法
- STAGE 1(proposal):正式的建议 & 文档
- STAGE 2(draft):有语法 & 语义相关的描述
- STAGE 3(candidate):规范文本完备且至少有两个实现
- STAGE 4(finished):成为标准
# Contribute
Championing a proposal at TC39
How to write a good explainer
Presenting a Proposal to TC39
Reading a proposal draft
Stage 3 Proposal Reviews
How to experiment with a proposal before Stage 4
Implementing and shipping TC39 proposals
# 如何参与标准制定
# W3C 会议
W3C Technical Plenary / Advisory Committee Meetings Week(简称 TPAC) 是 W3C 一年一度的全球技术大会,汇集 W3C 各工作小组成员 (工作组、兴趣组、社区组等)、咨询委员会 (AB)、技术架构组 (TAG)、会员单位代表 (AC)、公众特邀专家以及全球社区成员,通过为期 1-2 周的集中互动交流,深入探讨未来开放 Web 平台技术方向。
# 参加 W3C 会议
- 年度大会
- AC(Advisory Committee):每个会员出一个代表,每年定期开会,主要是事务性的会议,持续 2-3 天
- TPAC(Technical Plenary and Advisory Committee):技术大会,对所有会员开放,持续一周
- 工作组会议
- 每月会议
- 各种研讨会
# 参加 Emca 会议
- 年度大会:GA(General Assembly),讨论重大事宜,投票通过每年的新会员申请
- TC39 会议:每 1-2 个月
# 一些问题
# 加入会员对公司有什么好处?
加入会员对公司来说,有几个方面的好处:
- 这些标准决定未来行业发展趋势,很多公司在做基础设施建设的时候,也会产出一些类似标准的方案,如果作为会员,就能够深入得到参与到工作组的讨论,进行对前景早期的交流,获取行业内部第一手的资料,对公司的发展 & 部署都有帮助
- 作为会员公司的员工,能够代表公司参加会议,接触到标准前沿,认识到行业内的大佬,对整个学习氛围都是很有帮助的
# 现在还要学 jQuery 吗?
在大公司的项目里,基本见不到用 jQuery 的了
对于技术发展不是那么快的公司,项目代码里可能还会用到 jQuery
之前流行的原因是:早期很多浏览器的实现不一致,jQuery 解决了跨浏览器的兼容问题
但是现在浏览器的发展趋同化,浏览器的多样性实际上在减少,兼容性的问题越来越少,jQuery 就没那么重要了;相反,组件式开发框架 React、Vue 和函数式实用工具库变得比较受欢迎
所以 jQuery 没有必要花太多时间去学,如果感兴趣可以学一学
# Node.js 现在在大公司的应用方向?
由于前端工程师学习 Node.js 比较简单,所以应用还是比较广泛的,比如 ToB 和 ToD:
- BFF(Backend For Frontend):在后端与前端之间的一个中间层,根据前端不断变化的应用,对后端接口进行进一步封装
- npm:大公司内部一般都有自己的 npm 仓库,npm 包(自研组件库等)都是用 Node.js 来写的
# 要先搞透 js 再学框架还是同时深入?
框架和 js 的学习是相辅相成的,框架实际上是一种更高层次的抽象,对框架的实践 & 运用也能使你对 js 架构、设计模式层面有更深入的理解
# 元宇宙跟前端有关系吗?
有,元宇宙平台可以给前端提供 API 接口,从而使开发者可以在元宇宙平台中开发丰富多样的应用
# WebAssembly 是前端人员去做吗?是否意味着前端要学习 c /rust/go?
WebAssembly 实际上是两种开发生态的融合,为了解决前端的计算量 & 性能问题,JavaScript 的性能是毫秒级的,Rust/Go 等原生语言的性能是纳秒级的
任务层面:前端开发者可以了解怎么把原生的应用转换成 WebAssembly,以及其完善、扩展
提高层面:作为前端开发者也应该了解底层的系统编程语言,Rust/Go 都是很值得去学习的,以便了解系统底层原理
# 怎么看待低代码平台?
低代码平台对前端来说是种机遇,可以为前端提供很多工作岗位,但同时也是一种挑战,需要很多新的算法、技术解决方案
# WebAssembly 用的多吗?在字节跳动应用如何?
WebAssembly 在大公司应用的还是很多的,大公司对于解决应用性能的需求是十分迫切的,且也有相应的资源进行人才扩招和项目落地
在规模不是太大的公司,对性能的需求不是特别高,就不会优先考虑
# 使用类似 nest 的 Node.js 后端框架在性能上会和 spring、go 写的后端差距很大吗?
很大。建议看一下 esbuild 的官网,esbuild 使用 go 语言编写,而 webpack 使用 Node.js 编写,其性能差异可达百倍。
# 参考资料
- 字节青训营课程
- MDN 中文文档