导图社区 前端体系
前端体系 - 编程基础知识点总结,前端体系包括css3,javaScript,HTML5三方面。详细的整理了编程基础前端体系的知识点。
编辑于2021-12-10 17:57:56前端基础
HTML5
BOM
浏览器对象模型:浏览器页面初始化时,会在内存中创建一个全局对象,用于描述当前窗口的属性和状态,BOM的核心对象是Window对象,其中包括了浏览器的六个核心模块
document
文档对象:渲染引擎解析代码时,会为每个元素生成一个dom对象,dom对象间相互关联形成dom树,document则是来描述dom树的状态和属性,并提供操作dom的API
frames
HTML子框架:在浏览器里嵌入另一个窗口,父框架与子框架有独立的作用域和上下文。
history
浏览器路由模式 history模式: 改变url地址信息,不刷新界面 (缺点怕刷新,f5,因为刷新是实实在在地去请求服务器的) - 切换历史状态 windows.history.go(-2); //后退两次 windows.history.go(2); //前进两次 windows.history.back(); //后退 windows.hsitory.forward(); //前进 - 修改历史状态 windows.history.pushState(state,title,URL) //向浏览器新增一条历史记录,但是不会刷新当前页面(不会重载), //state:对象,可以用作携带信息用, //title:目前来看没啥用一般为空或null, //URL:即要更改页面的URL,且必须同源,不能跨域; windows.history.replaceState(state,title,URL): //更改当前浏览器的历史记录,即把当前执行此代码页面的记录给替换掉,参数同上 - 历史信息查询 windows.history.length //历史记录数 windows.history.state //查询pushState或replaceState传入的state参数 - 历史事件 windows.onpopstate = function(event){/*...*/} //修改pushState或replaceState不触发 hash模式: hash模式背后的原理是onhashchange事件,可以在window对象上监听这个事件。 hash模式用#进行跳转控制,hash发生变化的url都会被浏览器记录下来,浏览器上的前进、后退都可以使用,并且 与浏览器交互时不传递#及#以后的路径。
以栈的形式保存着页面被访问的历史记录,页面前进即入栈,页面返回即出栈
location
提供了当前窗口加载的文档相关信息以及相关导航功能
navigator
用来描述浏览器本身,包括浏览器的系统、语言、名称、版本、用户特征字符串等信息
screen
提供了浏览器屏幕的相关属性(宽高、可用宽高)
元素
开始标签到结束标签中间的代码,构成整个html文档
DOM
1.处理html或wml文档,基于树结构的API(核心对象:document)
2.DOM模型会将整个html文档映射成树结构,每个树结点对应html的标签或标签文本,通过操作树结构来操作html文档
3.DOM定义树结点对象的行为,利用对象的属性和方法,可访问、修改、添加、删除树结构结点
事件系统
DOM模型将事件处理流程分为3个阶段:捕获阶段、事件处理、事件冒泡
1.触发点击事件后,顶层对象document会发送一个事件流,从最外层dom节点向目标元素传递,直到到达目标元素
2.到达目标元素,执行目标元素绑定的事件,无则不执行
3.事件流从目标元素向最外层传递,途径元素有绑定事件,则执行
HTML渲染流程
1.html文档解析生成DOM树模型
2.css文件解析生成CSSOM树
3.dom树与css树进行附着,生成渲染树
4.布局,为每个节点分配屏幕上的显示坐标
5.绘制,渲染引擎遍历渲染树,将每个节点绘制出来
重绘与回流
1.添加、删除元素 (回流+重绘) 2.隐藏元素 display:none (回流+重绘) visibility:hidden (重绘) 3.移动元素,改变元素top left值 (回流+重绘) 4.改变浏览器大小、浏览器字体大小 (回流+重绘) 注意:tansform 操作不会引起回流和重绘,是一种高效的渲染。
1.回流:渲染树中的一部分应因为元素的规模尺寸、布局、隐藏等改变而需要重新构建称为回流
2.重绘:渲染树上的元素属性的改变,而这些属性只会影响外观、风格,不会影响布局,就称为重绘
本地存储
cookie
最原始的存储方式,键值对的形式保存,可以设置时间,不适合大量数据存储(4k),因为每请求一次,都会携带cookie发送给服务器。使得效率不高
html5提供新方法
localStorage
键值对的形式保存,永久存储,大小5M
sessionStorage
键值对的形式保存,生命周期会话级,即窗口关闭后,sessionStorage数据会被清除
浏览器缓存机制
指通过HTTP协议头里的Cache-Control(或Expires)和 Last-Mondified(或Etag)等字段来控制文件的缓存
Cache-Control:用于控制文件在本地缓存的有效时长。常见的,Cache-Control:max-age=600表示文件在本地要缓存,有效时长为600s。在接下来600s内,如果有请求这个资源,浏览器不会发http请求,而是直接使用本地缓存的文件(强缓存:设置文件缓存时间)
Last-Mondified:标记文件在服务器上的最新更新时间。下次请求,如果文件缓存过期,浏览器通过If-Modified-Since带上这个字段,发给服务器,服务会进行比较来判断文件是否修改,如果修改,返回200和最新的文件,没有修改返回304告诉浏览器继续使用缓存文件(协商缓存:判断文件是否修改)
Cache-Control通常与Last-Mondified一起使用,一个控制缓存时间,一个判断缓存过期后服务器文件是否过期
Html5离线缓存
Application Cache,是从浏览器的缓存中分出来的一块缓存区,如果要在这个缓存中保存数据,可以使用一个描述文件,列出要下载好缓存的资源
CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)
优势
离线浏览 - 用户可在应用离线时使用它们 速度 - 已缓存资源加载得更快 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。
语义化
1.seo优化 2.便于开发,易于维护
css3
CSSOM
css对象模型,是对css样式表的对象化表示,同时还提供了相关API来操作css样式
选择器
通过某种规则来匹配相应的标签,并为其设置css样式
布局
盒子布局(盒模型)
浮动
定位
flex
css3动画
transition
animation
BFC
是一个独立的布局环境,有着自己的渲染规则
如何创建BFC
1.float值不为none
2.position的值不为relative和static
3.display的值为inline-block,flex,table-cell等
4.overflow的值不是visible
BFC的利用
1.清除浮动 -(计算BFC的高低时,浮动元素也计算在内)
2.两栏布局 - (浮动元素与BFC的区域不会重叠)
3.避免magin重叠 - (属于同一个BFC里的相邻BOX的margin会发生重叠)
javaScript
类型
JS数据类型共有六种,分别是 String、Number、Boolean、Null、Undefined 和 Object 等, 另外,ES6 新增了 Symbol 类型。其中,Object 是引用类型,其他的都是原始类型(Primitive Type)。
-每一个Symbol的值都是不相等的,所以Symbol作为对象的属性名,可以保证属性不重名。 -Symbol 值作为属性名时,该属性是公有属性不是私有属性,可以在类的外部访问。但是不会出现在 for...in 、 for...of 的循环中,也不会被 Object.keys() 、 Object.getOwnPropertyNames() 返回。如果要读取到一个对象的 Symbol 属性,可以通过 Object.getOwnPropertySymbols() 和 Reflect.ownKeys() 取到。
原型链
每个对象都有一个私有属性(_proto_)指向该构造函数的prototype属性,称为原型对象。同样原型对象也有自己的原型对象,层层向上,直到一个对象的原型对象为null。当我们访问一个对象的属性时,如果对象本身没有,就会延着_proto_原型链依次找下去。
继承
1.原型链继承(让子实例原型等于父实例)
缺点:父类实例共享。原型上的属性时共享的,一个实例改变了原型上的父实例属性,另一个实例访问到的是改变了的属性。
2.借用构造函数(通过call\aply将父类构造函数引入子构造函数,让其自执行)
只继承了父实例上的属性,但不会有实例共享的问题
3.组合继承(借用构造函数+原型链继承 - 常用)
父实例属性通过借用构造函数的形式继承解决实例共享的问题;再让子构造函数原型指向父构造函数的原型(也可以指向父实例,但会调用两次父构造函数)
作用域
当前执行的上下文。值和表达式在可见或在可访问到的上下文。通常子作用域访问父作用域,会延着作用域链式的查找,父作用域不能访问到子作用域
闭包
当创建一个函数,闭包同时也被创建出来,特点是,闭包可以在内层函数中访问到外部函数的作用域(函数和函数外部周围环境的引用形成的捆绑),可理解成函数内部到函数外部连接起来的一座桥梁
作用
可以利用闭包间接实现函数外部访问函数内部变量
维持函数内部的变量。通常来说,当我们执行函数时,首先会申请一个块内存用来保存内部变量,待函数执行完毕,该内存会被释放掉(垃圾回收机制:标记清除法-标记阶段(遍历全局标记可访问变量)、清除阶段(周期性遍历全局清除未使用变量))
注意
由于闭包会把变量维持再内存中,会造成内存消耗,如果滥用闭包会导致性能问题
事件循环
1.整Javascript(作为一个宏任务)在主线程执行:同步任务直接执行,异步任务(宏任务setTimeout等、微任务Promise等)进入任务队列
2.Javascript作为宏任务执行结束,判断任务队列是否存在微任务,有则依次进入主线程执行完,确保微任务队列为空,再执行宏任务
3.微任务执行完,进入下一个循环,任务队列上的宏任务进入主线程执行(可能会产生新的微任务进入任务队列),执行完去清除任务队列上的微任务,依次循环,直到任务队列被清空
异步
ajax
setTimeout/setInterval
Promise
async/await