Web 文件包括:
- HTML 文档:类似一个容器,可以承载内容和代码
- 这种「文档」文件需要独立于 Web 软件的版本,能自主变化,比如:
- 更新内容
- 对不同用户提供不同内容
- 把代码更新到不同的 Web 软件版本
- 静态文件:在同一个 Web 软件版本中保持不变。包括:
- 代码文件:会被 Web Runtime 解析和运行。
- JS 文件、WASM 文件(WebAssembly 代码)、CSS 文件
- 资源文件:会被文档和代码使用到。
- 图片、字体、视频、音频、数据等。
Web 软件包括
- 标准化的 Web 软件
- 独立网页:侧重「内容」没有子页面(比如很多 H5 营销活动只有一个页面)。
- 多页网站:侧重「内容」由多个页面组成,通过链接组织到一起(这里说「页面」是业务和用户体验上的概念,不是技术概念,所以并不一定对应到 HTML 文档)。
- Web App(狭义):侧重「功能」,更类似应用软件组织的粒度可以比页面更细。
- PWA(Progressive Web App):Offline First、可安装的 Web App。运行在浏览器中,但在外观和用法上可以独立于浏览器。既能实现跟独立原生应用一致的体验,也能保持 Web App 的独特能力(具体能力见后文)。以上全是通过完全标准化方式实现。
- 非标准的 Web 软件
- 跨端界面(HybridUI):原生客户端里基于 Web 技术的界面。通常运行在客户端的 WebView 里(这种 Web Runtime 是标准化的,但客户端经常会在标准基础上做非标准的自定义扩展)也有的会以完全非标准的方式运行(比如运行在非标准的 Runtime,也就是「跨端容器」里,比如部分或全部以原生方式运行)分发方式经常是非标准的(比如打包在客户端里、用自定义方式下发)通常跟特定产品的客户端需求、非标准化的客户端能力绑定在一起,无法独立使用典型例子有端上内嵌 H5 界面、小程序。
- 打包应用(Packaged App):
- 类似 Hybrid UI,但不是单一界面,整个 Web App 都运行在基于原生客户端技术的容器里,只不过这个容器是通用的「空壳」,本身不含业务逻辑,只负责给 Web 软件: 提供能力(包括标准化的能力,和在标准基础上增强的非标准能力) 也有的打包应用会完全编译成原生应用。
标准化的 Web 软件需要运行在浏览器里,或运行在其他跟浏览器一样具备完全标准化 Web Runtime 的客户端里(如前文所述,这种客户端实际上已经是一种浏览器,只是形态和功能跟传统浏览器不同)。
PWA 在「标准化的 Web 软件」中具备独有的能力,能「看上去」独立于浏览器、像独立应用一样安装和运行。
标准化的 Web 软件都一定具备全部 Web 的独特能力(具体能力见后文)。
非标准的 Web 软件完全独立于浏览器,运行方式通常有非标准的部分,或是完全非标准。分发方式通常完全非标准。
非标准的 Web 软件不具备很多 Web 的独特能力。
注意上图的含义:「标准化的 Web 软件」在分发、实现、运行这三个环节一定都必须是「标准」的,而「非标准的 Web 软件」可以在这三个中的任一环节引入「非标准」,也就是说,「非标准的 Web 软件」并不一定在所有环节都是「非标准」的,可以在某些环节保持「标准」。
1.1.4 标准化可以看到 Web Runtime 的本质和关键在于:
- 以上描述的所有架构设计
- 方方面面的标准化
这种架构设计带来了 Web 面向 end user、面向开发者的很多能力(其中很多能力是独有的,见后文),而标准化确保了这些独特能力在不同平台上的一致性,这种跨平台一致性本身也是 Web 独特能力的核心部分。
包含架构设计在内的这些标准化,并不是教条和瓶颈,可以围绕业务需求,有选择的、务实的做 trade-off 做取舍,引入非标准。但由于会损失 Web 独特能力,必须能换来更大的利益,才值得去搞非标准,而且最好是在一个逐步通向或兼顾标准化的长期战略中去搞非标准。
1.2 前端技术第二个核心要素是「前端技术」。
「Web Runtime」强调的是「消费侧」(应用的运行和使用)的 Web 技术,「前端技术」强调的则是「生产侧」(应用的开发实现)的 Web 技术。
前端技术几乎是在 Web Runtime 之上做开发所必须的垄断技术(一些来自其他技术栈的、小众的或历史遗留的解决方案和开发场景除外)。
反过来说,前端技术又不等同于 Web Runtime 的开发技术,也不等同于做 Web 应用的技术,而是一个可以说包罗万象无所不能纷繁复杂的大杂烩。
1.2.1 起源和分裂虽然是大杂烩,前端技术仍然可以追溯到两个根本的古老起源:
1、编写和维护符合 Web 标准的超文本文档的技术。
来自这个起源的后续发展,更侧重「内容」场景,更关注结构语义、外观、视觉效果、UI、UX。这个方向的前端开发者,更趋向 Designer 和创意内容制作者。