HTML
HTML是什么
- HyperTest:超文本-图片 标题 链接 表格等
- Markup Language:标记语言
<!doctype html>
doctype:标记了当前正在使用的html文件是什么样的html版本,浏览器会根据doctype选择使用的渲染模式
基本语法
标签分类
head标签
bady功能性标签
-
根元素
- html
-
元数据和脚本
- head
- title
- meta
- base
- link
- style
- noscript
- script
-
嵌入内容
- img
- area
- map
- embed
- object
- param
- source
- iframe
- canvas
- track
- audio
- video
-
文本语义
- span
- a
- rt
- rp
- dfn
- abbr
- q
- cite
- em
- time
- var
- samp
- i
- b
- sub
- sup
- small
- strong
- mark
- ruby
- ins
- del
- bdi
- bdo
- s
- kbd
- wbr
- code
-
分组内容
- br
- hr
- figcaption
- figure
- p
- ol
- ul
- li
- div
- pre
- blockquot
- dl
- dt
- dd
-
表单元素
- fieldset
- meter
- legend
- label
- input
- textarea
- form
- select
- optgroup
- option
- output
- button
- datalist
- keygen
- progress
-
文档模块
- body
- aside
- address
- h1
- h2
- h3
- h4
- h5
- h6
- section
- header
- nav
- article
- footer
- hgroup
-
表格元素
- col
- colgroup
- caption
- table
- tr
- td
- th
- tbody
- thead
- tfoot
-
交互元素
- menu
- commanc
- summary
- details
列表
-
<h2>世界电影票房排行榜</h2> <ol> <li>阿凡达</li> <li>泰坦尼克号</li> <li>复仇者联盟</li> </ol>
-
<h2>霸王别姬</h2> <dl> <dt>导演:</dt> <dd>陈凯歌</dd> <dt>主演:</dt> <dd>张国荣</dd> <dd>张丰毅</dd> <dd>巩俐</dd> <dt>上映日期:</dt> <dd>1993-01-01</dd> </dl>
链接
链接里的target 属性用于指定在哪里打开链接。当target属性被设置为"_blank"时,链接将在新的浏览器标签页或窗口中打开。
注:使用target="_blank"时,应始终与rel="noopener noreferrer"一起使用,以避免安全漏洞,特别是在包含用户生成内容的网站上。这可以防止新页面访问window.opener属性,从而无法操作原始页面。
引用
<cite>小王子</cite>
分行
<p><code>
你好
世界
</code></p>
常见的页面划分
DOM树
浏览器拿到html代码会进行解析,解析出一个DOM树
document:根节点
每个节点都是一个dom节点
语义化
-
语义:HTML中的元素,属性及属性值都拥有默写含义
-
开发者应该遵循语义来编写HTML
- lang属性表示内容所使用的语言
谁在使用我们写的HTML
- 开发者:修改,维护页面
- 浏览器:展示页面
- 搜索引擎:提取关键词,排序 优化搜索引擎会很重要
- 屏幕阅读器:给盲人读页面内容
语义化的好处
- 代码可读性
- '可维护性
- 搜索引擎优化
- 提升无障碍性
传达内容,而不是样式
如何做到语义化
- 了解每个标签和属性的含义 可以去看mdn的文档或者w3c上html5的规范
- 思考什么标签最适合描述这个内容
- 不使用可视化工具生成代码
HTML5的特性
语义化标签
额外的离线存储能力
IndexedDB
是一种在客户端存储大量结构化数据的Web API。以下是关于IndexedDB的一些关键信息:
-
定义: IndexedDB是一种底层API,用于在客户端存储大量的结构化数据,包括文件和二进制大型对象(blobs)。它使用索引实现对数据的高性能搜索。
-
功能:
- IndexedDB允许创建具有丰富查询能力的Web应用,无需考虑网络可用性,使得应用在在线和离线时都能正常运行。
- 它是一个事务型数据库系统,类似于基于SQL的关系数据库管理系统(RDBMS),但使用JavaScript对象而非固定列表。
- IndexedDB允许存储和检索用键索引的对象,可以存储结构化克隆算法支持的任何对象。
- 它支持异步操作,以免阻塞应用程序。
- IndexedDB遵守同源策略,只能在相同域名下操作数据。
-
应用场景:
- 离线应用:使用IndexedDB存储用户数据和应用状态,即使在没有网络连接的情况下也能继续操作。
- 渐进式Web应用(PWA):IndexedDB被用于存储应用程序的核心数据和用户的操作记录,使应用即使在离线或低带宽环境下也能正常运行。
- 高频率数据更新:IndexedDB支持高频率的数据写入和读取操作,适合用于存储和更新实时数据。
- 客户端数据缓存:将数据从服务器获取后,缓存到IndexedDB中,减少网络延迟。
- Web游戏数据存储:保存玩家的游戏进度、成就、个性化设置和资源文件。
- 用户个性化设置存储:保存用户的设置和偏好。
IndexedDB是一种强大的客户端存储解决方案,特别适合需要存储大量结构化数据的场景,尤其是那些需要支持离线模式或处理复杂查询的Web应用。
IndexedDB是异步的,数据的访问,打开还有读取都是通过异步的
PWA&
PWA(渐进式网络应用)
PWA是一种结合了网页和移动应用程序功能的技术概念,旨在提供类似于原生应用程序的用户体验,包括离线访问、推送通知、后台同步等功能,同时又具有网页的优势,如跨平台、无需下载安装等。
- Service Worker:PWA使用Service Worker作为核心功能之一,它允许应用在后台运行脚本,即使用户导航离开页面也能继续操作。Service Worker可以用来缓存资源,实现离线访问功能,这在某种程度上是“基于存储”的,因为它涉及到将数据存储在用户的设备上。
- 缓存API:PWA可以利用缓存API来存储应用程序的外壳、样式表、脚本和图像等资源,以便在离线状态下或网络条件不佳时使用。
- IndexedDB:虽然不是所有PWA都使用IndexedDB,但它是一种可选的技术,允许PWA在客户端存储大量结构化数据。
主要优势:
- 跨平台:PWA可以在不同的操作系统和设备上运行,无需为每个平台单独开发应用程序。
- 无需下载安装:PWA可以通过浏览器直接访问,无需从应用商店下载和安装。
- 离线访问:PWA可以在离线状态下继续访问先前缓存的内容,提供更好的用户体验。
- 推送通知:PWA可以向用户发送推送通知,类似于移动应用程序的通知功能。
激活态完成以后就可以进行拦截请求,可以把本地缓存的文件直接返回,这是明显提高页面访问效率的一种方式
AMP(加速移动页面):主要对于搜索引擎来用
AMP是一个由Google支持的开源项目,旨在为使用智能手机或平板电脑的人加速网页加载。
- 缓存:AMP页面可以通过Google的AMP缓存进行加速,这是一种内容分发网络(CDN),它会缓存AMP页面的内容,以便快速加载。这意味着AMP页面的数据存储在CDN服务器上,而不是直接在用户的设备上。
- 预加载和预渲染:AMP也利用预加载和预渲染技术来提高页面加载速度,但这更多是关于优化资源加载顺序和减少渲染时间,而不是直接的存储解决方案。
主要特点:
- 快速加载:AMP页面设计为快速加载,提供更好的用户体验。
- 简化的HTML和CSS:AMP使用精简版的HTML和CSS,以减少页面加载时间。
- AMP缓存:AMP页面可以通过Google的AMP缓存进行加速,这是一个代理型的内容分发网络,可以缓存页面内容。
笔记:
AMP格式
AMP格式的页面专为在移动设备上快速加载而设计,它们通过限制网页功能的复杂性来实现这一点。
AMP格式的关键特点:
-
轻量级组件:
- AMP页面使用轻量级的HTML组件,这些组件被优化用于快速加载。
-
仅限静态资源:
- AMP页面主要包含静态内容,动态内容和交互性受到限制,以确保页面加载速度。
-
缓存支持:
- AMP页面可以通过Google AMP缓存进行服务,这是一个全球内容分发网络(CDN),可以缓存页面以实现快速加载。
-
预加载和预渲染:
- AMP页面支持预加载和预渲染技术,这意味着页面的某些部分可以在后台提前加载,以便用户点击时能立即显示。
-
AMP JS库:
- AMP页面使用一个精简的JavaScript库,该库提供了基本的交互功能,如图像懒加载、视频播放等。
-
限制性HTML:
- AMP页面使用一种限制性的HTML格式,这意味着某些HTML标签和属性不被允许,以确保页面的快速渲染。
-
自定义样式:
- 尽管AMP页面对HTML有所限制,但开发者仍然可以使用CSS来自定义页面样式。
-
SEO友好:
- AMP页面对搜索引擎优化(SEO)友好,因为它们可以快速加载,有助于提高点击率和搜索引擎排名。
-
跨平台:
- AMP页面可以在任何支持Web的平台和应用上运行,包括社交媒体、消息应用和搜索引擎。
-
安全性:
- AMP页面要求使用HTTPS,以确保内容的安全传输。
AMP格式的页面特别适合内容驱动的网站,如新闻、博客和电子商务网站,它们可以从快速加载中获益。然而,对于需要复杂交互和动态内容的网站,AMP可能不是最佳选择。开发者可以使用AMP作为移动优化策略的一部分,以改善用户体验和页面性能。
基于此我们可以提高对于网站的曝光和访问速度
PWA与AMP的比较
- 用户体验:PWA提供更丰富的用户体验,类似于原生应用,而AMP主要关注页面的快速加载。
- 功能:PWA的功能更全面,支持离线访问和推送通知,而AMP主要针对内容快速展示。
- SEO:从SEO的角度来看,AMP页面可能会获得更多的Google青睐,因为它们可以提高点击率。PWA虽然对SEO没有直接优势,但更好的用户体验可以提高用户留存率,间接帮助SEO。
- 开发:PWA需要使用一组特定的技术构建,而AMP则是对现有网页代码的简化。
PWA和AMP都是为了提升移动设备的网页体验而设计的,但它们在功能、用途和开发方式上有所不同。PWA更侧重于增强的离线能力和丰富的交互功能,而AMP侧重于页面加载速度的优化选择,使用PWA还是AMP,取决于具体的项目需求和目标。
二进制
function loadAsText(file){
const reader = new FileReader();
//result contains loaded file
reader.onload = function(event){
console.log(event.target.result);
}
//输出文本字符串格式
reader.readAsText(file);
//输出二进制数组格式
reader.readAsArrayBuffer(file);
//输出base64编码字符串格式
reader.readAsDataURL(file);
}
API
全称为应用程序编程接口(Application Programming Interface),是一套预先定义的函数、协议和工具,用于构建软件应用程序。API作为软件组件之间交互的中介,允许不同的程序或服务之间进行通信和数据交换。简而言之,API定义了软件组件如何相互协作。
关键特点:
-
封装性:
- API隐藏了内部的复杂性,只暴露必要的接口给开发者。
-
模块化:
- API使得软件可以被分解成模块,每个模块通过API与其他模块交互。
-
跨平台:
- API允许不同平台和语言编写的程序之间进行通信。
-
可扩展性:
- 通过API,可以轻松地添加新功能或集成第三方服务。
-
维护和升级:
- API提供了一种方式,使得在不改变外部接口的情况下,可以更新和维护内部实现。
-
安全性:
- API可以包含安全措施,如认证和授权,以保护数据和系统资源。
-
文档:
- 良好的API通常伴随着详细的文档,指导开发者如何使用接口。
用途:
- 数据库API允许程序执行查询和操作数据。
- Web API(如RESTful API)允许网站和应用程序通过HTTP协议交换数据。
- 操作系统API提供了访问系统资源(如文件、内存)的方法。
- 硬件API允许软件控制和交互硬件设备。
关键API:
-
Geolocation API:
- 允许网页获取用户的位置信息。
-
Web Audio API:
- 允许精确控制音频的加载、合成、处理和播放。
-
Web Storage API:
- 包括
localStorage和sessionStorage,提供了一种在客户端存储数据的方式,替代了传统的cookies。
- 包括
-
File API:
- 允许网页访问用户文件系统,并读取文件内容,常用于文件上传功能。
-
Fetch API:
- 提供了一个更现代的、功能丰富的网络请求接口,用于异步请求资源。
-
Drag and Drop API:
- 拖拽(Drag)指的是用户通过鼠标点击并移动一个元素。
- 释放(Drop)指的是用户在拖动元素后释放鼠标按钮,将元素放置到一个目标位置。
Web Worker
是一种在浏览器中运行 JavaScript 的后台线程,它允许你在不影响用户界面线程的情况下执行长时间运行的脚本。
多线程的方式
Service Worker:拦截请求 通过自己的catch来返回一些缓存好的文件
Web Socket
WebSocket是一种网络通信协议,它提供了在单个TCP连接上进行全双工通信的能力。这意味着数据可以在客户端和服务器之间双向实时流动,无需客户端不断发送请求来检查更新。WebSocket API是HTML5中的一部分,它允许在Web页面中创建和管理WebSocket连接。
关键特性和用途:
-
全双工通信:
- WebSocket允许服务器主动向客户端发送消息,而无需客户端先发起请求。这使得WebSocket非常适合需要实时数据传输的应用。
-
持久连接:
- 一旦建立了WebSocket连接,它会保持开放,直到客户端或服务器决定关闭连接。
-
低延迟:
- WebSocket旨在提供低延迟的通信,这对于需要快速响应的应用(如在线游戏、实时聊天应用)非常重要。
-
较少的开销:
- 与HTTP相比,WebSocket在数据传输上具有更少的开销,因为它避免了HTTP请求/响应模型中的一些额外步骤。
-
浏览器支持:
- 现代浏览器普遍支持WebSocket API,使得开发者可以在Web应用中直接使用WebSocket。
-
使用场景:
- WebSocket适用于需要实时数据交换的应用,如在线协作工具、股票交易平台、实时游戏、聊天应用等。
-
创建和管理WebSocket连接:
- 在JavaScript中,可以使用
WebSocket对象创建一个新的连接,并通过send()方法发送消息,以及通过onmessage事件监听器接收消息。
- 在JavaScript中,可以使用
const socket = new WebSocket('ws://localhost:8080');
socket.addEventListener('open', (event)=>{
socket.send('Hello server!');
})
socket.addEventListener('message', (event)=>{
console.log('Message from server', event.data);
})
Shadow DOM
是一种特殊的节点
是一种浏览器技术,它允许开发者将一个Web组件的内部实现细节隐藏起来,创建一个封装的影子树(shadow tree)。这意味着组件的内部DOM结构不会被外部脚本访问或修改,从而避免了潜在的冲突和安全问题。
关键特性:
-
封装性:
- Shadow DOM提供了一种方式,使得组件的内部结构不会被外部DOM操作影响。
-
组件化:
- Shadow DOM是实现Web组件化的重要手段,它允许开发者创建可重用的自定义元素。
-
样式隔离:
- 在Shadow DOM中的样式不会泄露到外部DOM,同样,外部样式也不会影响Shadow DOM中的元素,除非明确指定。
-
DOM操作:
- Shadow DOM中的节点操作是独立的,不会影响外部DOM。
-
事件冒泡:
- 事件在Shadow DOM中冒泡,但不会冒泡到宿主元素之外,除非事件类型被定义为可以穿过Shadow DOM边界。
-
兼容性:
- Shadow DOM在现代浏览器中得到了较好的支持,但仍需检查特定浏览器的兼容性。
-
使用场景:
- Shadow DOM适用于创建自定义Web组件,如自定义下拉菜单、模态框、弹窗等。
-
如何使用Shadow DOM:
- 通过元素的
shadowRoot属性可以访问或创建一个元素的Shadow DOM。
- 通过元素的
// 创建一个新的div元素作为宿主元素
const hostElement = document.createElement('div');
// 附加一个Shadow DOM到宿主元素
const shadowRoot = hostElement.attachShadow({ mode: 'open' });
// 创建一些内容并将其添加到Shadow DOM中
const heading = document.createElement('h1');
heading.textContent = 'Hello from Shadow DOM';
shadowRoot.appendChild(heading);
// 将宿主元素添加到文档中
document.body.appendChild(hostElement);
h1元素就被封装在Shadow DOM中,不会影响外部DOM结构。
Web Components
是一种Web技术套件,它允许开发者创建可重用的自定义HTML元素,这些元素封装了自己的功能和样式。
Web Components 基于以下四种主要技术构建:
-
Custom Elements:
- 允许开发者定义自己的HTML标签,这些标签可以有自己的JavaScript行为和CSS样式。
-
Shadow DOM:
- 提供了一种将Web组件的内部实现细节隐藏起来的方式,确保样式和脚本不会泄露到外部DOM,同时外部脚本也无法访问组件的内部结构。
-
HTML Templates:
- 提供了一个用于定义HTML内容的模板,这些内容在页面加载时不会被渲染,直到被JavaScript激活。
-
HTML Imports:
- 允许开发者将HTML文档分割成多个文件,然后通过
<link rel="import">标签导入到其他HTML文件中。
- 允许开发者将HTML文档分割成多个文件,然后通过
优势:
- 封装性:Web Components 可以将功能、样式和行为封装在一个单独的组件中,避免全局作用域的污染。
- 可重用性:一旦定义了一个Web Component,它可以在任何支持Web Components的Web应用中重复使用。
- 模块化:Web Components 支持模块化开发,每个组件可以独立开发和测试。
- 性能:由于Shadow DOM的存在,Web Components 的样式计算和布局可以被限制在组件内部,减少了对整个文档的影响。
SVG&Canvas
是Web开发中常用的两种图形技术,它们各自有不同的特点和应用场景。
SVG(Scalable Vector Graphics):
- SVG是一种基于XML的矢量图形格式,允许在网页中嵌入高质量的图形。
- SVG图像以文本形式存储,可以缩放到任意大小而不会失真,因为它们基于数学描述而不是像素。
- SVG图形是可伸缩的,无需分辨率依赖,适合用于响应式设计。
- SVG可以与JavaScript结合,实现动画和交互效果。
- SVG可以直接嵌入HTML5中,无需使用外部文件。
- SVG广泛应用于网页设计、图标制作、数据可视化和其他图形相关的领域。
Canvas:
- Canvas是一个HTML元素,提供了一个通过JavaScript和HTML来绘制图形的方式。
- Canvas使用位图来处理图形和动画,这意味着它可以快速渲染大量的图形和动画,但可能会在缩放时失真。
- Canvas适合处理复杂的动画,因为它可以处理大量的图形和动画。
- Canvas与WebGL结合使用,可以实现高性能的图形和动画。
- Canvas在处理大量实时图形操作时性能较好,特别是在需要频繁重绘的场景中。
应用场景:
- SVG:适合用于图标、数据可视化、动画、游戏开发和设计原型等场景,特别是在需要高清晰度或无限缩放的场景中表现出色。
- Canvas:适合用于游戏、数据可视化、复杂的动画、3D渲染和视频等场景,尤其是在需要逐像素操作的复杂图形和动画中展现其优势。
WebGL&WebGPU
WebGL和WebGPU都是用于在Web环境中渲染3D图形的技术,但它们在设计理念、性能和应用场景上有所不同。
WebGL
特点:
- 跨平台性:WebGL可以在所有支持该技术的现代浏览器中运行,无需安装任何额外的软件或插件。
- 高性能:利用GPU进行硬件加速,实现高效的图形渲染,提供流畅的3D体验。
- 灵活性:支持多种3D模型格式,如OBJ、FBX等,满足各种应用场景的需求。
- 实时交互:能够实现实时的图形渲染和用户交互,提供丰富的交互体验。
应用场景:
- 在线游戏:在浏览器中运行3D游戏,降低游戏的准入门槛。
- 虚拟现实和增强现实:创建VR和AR应用,如虚拟旅游、虚拟博物馆、虚拟实验室等。
- 数据可视化和科学计算:创建交互式的数据可视化应用,适合展示大规模数据集。
- 模拟器和培训应用:开发飞行模拟器、驾驶模拟器及各类培训应用。
- 教育应用:创建交互式的3D教育应用,帮助解释和演示复杂概念。
- 历史和考古重建:3D历史遗迹和考古现场的重建,用于学术研究和公众教育。
WebGPU
特点:
- 低级别、跨平台:WebGPU是一种低级别的、跨平台的图形和计算API,允许Web应用程序直接访问GPU的底层硬件资源。
- 高效图形渲染和计算处理:提供了更高效的图形渲染和计算处理,提高应用程序的性能和体验。
- 支持现代GPU特性:WebGPU将在未来添加新特性,如光线追踪、阴影、反射、环境光遮蔽等。
- GPGPU计算:对通用GPU(GPGPU)计算有一流的支持,适用于机器学习等基于模型的计算。
应用场景:
- Web3D可视化:用于web3d可视化,提升前端大量数据计算的能力。
- 端侧智能:WebGPU提供的计算着色器,可以适配LLM的并行计算要求,实现端侧智能应用。
- XR交互:依托于Web平台的易传播特性,WebGPU将促进XR交互的发展。
- 高性能图形计算:WebGPU允许开发人员利用现代GPU的强大功能在Web上创建令人惊叹的视觉效果和复杂模拟仿真。
- 跨平台兼容性:WebGPU可以在不同浏览器和平台上协同工作同时保证运行效果的一致性。
- 面向未来:WebGPU旨在扩展并适应未来的GPU特性和技术特点。
- Metaverse:WebGPU可以使应用程序在Web上创建身临其境的交互式虚拟世界和体验。
WebGL适合于需要复杂3D图形渲染的应用程序,而WebGPU则适用于需要更高效的图形和计算处理的应用程序,特别是在现代GPU特性和GPGPU计算方面。
WebAssembly
WebAssembly(简称Wasm)是一种新的编码方式,它允许现代Web浏览器以接近原生性能运行代码。
技术特点:
- 高效性:WebAssembly旨在提供接近原生应用的性能,通过将C/C++等低级语言编译为WebAssembly二进制格式,开发者可以在浏览器中直接执行这些代码,无需通过JavaScript引擎进行解释执行,从而大大提高了运行效率。
- 可移植性:WebAssembly是一种可移植的二进制格式,可以在不同的浏览器和操作系统上运行,这意味着开发者可以使用同一种WebAssembly代码库,在不同平台上构建出具有相同性能表现的Web应用。
- 安全性:WebAssembly在浏览器的沙箱环境中执行,遵循同源策略和授权策略,确保了代码运行的安全性。此外,WebAssembly还提供了对内存和资源的严格控制,防止了恶意代码对系统的攻击。
- 多语言支持:WebAssembly并不依赖于特定的编程语言,开发者可以使用各种编程语言进行开发,并将其编译为WebAssembly模块。这种多语言支持为前端开发带来了更多的选择和灵活性。
应用场景:
- 游戏开发:WebAssembly的高性能和多语言支持为Web游戏开发带来了巨大的潜力。开发者可以使用C/C++等低级语言构建更加复杂和精美的游戏,并在浏览器中流畅运行,为用户提供更好的游戏体验。
- 图形处理:WebAssembly可以很好地处理音频和视频文件,因此在图形处理领域具有广泛的应用。通过WebAssembly编写的图形处理器可以让Web前端应用的处理速度更快,同时降低应用的大小。
- 计算机视觉:WebAssembly还可以用于计算机视觉领域。通过使用WebAssembly,可以实现一些计算密集型的算法,如语音识别、人脸识别等。这些功能可以被集成到Web前端应用中,为用户带来更加丰富的交互体验。
- 应用迁移:WebAssembly的出现为现有的应用迁移提供了更好的可能性。通过将现有的C/C++代码编译为WebAssembly模块,开发者可以将这些代码无缝地集成到现有的Web应用中,而无需重写大部分的代码。
- 跨平台应用:通过将现有的移动端应用代码编译为WebAssembly模块,开发者可以在Web平台上轻松地实现应用的跨平台运行。
- 人工智能与机器学习:随着人工智能和机器学习技术的不断发展,WebAssembly将成为这些技术在Web平台上实现的重要工具。通过使用WebAssembly,开发者可以构建出更加高效、强大的AI和ML应用。
- 云计算与边缘计算:WebAssembly的可移植性和高效性使其成为云计算和边缘计算领域的理想选择。通过将计算任务分配给WebAssembly模块,可以提高整个系统的运行效率和响应速度。
WebAssembly通过其高效性、可移植性、安全性和多语言支持等特点,在多个领域具有广泛的应用前景,并有望在未来引领Web性能革命,推动Web应用的持续发展。
ARIA
通过给标签添加一些额外的属性来使整个页面结构理解起来更容易
ARIA不会改变元素的功能或行为,而是通过提供额外的语义信息来增强网页的可访问性。
ARIA是为了弥补HTML和JavaScript在可访问性方面的不足而设计的一种辅助技术,它通过提供额外的语义信息来帮助残障用户更有效地使用Web应用程序。
了解ARIA并非只是为了供盲人阅读,它可以为我们设计UI系统提供指导意义