目录
相关
1)说一下对和(和) 的认识和区别?
2)和@的区别
3)浏览器如何实现不同标签页的通信?
4)的优缺点
5)
6)做项目用到哪些5新特性和3新特性?
7)用和写过什么?
8)如何解决页面内容加载缓慢的问题?
9)的特点
10)页面渲染过程
11)网页上哪里可以看到请求的所有信息
12)5的新特性ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0;
13)和的区别
14)页面之间是怎么传参数的?
15)如何在浏览器查看和清除保存的数据?
16)对5新增的语义化标签的理解?
相关
17)选择器的优先级排序,怎么计算权值?
18):和:的区别
19)的继承选择器,.. 和. > .的区别?两个同级类选择器连着一起写有什么作用?(权值相加)
20)的引用方式有哪些?它们的区别?
21)有哪些选择符?可继承的属性有哪些?3新增的伪元素有哪些?优先级的计算
22)和的区别?
23)如何实现水平、垂直居中?
24)实现左侧边栏固定,其他内容自适应?
25)3的新特性
26)了解过哪些页面布局?
27 用做过什么?做过哪些动画?
28 写一个数组?
29)出现很小的小数手机上会发生什么,
30 什么时候用
31 和
32 移入图片让那个图片慢慢放大
33 盒子模型概念
34 引用样式的方式有哪几种?他们的优先级排序怎么样?
35 ,,,%,,
36 的值和作用
37列举两种清除浮动的方法(代码实现或者描述思路)
38 盒子模型(怪异模型)
39 谈谈 ,ꀯ0;
40 和有什么区别?
41 代码实现3栏效果,左右两栏固定宽度,中间栏随着浏览器宽度自适应变化
42 选择器的权重
43 之间的区别 的属性有哪些?
44 3中的选择器
46 用实现一个背景色为红色,半径为200的圆,并设置不停的上下动画
以及6相关
ꁷ和的区别?
ꁳ的数据类型
ꁳ 的继承实现方式有哪些,列举两个例子
是什么?
ꀯ7528;什么会导致内存泄漏?
ꁳ深度克隆的代码实现?
ꀯ540;源策略,跨域,后台如何解决跨域,有哪些标签可以跨域
6
自己封装一个方法
ꁳ用过哪些方法?
ꁹ?
ꀯ896;摸有几个事件?
什么时候会发生跨域问题
ꀯ533;名函数
ꁝ指向问题
ꁓ,, 三者的区别
ꀯ7528;实现双向绑定!
ꁊ的实现
的实现
ꀯ5728;数组上新增一个方法,实现。
ꀯ671;望:[1,2,3].() //输出 [1,2,3,1,2,3]
ꀷ#47;用闭包实现一个方法,第一次调用返回1,第二次返回2,第三次3,以此类推。
ꀷ#501;装一个函数,参数是定时器的时间,.执行回调函数。
ꀯ84;一说前端性能优化有哪些方法?
ꀯ400;个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更好的体验。
ꀷ和 ?
怎么去判断出来数组里面值为1的元素
ꀯ6709;一个数组,怎么去修改每一个值?
ꀯ6570;组去重
ꀯ7;计字符串中出现最多的字符
垃圾回收机制
原型、原型链
作用域链
闭包
继承方法
辗转相除法
数组转字符串
二级下拉菜单
图片预加载和懒加载?
() ()
用法
-8编码汉字占多少个字节
对数组的操作,包括向数组中插入删除数据
两种定时器,和。因为是只执行一次的,如果要执行多次怎么做。(答案:设置一个回调函数,多次调用,大概是这样,你可以去查查)
内存回收机制
是什么?能解决什么问题?
编程:连接两个数组并返回?
冒泡排序?
创建新数组,向数组插入数据
6新特性
对数组有哪些操作方法
什么是,可以用来做什么
讲下你做轮播图的思路,无缝轮播
的选择器
数据类型
减少页面加载时间的方法
怎么理解模块化
什么是闭包,有什么作用?
定时器 和的区别,如果用实现每隔一定的时间就执行一次,怎么实现
手机的正则表达式(以1开头的11位数字)
结构的代码,写原生实现点击某个就弹出对应的索引值
对数组进行随机排序, 要求数组中的每个元素不能停留在原来的位置
代码实现方法,将有效的字符串转换成对象
原生的变量类型有哪些?6新增哪几个变量类型?
的数组方法有哪些?
6的有哪些扩展?新增的数组方法有哪些?用什么方法连接两个数组?函数扩展中的箭头函数中的所指向的是什么?一般函数的指向的又是什么?
用什么方法判断是否是数组?又用什么方法判断是否是对象?
相关
浏览器
相关
相关
4ꀩ.和?
数据库相关
其他
ꁼ 是一个后端存储空间
2. / / 的区别
存储大小
4ꀯ0;
5ꀖ 通讯相关
随请求携带
不会自动携带
操作相关
操作复杂,没有 ,前后端都可以操作
操作简单,有 ,只能前端操作
存储格式
:字符串格式
: 键值对
时效相关
:默认会话级别,可以手动设置
:的存储是永久性的,只有在手动删除或者浏览器被卸载后才会被清除, 是会话,当窗口或者页面关闭后会被清除
3. 和 的区别
跨页面通讯能力
随便跨页面
只是在本页面跳转可以通讯
时效性
是永久
是会话
共同点
不能存储其他数据类型,只能存储字符串数据类型
如果一定要存储其他数据类型,转成 格式存储
ꀖ 都知道 ,外部引入 有2种方式,标签和@。
但是它们有何本质区别?
本人项目中多数情况都使用方式,但见过某些项目人,自以为@高大上类似6,极力吹捧使用@,就此找了一些资料对此进行比较说明:
先上结论
慎用@方式。可以避免考虑@的语法规则和注意事项,以及不合理的引入顺序导致的资源文件下载顺序混乱和请求过多。
区别1:
是标签,除了加载外,还可以定义等其他事物如引入网站标题图标;@属于范畴,只能加载。
区别2:
引用时,在页面载入时同时加载;@需要页面网页完全载入以后加载。所以会出现一开始没有样式,闪烁一下出现样式后的页面。
区别3:
是标签,无兼容问题;@是在2.1提出的,低版本的浏览器不支持。
区别4:
支持使用控制去改变样式;而@不支持。
顺便总结下在中有四种引入方式:
内联样式
内联也可称为行内或者行级,它直接在标签内部引入,显著的优点是十分的便捷、高效
示例:></p>
这通常是个很糟糕的书写方式,它只能改变当前标签的样式,如果想要多个
拥有相同的样式,你不得不重复地为每个
添加相同的样式,如果想要修改一种样式,又不得不修改所有的 中的代码。很显然,内联方式引入 代码会导致 代码变得冗长,且使得网页难以维护。
嵌入样式
嵌入方式也称页级或内部,整体是放在标签里边的,在标签里边定义样式,作用范围和字面意思相同,仅限于本页面的元素;如果你写的代码超过了几百行,想想每次把代码页拉到最上边都很烦,所以它在可维护性方面较差。
示例:
嵌入方式的 只对当前的网页有效。因为 代码是在 文件中,所以会使得代码比较集中,当我们写模板网页时这通常比较有利。因为查看模板代码的人可以一目了然地查看 结构和 样式。因为嵌入的 只对当前页面有效,所以当多个页面需要引入相同的 代码时,这样写会导致代码冗余,也不利于维护。
外部样式
链接方式指的是使用 头部的 标签引入外部的 文件。
示例:
这是最常见的也是最推荐的引入 的方式。使用这种方式,所有的 代码只存在于单独的 文件中,所以具有良好的可维护性。并且所有的 代码只存在于 文件中, 文件会在第一次加载时引入,以后切换页面时只需加载 文件即可。
导入样式
导入方式指的是使用 规则引入外部 文件。
示例:
或者写在样式中
@ “-8”;
@ (.);
{ :0; :0;}
.- { :#999;}
加载过程:
1) 加载-结构
2)和
3)图片和多媒体
4)加载事件触发
总结: 和@都没有放置顺序的要求,但是不同的放置位置可能会造成效果显示的差异。对于,无论放到哪个位置,都是一边加载数据,一边进行优化,视觉感受很好;而对于@,放置到哪里,才从哪里开始加载样式,即先加载数据,然后加载样式,如果网速不佳,可能会造成只有数据出来,而样式一点点加载的效果。并且在同一个页面中,调用两种方式,永远比@优先级高。
在项目中使用的时候,一般在页面中调用方式为,并且放在标签中;使用@除了在文件中,在页面调用时,一般加载第三方的样式会使用到,并且需要放置在页面的底部,不会影响自己的网站。
ꀩ#0;ꀯ0;ꀯ0;ꀯ0;
浏览器内多个标签页之间通信,通俗的讲就是浏览器中开了多个窗口,在其中一个窗口做了一些行为等其他窗口不用刷新也能有相关表现。
一、+方式
要想在多个窗口中通信,通信的内容一定不能放在对象中,因为是当前窗口的作用域,里面的内容只属于当前窗口。而是浏览器的本地存储机制,和窗口无关。
将要发送的信息写入:
在另一个页面读取:
ꀯ0; = .(&;#&;);
ꁏ (){
ꀯ0; ꁿ = &;{"&;+..(/=/,&;":"&;).(/;+/,&;", "&;)+&;"}&;;
ꀩ#0; = .();
ꀩ#0; [];
ꂆ
ꁼ((){
ꀩ#0; . = ("1");
ꂆ500);
但是由于仅仅从读取信息不能实时更新,需要手动刷新,因此采用定时器解决,将读取信息的代码封装成一个函数,在定时器内调用即可
缺点:
1)空间有限,容量4
2)每次请求都会把当前域的发送到服务器上,浪费带宽
3)评率设置过大会影响浏览器性能,过小会影响时效性
优点:每个浏览器都兼容
二、协议
是一种网络通信协议,因为有缺陷,通信只可以由客户端发起,服务器无法主动向客户端发送消息,但如果这时服务器有连续变化的状态,那么就只能使用轮询(每个一段时间,就发出一个询问)的方式来询问。因为拥有全双工(-)通信自然可以实现多个标签页之间的通信。
发送方先发送消息到,然后服务端再实时把消息发给接收方
用法:新建文件夹,在该目录下打开终端,运行 (安装及配置步骤)初始化一个简单的项目(因为需要引入包),一直按回车到结束就初始了一个简单的项目。再安装包,依旧在当前目录下的终端运行 - ,在目录下新建.、.、.文件
三、 四、5浏览器新特性——
的升级版,只能在一个窗口内使用,而可以在多个窗口之间通信
也是纯客户端的,没有服务端参与
在客户端有一个自己维护的对象.,消息存储在.的中
不如的是接收消息不是自动的,也要用定时器实时从.中获取消息
ꀯ0;
一、的优点:
1、 能够原封不动地把嵌入的网页展现出来。
2、 如果有多个网页调用,只需要修改的内容,就可以实现对调用的每一个页面内容的更改,方便快捷。
3、 网页如果为了统一风格,头部和版本都是一样的,就可以写成一个页面,用来嵌套,可以增加代码的可重用性。
4、 如果遇到加载缓慢的第三方内容如图标和等,可以用来解决。
二、的缺点:
1、 会产生很多页面,不容易管理。
2、 在几个框架中都出现上下、左右滚动条时,这些滚动条除了会挤占已经非常有限的页面空间外,还会分散访问者的注意力。
3、 使用框架结构时,必须保证正确设置所有的导航链接,否则会给访问者带来很大的麻烦。比如被链接的页面出现在导航框架内,这种情况下会导致链接死循环。
4、 很多的设备(手机)无法完全显示框架,设备兼容性差。
5、 框架页面会增加服务器的请求,对于大型网站是不可取的。
现在基本上都是用来代替,已渐渐退出了前端。
介绍
1.是5的一个新标签,属于5的新特性
2.标签是一个图形的容器,简单点说就是一块画布,你可以在上画矩形,圆形,三角形,折线等等,也可以用来画
3.它是通过来画的,即脚本绘制图形
可以用来干啥呢?
1.制作网页游戏(但是如果代码写的不咋的游戏可能会非常卡)
2.数据可视化(这么说你可能不明白,但我告诉你就是基于)
3.的动态效果非常适合用制作
4.还可以用来内嵌一些网页
1 5 的新特性
增加了新标签、新表单和新特性;
9以上才兼容,如不考虑兼容问题,则可以大量使用(如端);
1 重点是常用新特性;
1.1 5 新增的语义化标签
对于搜索引擎来说是没有语义的;
:头部标签
:导航标签
:内容标签
:定义文档某个区域
:侧边栏标签
:尾部标签
主要是针对搜索引擎的
可以多次使用
在9中需要转为块级元素才能使用
1.2 5 新增的多媒体标签
1 音频:;
有 3 三种格式;
语法
></p>
1
属性
视频就绪自动播放(谷浏览器需要添加来解决自动播放问题);
向用户显示播放器控件;
播放完是否继续循环播放
把音频和视频自动播放禁止了;
2 视频:;
尽量使用 4;
另外还有 格式;
语法:
></p>
1
属性
视频就绪自动播放(谷浏览器需要添加来解决自动播放问题);
向用户显示播放器控件;
播放完是否继续循环播放
(预先加载视频) (不应加载视频)
加载等待的画面图片
静音播放
视频静音后可以自动播放;
从而不再使用等插件
1.3 5 新增的 类型
验证的时候必须添加 表单域;
使用 进行提交;
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ9650;制用户输入必须为 类型
=""ꀯ0; ꀯ630;交按钮
1.4 5 新增的表单属性
属性ꀯ0; ꀯ503;ꀯ0; ꀯ84;明
ꀯ0; ꁻꀯ0; ꀯ8868;单拥有该属性表示其内容不能为空,必填
ꀯ0; ꀯ630;示文本ꀯ0; ꀯ8868;单的提示信息,存在默认值将不显示
ꀯ0; ꁊꀯ0; ꀯ81;动聚焦属性,页面加载完成后聚焦到指定表单
ꀯ0; ꁸ/ꀯ0; ꀯ64;览器基于之前输入的值,显示出可能的选项,
默认已经打开,关闭=""
需要放在表单内,加上属性,同时提交成功
ꀯ0; ꁶꀯ0; ꀯ53;以多选文件提交
``` / 设置占位符颜色 / :: { : ; } ```
2 3
存在兼容性问题
2.1 属性选择器
属性选择器可以根据元素特定属性来选择元素,这样就可以不用借助于类或者 选择器;
权重为 0, 0, 1, 0;
类选择器、属性选择器、伪类选择器权重相同;
[=""] {
ꀩ#0; : ;
ꀩ#0; : 3 ;
}
选择符ꀯ0; ꀯ780;介
[]ꀯ0; ꀯ5339;配有 属性的 元素
[=""]ꀯ0; ꀯ5339;配有 属性且属性等于 的 元素
[^=""]ꀯ0; ꀯ5339;配有 属性且值以 开头的 元素
[$=""]ꀯ0; ꀯ5339;配有 属性且值以 结尾的 元素
[=""]ꀯ0; ꀯ5339;配有 属性且值中含有 的 元素
2.2 结构伪类选择器
根据文档结构来选择元素,常用于根据父级选择器里面的子元素;
/ 选择第一个孩子,且必须是 /
:- {
ꀩ#0; : ;
}
:-(2) {
ꀩ#0; : ;
}
// 使用 选出奇数行
:-() {
ꀩ#0; -: ;
ꀩ#0; : ;
}
:-() // 使用 选出奇数行
:-() // 使用 选出偶数行
:-() // 是选择所有
可以被公示替代
2 取出偶数项
2 + 1 取出奇数项
5 取出 5 的倍数项
+ 5 从第五项开始
- + 5 前五项
数字可以是任何数字
:-() 会包含所有标签类型,同时需要满足设置的标签类型,都满足方能选中;
:--() 只包含指定元素,如此处为;
选择符ꀯ0; ꀯ780;介
:-ꀯ0; ꀯ5339;配父元素中的第一个子元素
:-ꀯ0; ꀯ;匹配父元素中的最后一个子元素
:-()ꀯ0; ꀯ;匹配父元素中的第 个子元素
:--ꀯ0; ꀯ6307;定类型 的第一个
:--ꀯ0; ꀯ6307;定类型 的最后一个
:--()ꀯ0; ꀯ6307;定类型 的第 个
2.3 伪元素选择器
伪元素选择器可以用于利用 创建新标签元素,不需要 标签,从而简化 结构;
和 创建的元素是行内元素;
新创建的元素在文档树中是找不到的;
语法:::();
和 必须有 属性;
伪元素选择器和标签选择器一样,权重为0, 0, 0, 1;
选择符ꀯ0; ꀯ780;介
::ꀯ0; ꀯ5728;元素内部的前面插入内容
::ꀯ0; ꀯ5728;元素内部的后面插入内容
{
ꀩ#0; : 200;
ꀩ#0; : 200;
ꀩ#0; -: ;
}
:: {
ꀩ#0; / 是必须要写的,元素内容 /
ꀩ#0; : &; 伪元素选择器&;;
}
:: {
ꀩ#0; / 是必须要写的,元素内容 /
ꀩ#0; : &; 伪元素选择器&;;
}
必须填写,可以写空字符串;
在伪元素中使用 :
@- {
ꀩ#0; -: "";
ꀩ#0; : (&;.?=&;);
ꀩ#0; / 9 /
ꀩ#0; : (&;.?=#&;) (&;-&;),
ꀩ#0; ꀩ#0; / 6-8 /
ꀩ#0; ꀩ#0; (&;:/--2;=-8;64,09225/79+1031/97001///085+789324735+773716140/156546289/51284057216366+82379753542369899217212+122/6+2+889+6604/943/1549916109805+6602398800120+/10&;) (&;2&;),
ꀩ#0; ꀩ#0; (&;.?=&;) (&;&;),
ꀩ#0; ꀩ#0; (&;.?=&;) (&;&;),
ꀩ#0; ꀩ#0; / , , , , , 4.2+ /
ꀩ#0; ꀩ#0; (&;.?=#&;) (&;&;);
ꀩ#0; / 4.1- /
}
. {
ꀩ#0; -: "" !;
ꀩ#0; -: 16;
ꀩ#0; -: ;
ꀩ#0; ---: ;
ꀩ#0; ----: 0.2;
ꀩ#0; ----: ;
}
:: {
ꀩ#0; : ;
ꀩ#0; -: "" !;
ꀩ#0; -: 16;
ꀩ#0; -: ;
ꀩ#0; ---: ;
ꀩ#0; ----: 0.2;
ꀩ#0; ----: ;
ꀩ#0; / : ; /
ꀩ#0; : &;77&;;
}
原本直接放在“ ”类中的样式放在对应伪类中,然后将“&#”改为“”即可(如 ,在中变为 77);
2.4 3 盒子模型
3 中可以通过 - 来指定盒模型,分别是 -、-;
这样就可以该表计算盒子大小的方式;
可以分成两种情况:
1 -: - 盒子大小为 + + (默认);
2 -: - 盒子大小为 ;
.2 {
ꀩ#0; : 200;
ꀩ#0; : 200;
ꀩ#0; -: ;
ꀩ#0; : 5 ;
ꀩ#0; : 15;
ꀩ#0; -: -;
}
使用通配符进行统一默认配置;
{
ꀩ#0; : 0;
ꀩ#0; : 0;
ꀩ#0; -: -;
}
2.5 3 其他特性(了解)
1 3 滤镜 ;
用于将模糊或颜色偏移等图形效果应用于元素;
: 函数(); ꀩ#0;ꀖ 例如:: (5); 模糊处理 数值越大越模糊
2 3 函数:
() 使属性值时执行一些计算;
: (100% - 80);
1
上例中使得子元素永远比父元素窄 80;
可以使用运算符
2.6 3 过渡
在不使用 动画或 的情况下,配置元素样式变化过度效果;
主要是过渡效果;
与 : 搭配使用;
: 要过渡的属性 花费时间 运动曲线 何时开始;
1
要过渡的属性:如果是所有属性,可以写 ;
花费时间:单位为秒,必须写单位,如 0.5;
运动曲线:可以省略;
:匀速;
:缓慢减速;
-:加速;
-:减速;
--:先加速后减速;
何时开始:用于延迟,可以省略;
{
ꀩ#0; : 200;
ꀩ#0; : 100;
ꀩ#0; : -;
ꀩ#0; -: ();
ꀩ#0; -: 100% 100%;
ꀩ#0; : - 1, 1;
}
: {
ꀩ#0; -: ();
ꀩ#0; : 400;
}
改变多个属性则用逗分开,或用;
直接用 最常见;
用作临时交流的留言板或是交流记录
用做过记住用户名和的功能,做过小游戏最高分和排行榜
一、优化图片
几乎没有哪个网页上是没有图片的。如果你经历过56猫的年代,你一定不会很喜欢有大量图片的网站。因为加载那样一个网页会花费大量的时间。
即使在现在,网络带宽有了很多的提高,56猫逐渐淡出,优化图片以加快网页速度还是很有必要的。
优化图片包括减少图片数、降低图像质量、使用恰当的格式。
1、减少图片数:去除不必要的图片。可以将大量的背景图整合成一张雪碧图
2、降低图像质量:如果不是很必要,尝试降低图像的质量,尤其是格式,降低5%的质量看起来变化不是很大,但文件大小的变化是比较大的。
3、使用恰当的格式:请参阅下一点。
因此,在上传图片之前,你需要对图片进行编辑,如果你觉得太麻烦,可以试试一些在线图片编辑工具。懒得编辑而又想图片有特殊的效果?可以试试用过调用来实现图片特效。
二、图像格式的选择
一般在网页上使用的图片格式有三种,、、。三种格式的具体技术指标不是这篇文章探讨的内容,我们只需要知道在什么时候应该使用什么格式,以减少网页的加载时间。
1、:一般用于展示风景、人物、艺术照的摄影作品。有时也用在电脑截屏上。
2、:提供的颜色较少,可用在一些对颜色要求不高的地方,比如网站、按钮、表情等等。当然,的一个重要的应用是动画图片。就像用制作的倒映图片。
3、:格式能提供透明背景,是一种专为网页展示而发明的图片格式。一般用于需要背景透明显示或对图像质量要求较高的网页上。
三、优化
叠层样式表让网页加载起来更高效,浏览体验也得到提高。有了,表格布局的方式可以退休了。
但有时我们在写的时候会使用了一些比较罗嗦的语句,比如这句:
以下为引用的内容:
-: 10;
-: 20;
-: 10;
-: 20;
你可以将它简化为:
: 10 20 10 20;
又或者这句:
以下为引用的内容:
></p>
></p>
></p>
></p>
可以用来包含:
以下为引用的内容:
></p>
></p>
></p>
></p>
></p>
简化能去除冗余的属性,提高运行效率。如果你写好后懒得去做简化,你可以使用一些在线的简化工具,比如。
四、网址后加斜杠
有些网址,比如"../220",当服务器收到这样一个地址请求的时候,它需要花费时间去确定这个地址的文件类型。如果220是一个目录,不妨在网址后多加一个斜杠,让其变成这样服务器就能一目了然地知道要访问该目录下的或文件,从而节省了加载时间。
五、标明高度和宽度
这点很重要,但很多人由于懒惰或其它原因,总是将其忽视。当你在网页上添加图片或表格时,你应该指定它们的高度和宽度,也就是和参数。如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。
下面是一个比较友好的图片代码:
当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。
六、减少请求
当浏览者打开某个网页,浏览器会发出很多对象请求(图像、脚本等等),视乎网络延时情况,每个对象加载都会有所延迟。如果网页上对象很多,这可以需要花费大量的时间。
因此,要为请求减负。如何减负?
1、去除一些不必要的对象。
2、将临近的两张图片合成一张。
3、合并
看看下面这段代码,需要加载三个:
以下为引用的内容:
我们可以将其合成一个:
从而减少请求。
七、其它小技巧(译者添加)
1、去除不必要加载项。
2、如果在网页上嵌入了其它网站的,如果有选择余地,一定要选择速度快的。
3、尽量用图片代替,这对也有好处。
4、有些内容可以静态化就将其静态化,以减少服务器的负担。
5、统计代码放在页尾。
6、尽量不要用一个很小的图片当背景,这样做会加大客户端处理时间 7,静态资源使用ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ,增加服务器带宽ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꁉ#0;如果用户多的话,使用高并发ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0;
一、的特点:
1、不可跨域
2、存储在浏览器里面
3、有数量与大小的限制
1)数量在50个左右
2)大小在4左右
4、的存储时间非常灵活
5、不光可以服务器设置(用-),也可以客户端设置。
.
:
二、的属性
1、 的名字,唯一性
2、 的值
3、 设置在哪个域名下是有效的
4、 的路径
5、 的过期时间
6、- 的有效期,
值:-1 临时,0有效期够了的 ,正数存活周期
7、 有这个标记的,前端是无法获取的
8、 设置只能通过协议传输
9、 设置在跨域请求的时候不能被发送。
ꀖ 1、解析标签,构建树
ꀩ#0; ꀩ#0; 文档中的所有内容皆是节点,各节点之间拥有层级关系,如父子关系、兄弟关系等,彼此相连,构成树。最常见的几种节点有:文档节点、元素节点、文本节点、属性节点、注释节点。
节点树中节点与文档中内容一一对应,树构建过程:读取文档,将字节转换成字符,确定(标签),再将转换成节点,以节点构建 树。
2、解析,构建树
ꀩ#0; ꀩ#0; 文档中,所有元素皆是节点,与文件中的标签节点一一对应。中各节点之间同样拥有层级关系,如父子关系、兄弟关系等,彼此相连,构成树。
在构建树的过程中,在 文档的 标签中遇到 标签,该标签引用了一个外部样式表。由于预见到需要利用该资源来渲染页面,浏览器会立即发出对该资源的请求,并进行树的构建。
树构建过程与树构建流程一致:读取文档,将字节转换成字符,确定(标签),再将转换成节点,以节点构建 树。
3、把和组合成渲染树( )
ꀩ#0; ꀯ0;
ꀩ#0; ꀩ#0; 渲染树( )由树、树合并而成,但并不是必须等树及树加载完成后才开始合并构建渲染树。三者的构建并无先后条件,亦非完全,而是会有交叉,并行构建。因此会形成一边加载,一边解析,一边渲染的工作现象。
构建渲染树,根据渲染树计算每个可见元素的布局,并输出到绘制流程,将像素渲染到屏幕上。
4.在渲染树的基础上进行布局,计算每个节点的几何结构
ꁄ1重绘():屏幕的一部分要重绘。渲染树节点发生改变,但不影响该节点在页面当中的空间位置及大小。譬如某个标签节点的背景颜色、字体颜色等等发生改变,但是该标签节点的宽、高、内外边距并不发生变化,此时触发浏览器重绘()。
ꁄ2重排():也有称回流,当渲染树节点发生改变,影响了节点的几何属性(如宽、高、内边距、外边距、或是、、:;等等),导致节点位置发生变化,此时触发浏览器重排(),需要重新生成渲染树。譬如为某个标签节点添加新的样式:":;"。导致该标签被隐藏起来,该标签之后的所有节点位置都会发生改变。此时浏览器需要重新生成渲染树,重新布局,即重排()。
注意:重排必将引起重绘,而重绘不一定会引起重排。
何时回引起重排?
当页面布局和几何属性改变时就需要重排。下述情况会发生浏览器重排:
1、添加或者删除可见的元素;
2、元素位置改变——、、、等等;
3、元素尺寸改变——边距、填充、边框、宽度和高度
4、内容改变——比如文本改变或者图片大小改变而引起的计算值宽度和高度改变;
5、页面渲染初始化;
6、浏览器窗口尺寸改变——事件发生时;
4.3如何减少和避免重排
的成本比 的成本高得多的多。一个节点的 很有可能导致子节点,甚至父节点以及兄弟节点的 。在一些高性能的电脑上也许还没什么,但是如果 发生在手机上,那么这个过程是延慢加载和耗电的。----浏览器的渲染原理简介
1. 直接改变,如果动态改变样式,则使用(考虑没有优化的浏览器);
2. 让要操作的元素进行”离线处理”,处理完后一起更新;
) 使用进行缓存操作,引发一次回流和重绘;
) 使用:技术,只引发两次回流和重绘;
) 使用( ) 和 技术,引发一次回流和重绘;
3.不要经常访问会引起浏览器队列的属性,如果你确实要访问,利用缓存;
4. 让元素脱离动画流,减少回流的 的规模;
5、把每个节点绘制到屏幕上()
ꀖ 以谷浏览器为例:
按下12打开控制台 找到就可以看见网页请求的所有信息了 ꀩ#0; ꀩ#0; ꀩ#0; ꀩ#0;ꀖ 新特性
1:语义化标签
通过语义化标签,可以让页面有更加完善的结构,让页面的元素有含义,同时利于被搜索引擎解析,有利于,主要标签包括下面的标签:
标签ꀯ0; ꀯ63;述
ꀯ0; ꀯ8868;示文档的头部区域
ꀯ0; ꀯ8868;示文档的尾部区域
ꀯ0; ꀯ8868;示文档导航部分
ꀯ0; ꀯ8868;示文档的某一节
ꀯ0; ꀯ8868;示文章
ꀯ0; ꀯ8868;示文档主要的内容区域
2:增强型表单
例如可以通过的属性指定类型是还是或者,同时还添加了和等表单属性。
3. 媒体元素
新增了和两个媒体相关的标签,可以让人员不必以来任何插件就能在网页中嵌入浏览器的音频和视频内容。
4. 绘图
绘图指的是在页面中设定一个区域,然后通过动态的在这个区域绘制图形。
5. 绘图
这一部分不详细展开,想要了解的小伙伴可以参考其他文章~
6. 地理定位
使用()方法来获取用户的位置,从而实现队地理位置的定位。
7. 拖放
通过给标签元素设置属性值为,能够实现对目标元素的拖动。
8.
通过加载一个脚本文件,进而创建一个工作的线程,在主线程之外运行,线程运行结束之后会把结果返回给主线程,线程可以处理一些计算密集型的任务,这样主线程就会变得相对轻松,这并不是说具备了多线程的能力,而实浏览器作为宿主环境提供了一个多线程运行的环境。
9.
关于 部分,大家需要重点掌握的是、和三者之间的区别:
10.
关于协议,大家主要需要记住的就是和的区别。
相同点
和都是基于的应用层协议。
不同点
是双向通信协议,模拟协议,可以双向发送和接受消息,是单向的,意思是说通信只能由客户端发起。
是需要浏览器和服务器通过握手建立连接,但是是浏览器向服务器发送连接,服务器预先不知道这个连接。
联系
建立握手时需要基于进行传输,建立连接之后呢便不再需要协议了。
ꀯ0;ꀯ0;ꀯ0;ꀯ0;ꀯ0;ꀯ0;ꀯ0;ꀯ0;
和之间的区别
的生命周期是永久性的,也就是说使用存储数据,数据会被永久保存,数据不会因为窗口或浏览器的关闭而消失,除非主动的去删除数据。
有属性,可以通过控制台查看其有多少条记录的数据。
的生命周期相比来说很短,其周期在窗口关闭时结束。也就是说,当浏览器窗口关闭,的使命就已经结束,其保留的数据也会被清除。
也拥有属性,两者的使用方法也是一致的,但和比较,仍有一些区别。
页面刷新不会消除已获得的数据
这里我写了两个文件(1. / 2.)来进行说明:
因为篇幅问题,所以只取了部分需要注意的代码段
这是1.的部分代码:
2.的部分代码:
打开1页面,可以看见跳转按钮以及一段文字:页面的作用:在 中存数据;
打开控制器,可以看见已经传入了 以及它的值 ;
这时点击跳转按钮,会看见页面刷新,进入2页面,显示“我是2页面”
在1窗口关闭前;就保存数据了。换一个新的窗口(2);也不会有数据改变
.() 获取的数据中值
ꀖ ꀯ0;ꀯ0;ꀯ0;ꀯ0;ꀯ0;ꀯ0;ꀯ0;ꀯ0;
1. 传值。
ꀯ73;点: 储存是需要服务器支持的,本地直接运行静态文件是实现不了的。能够存储少量数据到客户端的磁盘中,特定的网页之间是可以共享中的数据。
2.和传值。
ꀯ418;点:本地静态文件可支持。在5中,新加入了一个特性,这个特性主要是用来作为本地存储来使用的,解决了存储空间不足的问题(中每条的存储空间为4),中一般浏览器支持的是5大小,这个在不同的浏览器中会有所不同。此方法类似,将数据存在一个公共的地方,实现页面之间传值。
ꁃ方式,传值.。
优点: 速度快. 和 和 都存在速度慢,反应不过来的问题, 我在页面写进去,在页面读出来.有时会读到空值。提交表单跳转的方式肯定不行了,因服务端并不处理这些请求参数,连到达客户端的机会都没有。
4..和.之间传值
.可以打开一个新的页面,在新的页面中可以通过.获取父页面的窗口对象,从而可以获取父窗口中的参数。
如: = ...("").;ꀖ ꀖ ꀯ0;ꀯ0;ꀯ0;ꀯ0;1.按下12打开人员工具
ꀯ0;ꀯ0;ꀯ0;ꀯ0;2.点击切换到
ꀯ0;ꀯ0;ꀯ0;ꀯ0;3.点击ꀯ5373;可查看到保存过的数据信息
如何清除数据?
点击上方的 点击 即可删除数据
一、 语义化标签是什么?
常用的语义化标签包括
>头部</p>
>导航栏</p>
>区块(有语义化的)</p>
>主要区域</p>
>主要内容</p>
>侧边栏</p>
>底部</p>
二、 为什么会用语义化标签?
平时,我们都会采用+布局我们的页面。但是这样的布局方式不仅使我们的文档结构不够清晰,而且不利于浏览器对页面的读取。所以5新增了很多新的语义化标签。并且,在我们未给页面添加样式时,用户体验并不好。语义化标签也能让浏览器更好的读取页面结构。再就是便于团队和维护,语义化更具可读性,遵循3标准的团队都遵循这个标准,可以减少差异化。
一、各个类型选择器的权重
二、!
!的作用是提升优先级,换句话说,加了这句的样式的优先级是最高的(比内联样式的优先级还高)。
1
三、优先级规则
注意:
!规则被应用在一个样式中时,该样式会覆盖中任何其他对该元素的,无论它处在列表中的哪个位置。
但是注意,使用!样式很难调试,因为它改变了你样式本来的权值规则。
四、权值如何进行比较
ꀖ 很多人认为: 和: 的区别仅仅在于: 隐藏后的元素不占据任何空间,而: 隐藏后的元素空间依旧保留 ,实际上没那么简单,是一个非常有故事性的属性
具有继承性,给父元素设置:;子元素也会继承这个属性。但是如果重新给子元素设置: ,则子元素又会显示出来。这个和: 有着质的区别 :父元素设置:; 子元素设置:;后子元素不会显示
: 不会影响计数器的计数,: 虽然让一个元素不见了,但是其计数器仍在运行。这和: 完全不一样
1、的继承选择器,. .和.>.的区别?
. .,匹配.下所有包含.的标签,包含所有后代元素
.>.,匹配.下子元素中包含.的标签,只包含.的子级元素
2、两个同级类选择器连着一起写有什么作用?(..)
权值相加,匹配既包含.又包含.类名的标签
方式一:内联样式
内联样式也叫行内样式,指的是直接在标签中的 属性中添加 。
示例:
这种方式只能改变当前标签的样式,如果想要多个 标签拥有相同的样式,就只能重复的为每个 添加和修改相同的样式,还会使代码变得冗长,并且难以维护。所以一般不推荐使用内联样式引入样式。
方式二:嵌入样式
嵌入样式指的是在头部中的 标签中写入代码。
示例:
嵌入方式的 只对当前的网页有效,所以当多个页面需要引入相同的 样式时,这样写会导致代码冗余,也不利于维护。但是,因为 代码在文件中,所以会使得代码比较集中,当我们写模板网页时,这样比较写比较好,因为可以让人一目了然地查看 结构和 样式。
方式三:链接样式
链接方式指的是使用头部的标签引入外部的 文件。
示例:
链接方式是最常见也是最推荐的引入 的方式。使用这种方式,所有的 代码只存在于单独的 文件中,所以具有良好的可维护性,并且所有的 代码只存在于 文件中,文件会在第一次加载时引入,以后切换页面时只需加载 文件即可,并且其他页面需要相同的 样式时可以复用。
方式四:导入样式
导入样式指的是使用 规则引入外部 文件。
示例;
或者
或者
原文链接:
一、 选择符:
1.选择器(# )
2.类选择器(.)
3.标签选择器(, 1, ,)
4.相邻选择器(1 + )
5.子选择器( > ,>)
6.后代选择器( )
7.通配符选择器,也称全局选择器( )
8.属性选择器([ = “”])
9.伪类选择器(: , 🙂
二、可继承的样式:
1.-
2.-
3.
4.-
三、不可继承的样式:
1.
2.
3.
4.
5.
四、优先级算法:
1.优先级就近原则,同权重情况下样式定义最近者为准;
2.载入样式以最后载入的定位为准;
3.! > 内联样式>选择器>选择器>标签选择器和伪元素选择器>通配符、子选择器、相邻选择器等>继承的样式没有权值
4. 比 内联优先级高,但内联比 要高
五、3新增伪类举例:
:--:选择属于其父元素的首个元素的每个元素。
:--:选择属于其父元素的最后元素的每个元素。
:--:选择属于其父元素唯一的元素的每个元素。
:-:选择属于其父元素的唯一子元素的每个元素。
:-(2):选择属于其父元素的第二个子元素的每个元素。
:: 控制表单控件的禁用状态。
:: 单选框或复选框被选中。
ꀖ :固定定位ꀩ#0; :绝对定位ꀩ#424;者都会使元素脱离文档流
区别很简单:
1、没有滚动条的情况下没有差异
2、在有滚动条的情况下,定位不会随滚动条而,而则会随滚动条
常用场合:
1.固定定位,只针对浏览器窗口定位,上下左右,不会随着窗口大小改变,固定不变,例如固定位置的小,常用于网站边缘的联系方式和快速回到顶部
2.绝对定位,脱离文档流,相对于有最近的具有相对定位的上级父元素或者祖宗元素定位,如果依次向上找没找到具有相对定位的上级元素,则相对于浏览器窗口定位
ꀖ 1、利用定位+:
父级设置为相对定位,子级绝对定位 ,并且四个定位属性的值都设置了0,那么这时候如果子级没有设置宽高,则会和父元素宽高相同,完全覆盖
这里子元素设置了宽高,所以宽高会按照我们的设置来显示,但是实际上子级的虚拟占位已经撑满了整个父级,这时候再给它一个:它就可以上下左右都居中了
2、利用定位+:负值
初始位置为方块1的位置
当设置、为50%的时候,内部子元素为方块2的位置
设置为负数时,使内部子元素到方块3的位置,即中间位置
这种方案不要求父元素的高度,也就是即使父元素的高度变化了,仍然可以保持在父元素的垂直居中位置,水平方向上是一样的操作
但是该方案需要知道子元素自身的宽高,但是我们可以通过下面属性进行
3、利用定位+
(-50%, -50%)将会将元素位移自己宽度和高度的-50%
这种方法其实和最上面被否定掉的负值用法一样,可以说是负值的替代方案,并不需要知道自身元素的宽高
4、布局
5、布局
3中了布局,可以非常简单实现垂直水平居中
这里可以简单看看布局的关键属性作用:
: 时,表示该容器内部的元素将按照进行布局
-: 表示这些元素将相对于本容器水平居中
-: 也是同样的道理垂直居中
6、布局
ꀖ
ꀖ 方案一:左侧固定宽度,右侧自适应 :1; 占据剩余空间
方案二:左侧浮动,右侧设置宽度100%,占据左侧普通流位置
方案三:左侧固定宽度左浮动,右侧设-等于左侧宽度
方案四:左侧固定宽度、固定定位,右侧宽度100%
方案五:左侧宽度固定、固定定位,右侧左边距等于左侧宽度:
方案六:双左浮动,右侧计算属性计算宽度
方案七:左侧左浮,右侧右浮动,右侧计算宽度:
方案八:左侧固定宽度,:-,右侧右浮动,计算宽度
二、选择器
3中新增了一些选择器,主要为如下图所示:
三、新样式
边框
3新增了三个边框属性,分别是:
-:创建圆角边框
-:为元素添加阴影
-:使用图片来绘制边框
-
设置元素阴影,设置属性如下:
水平阴影
垂直阴影
模糊距离(虚实)
阴影尺寸(影子大小)
阴影颜色
内/外阴影
其中水平阴影和垂直阴影是必须设置的
背景
新增了几个关于背景的属性,分别是-、-、-和-
-
用于确定背景画区,有以下几种可能的属性:
-: -; 背景从开始显示
-: -; 背景从开始显示
-: -; 背景显区域开始显示
-: -; 默认属性,等同于-
通常情况,背景都是覆盖整个元素的,利用这个属性可以设定背景颜色或图片的覆盖范围
-
当我们设置背景图片时,图片是会以左上角对齐,但是是以的左上角对齐还是以的左上角或者的左上角对齐? -正是用来设置这个的
-: -; 从开始计算-
-: -; 从开始计算-
-: -; 从开始计算-
默认情况是-,即以的左上角为原点
-
-属性常用来调整背景图片的大小,主要用于设定图片本身。有以下可能的属性:
-: ; 缩小图片以适合元素(维持像素长宽比)
-: ; 扩展元素以填补元素(维持像素长宽比)
-: 100 100; 缩小图片至指定的大小
-: 50% 100%; 缩小图片至指定的大小,百分比是相对包 含元素的尺寸
-
元素可以被分成几个的盒子(如使内联元素跨越多行),- 属性用来控制背景怎样在这些不同的盒子中显示
-: ; 默认值。忽略盒之间的距离(也就是像元素没有分成多个盒子,依然是一个整体一样)
-: -; 把盒之间的距离计算在内;
-: -; 为每个盒子单独重绘背景
文字
-
语法:-: -
:使用浏览器默认的换行
-:允许在单词内换行
-
-设置或检索当当前行超过指定容器的边界时如何显示,属性有两个值选择:
:修剪文本
:显示省略符来代表被修剪的文本
-
-可向文本应用阴影。能够规定水平阴影、垂直阴影、模糊距离,以及阴影的颜色
-
3里面开始支持对文字的更深层次的渲染,具体有三个属性可供设置:
--: 设置文字内部填充颜色
--: 设置文字边界填充颜色
--: 设置文字边界宽度
颜色
3新增了新的颜色表示方式与
分为两部分,为颜色值,为透明度
分为四部分,为色相,为饱和度,为亮度,为透明度
四、 过渡
属性可以被指定为一个或多个属性的过渡效果,多个属性之间用逗进行分隔,必须规定两项内容:
过度效果
持续时间
语法如下:
: 属性,花费时间,效果曲线(默认),延迟时间(默认0)
上面为简写模式,也可以分开写各个属性
-: ;ꀖ -: 1;
--: ;
-: 2;
五、 转换
属性允许你旋转,缩放,倾斜或平移给定元素
-:转换元素的位置(围绕那个点进行转换),默认值为(,,):(50%,50%,0)
使用方式:
: (120, 50%):位移
: (2, 0.5):缩放
: (0.5):旋转
: (30, 20):倾斜
六、 动画
动画这个平常用的也很多,主要是做一个预设的动画。和一些页面交互的动画效果,结果和过渡应该一样,让页面不会那么生硬
也有很多的属性
-:动画名称
-:动画持续时间
--:动画时间函数
-:动画延迟时间
--:动画执行次数,可以设置为一个整数,也可以设置为,意思是无限循环
-:动画执行方向
--:动画播放状态
--:动画填充模式
七、渐变
颜色渐变是指在两个颜色之间平稳的过渡,3渐变包括
-:线性渐变
❝
-: -(, -1, -2, ...);
❞
-:径向渐变
❝
-(0, , );
❞
八、其他
关于3其他的新特性还包括弹性布局、栅格布局,
除此之外,还包括多列布局、媒体查询、混合模式等等
ꀖ 几种常见布局
布局
父级容器—:
子级容器—:-
例子
布局
特点:
元素"浮动"
脱离文档流
但不脱离文本流
对自身的影响: 形成"块"(,具有 特性的元素可以看作是隔离了的容器,容器里面的元素不会在布局上影响到外面的元素)、位置尽量靠上、位置尽量靠左(右),无法满足会靠下
对兄弟的影响: 上面贴非元素、旁边贴元素、不影响其它块级元素位置、影响其它块级元素内部文本
布局
布局的传统解决方案,基于盒状模型,依赖 属性 + 属性 + 属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现;2009年,3 提出了一种新的方案---- 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。
是 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性;任何一个容器都可以指定为布局,行内元素也可以使用布局; 内核的浏览器,必须加上--前缀。
弹性盒子
盒子本来就是并列的
指定宽度即可
水平竖直居中 实现
布局
网格布局()是最强大的 布局方案。
它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的框架达到的效果,现在浏览器内置了; 布局与 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。 布局远比布局强大。
ꀖ 布局
属性 用来设置元素的列宽和列数。
例子
做走马灯ꀯ0;原文链接:用制作走马灯 - 掘金
做3魔方ꀩ#0; ꀩ#672;文链接:使用 3 做一个3魔方_的博客-博客ꀖ 用做无缝匀速滚动ꀩ#0;本文链接:用做无缝匀速滚动_是黄小仙呀的博客-博客_如何设置动画为匀速运动
ꀯ505;弹力球ꀩ#0; ꀩ#0; ꀩ#0; 本文链接:用动画()做弹力球_520的博客-博客ꀖ 使用制作进度条ꀯ0;ꀯ672;文链接:使用制作进度条_乐之者的博客-博客
为了保证大部分分辨率下计算出的根字体大小都为整数,所以约定根字体大小的计算公式为:
分辨率宽度 / 10;
在6下,如果一个元素的宽和高都是1.75,其在浏览器内的渲染尺寸
应该是1.75 37.5 = 65.625;
但真实渲染尺寸却是另外一种情况:
ꀩ#0; 有的宽度是66,有的却是65,而且顺序上毫无规律。
ꀩ#0;ꀖ ꀩ#0; 如果浏览器统一做四舍五入处理,那么所有的色块尺寸也应该是一样的,不会出现部分向上取整,
部分向下取整。
设想:
ꀩ#0; 浏览器在渲染时所做的舍入处理只是应用在元素的渲染尺寸上,其真实占据的空间依旧是原始大小。
ꀩ#0;ꀖ ꀩ#0; 也就是说如果一个元素尺寸是0.625,那么其渲染尺寸应该是1,空出的0.375空间由
其临近的元素填充;
ꀩ#0;ꀖ ꀩ#0; 同样道理,如果一个元素尺寸是0.375,其渲染尺寸就应该是0,但是其会占据
临近元素0.375的空间。
函数式编程自定义变量用于整体主题调整嵌套语法简化复杂度
页面层级结构多,重复使用的代码较多时
1.概念
可以用 设置动画的名称,用 设置动画完成的周期,用 - 设置动
画的速度曲线, 设置动画什么时候开始,- 设置动画播放的次数, 规定下一
个周期是否逆向的播放,- 动画是否正在进行或者暂停,- 设置动画停了之后位置什么状态
属性是一个简写属性,用于设置六个动画属性:
-ꀯ0; ꀯ894;定需要绑定到选择器的 名称。
-ꀯ0; ꀯ894;定完成动画所花费的时间,以秒或毫秒计。
--ꀯ0; ꀯ894;定动画的速度曲线。
-ꀯ0; ꀯ894;定在动画开始之前的延迟。
--ꀯ0; ꀯ894;定动画应该播放的次数。
-ꀯ0; ꀯ894;定是否应该轮流反向播放动画。
2.概念
用 去设置过渡效果的属性名称, 设置过渡效果的周期,- 规
定速度效果的速度曲线, 设定过渡效果什么时候开始;
属性是一个简写属性,用于设置四个过渡属性:
-ꀯ0; ꀯ894;定设置过渡效果的 属性的名称。
-ꀯ0; ꀯ894;定完成过渡效果需要多少秒或毫秒。
--ꀯ0; ꀯ894;定速度效果的速度曲线。
-ꀯ0; ꀯ59;义过渡效果何时开始。
3.区别
1) 是过渡,是样式值的变化的过程,只有开始和结束; 其实也叫关键帧,通过和 结合可以设置中间帧的一个状态;
2) 配合 @ 可以不触发时间就触发这个过程,而 需要通过 或者 事件来配合触发;
3) 可以设置很多的属性,比如循环次数,动画结束的状态等等, 只能触发一次;
4) 可以结合 设置每一帧,但是 只有两帧;
ꀖ 可以实现简单的过渡动画效果,而可以实现更为复杂的动画效果ꀖ
ꀖ 盒模型的概念
盒模型是布局的基石,规定了网页元素如何显示以及元素间相互关系。定义所有的元素都可以拥有像盒子一样的外形和平面空间。即都包含内容区、补白(内填充)、边框、边界(外边距)这就是盒模型。
盒模型的组成
盒模型组成 = (内容) + (内填充) + (边框) + (外边距)
内填充:,在设定页面中一个元素内容到元素的边缘(边 ꀩ#6846;) 之间的距离。 也称补白。不可以写负值!
ꀖ 一共有4中方式,分别为内联、内嵌、外联、导入。
1、内联(行内样式) - 在标签内直接写样式,
2、内嵌(内部样式) - 在标签里,加一个标签,在里写样式
3、外联(外部样式) - 新建一个.文件,通过来引入样式
4、导入(导入样式) - 在标签里,加一个标签,再写@ (),跟用的方式差不多
5、优先级
1、就近原则
2.理论上:内联>内嵌>外联>导入
3.实际上:内嵌、外联、导入在同一个文件头部,在选择器权值相同的情况下,谁离相应的代码近,谁的优先级高
ꀖ 1.
就是像素,也是我们现在经常使用的基本单位,比如常常听到的电脑像素是1024768的,表示的是水平方向是1024个像素点,垂直方向是768个像素点。
2.
参考物是父元素的-,默认字体大小是16,所以1不是固定值,因为它会继承父元素的字体大小
3.
参考物是相对于根元素,我们在使用时可以在根元素设置一个参考值即可,相对于使用,减少很大运算工作量,例:大小为10,12就是120
4.%
% 是相对于父元素的大小设定的比率,:;的元素是相对于已经定位的父元素,:;的元素是相对可视窗口
5、
3新单位, 的缩写,视窗宽度,1等于视窗宽度的1%。
举个例子:浏览器宽度1200, 1 = 1200/100 = 12 。
再举个例子:浏览器宽度1200, 1 = 1200/100 = 12
6.
相对于视口的宽度。视口被均分为100单位
1 {
ꀯ0; ꁏ-: 8;
}
再举个例子:浏览器高度900, 1 = 900/100 = 9
总结:
ꀩ.:1等于视口宽度的1%。
ꀩ.:1等于视口高度的1%。
ꀖ 1、的值有:
,,,-,-,,-,-,-,-,--,-,--,--,--,-,,-,,-,,-
2、作用:
: 表示隐藏对象,与属性的值不同,:不为被隐藏的对象保留物理空间 ,然:就保留
(默认值):表示指定对象为内联元素
: 指定对象为块元素。
-: 指定对象为列表项目
-: 指定对象为内联块元素。(这是2中的属性)
: 指定对象作为块元素级的表格。类同于标签(2)
-: 指定对象作为内联元素级的表格。类同于标签(2)
-: 指定对象作为表格标题。类同于标签(2)
-: 指定对象作为表格单元格。类同于标签(2)
-: 指定对象作为表格行。类同于标签(2)
--: 指定对象作为表格行组。类同于标签(2)
-: 指定对象作为表格列。类同于标签(2)
--: 指定对象作为表格列组显示。类同于标签(2)
--: 指定对象作为表格标题组。类同于标签(2)
--: 指定对象作为表格脚注组。类同于标签(2)
-: 根据上下文决定对象是内联对象还是块级对象。(3)
: 将对象作为弹性伸缩盒显示。(伸缩盒的最老版本中属性)(3)
-: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒的最老版本中属性)(3)
: 将对象作为弹性伸缩盒显示。(伸缩盒的最老版本中属性)(3)
-: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒的最老版本中属性)(3)
: 将对象作为弹性伸缩盒显示。(伸缩盒的最老版本中属性)(3)
-: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒的最老版本中属性)(3)
ꀖ 实例:
代码代码
效果图-----未清除浮动
效果图-----已清除浮动
当为子元素设置了浮动,如果不清除浮动,那么父元素将会出现高度塌陷的现象。所以当我们设置了浮动后,就要解决浮动带来的影响。下面就要我们介绍几种清除浮动的方法!
方法一:额外标签法
给谁清除浮动,就在其后额外添加一个空白标签 ,给其设置:。
优点:通俗易懂,书写方便。
缺点:添加许多无意义的标签,结构化比较差。
::本质就是闭合浮动, 就是让父盒子闭合出口和入口,不让子盒子出来 。
样式
代码
方法二:父元素添加:
通过触发方式,实现清除浮动
优点:代码简洁
缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素。
样式
方法三:使用伪元素清除浮动
优点:符合闭合浮动思想,结构语义化正确。
缺点:6-7不支持伪元素:,使用:1触发。
样式
方法四:使用和双伪元素清除浮动
优点:代码更简洁
缺点:用:1触发.
样式
方法五:为父元素设置高度
缺点: 需要手动添加高度,如何后面的高度发生变化,还要再次修改高度,给后期的维护带来麻烦。
优点: 简单粗暴直接有效,清除了浮动带来的影响。
ꀖ 标准盒子模型和怪异盒子模型(盒子模型)ꀖ 在标准模式下,一个块的总宽度 = 内容的 + (左右) + (左右) + (左右)
设置和会将盒子撑大,在设置的宽高外产生
ꀖ 在怪异模式下,一个块的总宽度 = 内容的 + (左右)(这里的包含了(左右)和(左右)的值),设置的和会在原有的宽高里面产生,不会撑开盒子
例如一个:
在标准模式下:总宽度为100;
在怪异模式下:总宽度为144;
4.两种模式的转换(通过-)
-中比较常用的两个属性值为 - 和 - ,它可以改变盒子模型的解析计算模式,可以参考上面的代码案例。
当设置-:-时,采用标准模式进行计算,默认就是这种模式;
当设置-:-时,采用怪异模式进行计算;
ꀖ .相对定位
相对定位:设置相对定位的盒子会相对它原来的位置,通过指定偏移,到达新的位置,但是原来的位置会被保留下来,且仍在标准文档流中,它对父级盒子和相邻的盒子都没有任何影响。
绝对定位
绝对定位:设置绝对定位的盒子会相对于距离最近的设置了相对定位的祖先元素进行定位,如果一直找不到具有相对定位的祖先元素,就相对于浏览器窗口定位,且会使元素脱离文档流。
固定定位
固定定位:设置了固定定位的盒子只会相对于浏览器窗口进行定位,也就是窗口中左上角的原点
1》文字内容是否会被覆盖
浮动,当元素通过来脱离文档流时,虽然其他的元素会当其不存在,但其他元素的内容还是会把这个元素占的位置让出来。也就是该元素浮动在另外一个有文字内容的元素上时,文字内容并不会被浮动的元素覆盖,而是环绕在周围。如:
脱离文档流的时候,其他元素和元素中的文本都会无视掉他,因此不会像那样将其他元素的内容挤到旁边去。如:
2》相对何处进行定位
当一个元素浮动之后,它会被移出正常的文档流,然后向左或者向右平移,一直平移直到碰到了所处的容器的边框,或者碰到另外一个浮动的元素。
设置绝对定位的盒子会相对于距离最近的设置了相对定位的祖先元素进行定位,且会使元素脱离文档流,如果一直找不到具有相对定位的祖先元素,就相对于浏览器窗口定位。
1 布局
布局是3里新出的一个,它就是为了解决上述两种方式的不足出现的,是比较完美的一个。目前端的布局也都是用。ꀖ 的缺点就是不能兼容8及以下浏览器。
2 表格布局ꀖ ꁅ网格布局
第零等:!,大过了其它任何设置 权值为 。
第一等:代表内联样式,如:=&;&;,权值为1000。
第二等:代表选择器,如:#,权值为0100。
第三等:代表类、伪类和属性选择器,如.,权值为0010。
第四等:代表标签选择器和伪元素选择器,如 ,权值为0001。
第五等:通配符、子选择器、相邻选择器等的。如、>、+,权值为0000。
第六等:继承的样式没有权值,通配选择器定义的规则优先级高于元素继承过来的规则的优先级。
的优点在于简单易用,但是它有几个很大的局限。
(1)需要事件触发,所以没法在网页加载时自动发生。
(2)是一次性的,不能重复发生,除非再次触发。
(3)只有两个状态,开始状态和结束状态,不能定义中间状态。
(4)一条规则,只能定义一个属性的变化,不能涉及多个属性。
是使元素变换,变形
ꁽ中的四个方法
1.旋转
:通过指定的角度参数对原元素指定一个效果。
如果设置的值为正数表示顺时针旋转,如果设置的值为负数,则表示逆时针旋转。如::(30);
2.
() 根据左(轴)和顶部(轴)位置给定的参数,从当前元素位置。
如::(100,20):
通过给定一个方向上的数目指定一个。只向轴进行元素,同样其基点是元素中心点,也可以根据-改变基点位置
:(100):
通过给定方向的数目指定一个。只向轴进行,基点在元素心点,可以通过-改变基点位置。
:(20):
3.缩放
缩放和是有点相似的,也是有三种情况:下面我们具体来看看这三种情况具体使用方法:
注意:默认值是1,它的值放大是比1大,缩小比1小。
1、(,) 定义 2 缩放转换,改变元素的宽度和高度。
如::(2,1.5);ꀖ 如果只写入一个参数就按照等比例宽高同时缩放 如:(1.5);ꀩ#5;高都变为1.5倍
2、() 定义 2 缩放转换,改变元素的宽度。
如::(2):
3、() 定义 2 缩放转换,改变元素的高度。
如::(2):
4.扭曲
1、(-,-) 定义 2 倾斜转换,沿着 和 轴。
如::(30,10);
2、() 定义 2 倾斜转换,沿着 轴。
如::(30);
3、() 定义 2 倾斜转换,沿着 轴。
如::(10);
ꀯ553;然还有3的效果
ꀖ ꀖ ꀖ 一、
二、
三、结果
在介绍与之前,我们先来了解一下中的数据类型。在中有六种简单数据类型(也称为基本数据类型): 、、、 和 、 (6中引入) 。还有一种复杂数据类型——。
和都只有一个值,分别对应着和。这两种不同类型的值,既有着不同的语义和场景,又表现出较为相似的行为。
的字面意思就是:未定义的值 。这个值的语义是,希望表示一个变量最原始的状态,而非人为操作的结果 。 这种原始状态会在以下 4 种场景中出现:
1、一个变量,但是没有赋值
访问 ,返回了 ,表示这个变量自从了以后,就从来没有使用过,也没有定义过任何有效的值。
2、访问对象上不存在的属性或者未定义的变量
访问 对象上的 属性,返回 , 表示 上不存在或者没有定义名为 的属性;对未的变量执行操作符返回了值。
3、函数定义了形参,但没有传递实参
函数 定义了形参 ,但 被调用时没有传递参数,因此, 运行时的参数 就是一个原始的、未被赋值的变量。
4、使用对表达式求值
明确规定 操作符 对任何表达式求值都返回 ,这和函数执行操作后没有返回值的作用是一样的, 中的函数都有返回值,当没有 操作时,就默认返回一个原始的状态值,这个值就是 ,表明函数的返回值未被定义。
因此, 一般都来自于某个表达式最原始的状态值,不是人为操作的结果。当然,你也可以手动给一个变量赋值 ,但这样做没有意义,因为一个变量不赋值就是 。
的字面意思是:空值 。这个值的语义是,希望表示一个对象被人为的重置为空对象,而非一个变量最原始的状态 。 在内存里的表示就是,栈中的变量没有指向堆中的内存对象。
1、一般在以下两种情况下我们会将变量赋值为
如果定义的变量在将来用于保存对象,那么最好将该变量初始化为,而不是其他值。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存值,这样有助于进一步区分和。
当一个数据不再需要使用时,我们最好通过将其值设置为来释放其引用,这个做法叫做解除引用。不过解除一个值的引用并不意味着自动回收改值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器在下次运行时将其回收。解除引用还有助于消除有可能出现的循环引用的情况。这一做法适用于大多数全局变量和全局对象的属性,局部变量会在它们离开执行环境时(函数执行完时)自动被解除引用。
2、特殊的
当我们使用操作符检测值,我们理所应当地认为应该返""类型呀,但是事实返回的类型却是""。
是不是很奇怪?其实我们可以从两方面来理解这个结果:
一方面从逻辑角度来看,值表示一个空对象指针,它代表的其实就是一个空对象,所以使用操作符检测时返回""也是可以理解的。
另一方面,其实在 最初的实现中, 中的值是由一个表示类型的标签和实际数据值表示的(对象的类型标签是 0)。由于 代表的是空指针(大多数平台下值为 000),因此,的类型标签也成为了 0, 就错误的返回了""。在6中,当时曾经有提案为历史平凡, 将 的值纠正为, 但最后提案被拒了,所以还是保持""类型。
用一句话总结两者的区别就是: 表示一个变量自然的、最原始的状态值,而 则表示一个变量被人为的设置为空对象,而不是原始状态。所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 ,当需要释放一个对象时,直接赋值为 即可,重点:给一个变量赋值为,可以手动释放该变量占用的内存,而给变量赋值为,依旧会给该变量分配内存空间
寄生组合继承
这个方法有点意思,融合了原型继承和继承的优点,真正实现了私对私,公对公~为此,我们需要在继承的基础上加上原型继承。
原型继承的思想是让子类原型=父类的一个实例,即. = ,换句话说,即..____ = .(父类实例原型链指向父类原型,没毛病吧)。
从另一个角度看,我们不创建新的父类实例了!而是让子类原型的____重定向,原本指向.,现在让它指向.。实现了原型继承同样的效果。——实际上就是原型继承。
但还有一个问题,6~8下是不允许我们操作____的,我们使用.的方法代替。
.():创建一个空对象,让这个空对象的____指向。
. = .(.)这句核心代码实际上和. = 别无二致,只是创建的不是父类的实例,而是一个空对象,然后手动更改原型链指向而已。这个操作也可以让父类的公有属性方法成为子类的公有属性方法。
6中的类和继承
6中的继承可以实现与寄生组合继承同样的效果,但写法是不是极其简单呐~
ꀖ ꀩ#0; ꀩ#0;期望
ꀩ#0; ꀩ#59;现
期望
创建
程序实现
这里说一下前端性能优化的七大手段,包括减少请求数量、减小资源大小、优化网络连接、优化资源加载、减少重绘回流、使用性能更好的和构建优化
减少请求数量
【合并】
如果不进行文件合并,有如下3个隐患
1、文件与文件之间有插入的上行请求,增加了-1个网络延迟
2、受丢包问题影响更严重
3、经过代理服务器时可能会被断开
但是,文件合并本身也有自己的问题
1、首屏渲染问题
2、缓存失效问题
所以,对于文件合并,有如下改进建议
1、公共库合并
2、不同页面单独合并
【图片处理】
1、雪碧图
雪碧图是以前非常流行的技术,把网站上的一些图片整合到一张单独的图片中,可以减少网站的请求数量,但是当整合图片比较大时,一次加载比较慢。随着字体图片、图片的流行,该技术渐渐退出了历史舞台
2、64
将图片的内容以64格式内嵌到中,可以减少请求数量。但是,由于64编码用8位字符表示信息中的6个位,所以编码后大小大约比原始值扩大了 33%
3、使用字体图标来代替图片
【减少重定向】
尽量避免使用重定向,当页面发生了重定向,就会延迟整个文档的传输。在文档到达之前,页面中不会呈现任何东西,也没有任何组件会被下载,降低了用户体验
如果一定要使用重定向,如重定向到,要使用301永久重定向,而不是302临时重定向。因为,如果使用302,则每一次访问,都会被重定向到的页面。而永久重定向,在第一次从重定向到之后 ,每次访问,会直接返回的页面
【使用缓存】
使用-或这类强缓存时,缓存不过期的情况下,不向服务器发送请求。强缓存过期时,会使用-或这类协商缓存,向服务器发送请求,如果资源没有变化,则服务器返回304响应,浏览器继续从本地缓存加载资源;如果资源更新了,则服务器将更新后的资源发送到浏览器,并返回200响应
【不使用 @】
的@会造成额外的请求
【避免使用空的和】
标签设置空的,会重定向到当前的页面地址
设置空的,会提交表单到当前的页面地址
减小资源大小
【压缩】
1、压缩
代码压缩就是压缩在文本文件中有意义,但是在中不显示的字符,包括空格,制表符,换行符等
2、压缩
压缩包括无效代码删除与语义合并
3、压缩与混乱
压缩与混乱包括无效字符及注释的删除、代码语义的缩减和优化、降低代码可读性,实现代码保护
4、图片压缩
针对真实图片情况,舍弃一些相对无关紧要的色彩信息
在安卓下可以使用格式的图片,它具有更优的图像数据压缩算法,能带来更小的图片体积,同等画面质量下,体积比、少了25%以上,而且同时具备了无损和有损的压缩模式、 透明以及动画的特性
【开启】
协议上的编码是一种用来改进应用程序性能的技术。大流量的站点常常使用压缩技术来让用户感受更快的速度。这一般是指服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来。一般对纯文本内容可压缩到原大小的40%
优化网络连接
【使用】
全称是 ,即内容分发网络,它能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 网络拥挤的状况,提高用户访问网站的响应速度
【使用预解析】
当浏览器访问一个域名的时候,需要解析一次,获得对应域名的地址。在解析过程中,按照、、、、、、的顺序,逐步读取缓存,直到拿到地址
,即预解析就是根据浏览器定义的规则,提前解析之后可能会用到的域名,使解析结果缓存到中,缩短解析时间,来提高网站的访问速度
方法是在 标签里面写上几个 标签
对以上几个网站提前解析 ,由于它是并行的,不会堵塞页面渲染,这样可以缩短资源加载的时间
【并行连接】
由于在1.1协议下,每个域名的最大并发数是6个。使用多个域名,可以增加并发数
【持久连接】
使用-或来建立持久连接,持久连接降低了时延和连接建立的开销,将连接保持在已调谐状态,而且减少了打开连接的潜在数量
【管道化连接】
在2协议中,可以开启管道化连接,即单条连接的多路复用,每条连接中并发传输多个资源,这里就不需要添加域名来增加并发数了
优化资源加载
【资源加载位置】
通过优化资源加载位置,更改资源加载时机,使尽可能快地展示出页面内容,尽可能快地使功能可用
1、文件放在中,先外链,后本页
2、文件放在底部,先外链,后本页
3、处理页面、处理页面布局的文件放在中,如-.文件、.文件
4、中间尽量不写标签和标签
【资源加载时机】
1、异步标签
:ꀩ#502;步加载,在解析完成后执行。的实际效果与将代码放在底部类似
:ꀯ502;步加载,加载完成后立即执行
2、模块按需加载
在等业务逻辑比较复杂的系统中,需要根据路由来加载当前页面需要的业务模块
按需加载,是一种很好的优化网页或应用的方式。这种方式实际上是先把代码在一些逻辑断点处分离开,然后在一些代码块中完成某些操作后,立即引用或即将引用另外一些新的代码块。这样加快了应用的初始加载速度,减轻了它的总体体积,因为某些代码块可能永远不会被加载
提供了两个类似的技术,优先选择的方式是使用符合 提案 的 () 语法。第二种则是使用 特定的 .
3、使用资源预加载和资源预读取
让浏览器提前加载指定资源,需要执行时再执行,可以加速本页面的加载速度
告诉浏览器加载下一页面可能会用到的资源,可以加速下一个页面的加载速度
4、资源懒加载与资源预加载
资源延迟加载也称为懒加载,延迟加载资源或符合某些条件时才加载某些资源
资源预加载是提前加载用户所需的资源,保证良好的用户体验
资源懒加载和资源预加载都是一种错峰操作,在浏览器忙碌的时候不做操作,浏览器空间时,再加载资源,优化了网络性能
减少重绘回流
【样式设置】
1、避免使用层级较深的选择器,或其他一些复杂的选择器,以提高渲染效率
2、避免使用表达式,表达式是动态设置属性的强大但危险方法,它的问题就在于计算频率很快。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至鼠标时都会要重新计算一次
3、元素适当地定义高度或最小高度,否则元素的动态内容载入时,会出现页面元素的晃动或位置,造成回流
4、给图片设置尺寸。如果图片不设置尺寸,首次载入时,占据空间会从0到完全出现,上下左右都可能位移,发生回流
5、不要使用布局,因为一个小改动可能会造成整个重新布局。而且渲染通常要3倍于同等元素时间
6、能够使用实现的效果,尽量使用而不使用实现
【渲染层】
1、此外,将需要多次重绘的元素为 渲染层,如设置,可以减少重绘范围
2、对于一些进行动画的元素,使用硬件渲染,从而避免重绘和回流
【优化】
1、缓存
由于查询比较耗时,在同一个节点无需多次查询的情况下,可以缓存
2、减少深度及数量
中标签元素越多,标签的层级越深,浏览器解析并绘制到浏览器中所花的时间就越长,所以应尽可能保持 元素简洁和层级较少。
3、批量操作
由于操作比较耗时,且可能会造成回流,因此要避免频繁操作,可以批量操作,先用字符串拼接完毕,再用更新
4、批量操作样式
通过切换或者使用元素的.属性去批量操作元素样式
5、在内存中操作
使用对象,让操作发生在内存中,而不是页面上
6、元素离线更新
对进行相关操作时,例、等都可以使用 对象进行离线操作,带元素“组装”完成后再一次插入页面,或者使用: 对元素隐藏,在元素“消失”后进行相关操作
7、读写分离
浏览器具有惰性渲染机制,连接多次修改可能只触发浏览器的一次渲染。而如果修改后,立即读取。为了保证读取到正确的值,会触发浏览器的一次渲染。因此,修改的操作要与访问分开进行
8、事件代理
事件代理是指将事件监听器注册在父级元素上,由于子元素的事件会通过事件冒泡的方式向上传播到父节点,因此,可以由父节点的监听函数统一处理多个子元素的事件
利用事件代理,可以减少内存使用,提高性能及降低代码复杂度
9、防抖和节流
使用函数节流()或函数去抖(),限制某一个方法的频繁触发
10、及时清理环境
及时消除对象引用,清除定时器,清除事件监听器,创建最小作用域变量,可以及时回收内存
性能更好的
1、用对选择器
选择器的性能排序如下所示,尽量选择性能更好的选择器
2、使用来替代和
希望在每一帧刚开始的时候对页面进行更改,目前只有使用 能够保证这一点。使用 或者 来触发更新页面的函数,该函数可能在一帧的中间或者结束的时间点上调用,进而导致该帧后面需要进行的事情没有完成,引发丢帧
3、使用来实现图片可视区域的懒加载
传统的做法中,需要使用事件,并调用方法,来实现可视区域的判断,即使使用了函数节流,也会造成页面回流。使用,则没有上述问题
4、使用
客户端一个基本的特性是单线程:比如,浏览器无法同时运行两个事件处理程序,它也无法在一个事件处理程序运行的时候触发一个计时器。 是5提供的一个多线程解决方案,可以将一些大计算量的代码交由 运行,从而避免阻塞用户界面,在执行复杂计算和数据处理时,这个非常有用
但是,使用一些新的的同时,也要注意其浏览器兼容性
优化
【打包公共代码】
使用插件,将公共模块拆出来,最终合成的文件能够在最开始的时候加载一次,便存到缓存中供后续使用。这会带来速度上的提升,因为浏览器会迅速将公共的代码从缓存中取出来,而不是每次访问一个新页面时,再去加载一个更大的文件
4 将移除 , 取而代之的是两个新的配置项 . 和 .
通过设置 ..: "" 来启动默认的代码分割配置项
【动态导入和按需加载】
提供了两种技术通过模块的内联函数调用来分离代码,优先选择的方式是,使用符合 提案 的 () 语法。第二种,则是使用 特定的 .
【剔除无用代码】
是一个术语,通常用于描述移除 上下文中的未引用代码(-)。它依赖于 2025 模块系统中的静态结构特性,例如 和 。这个术语和概念实际上是兴起于 2025 模块打包工具
的 主要通过插件来完成,的 主要通过 来实现的
【长缓存优化】
1、将替换为,这样当不变时,缓存依然有效
2、使用而不是
每个 . 会基于默认的解析顺序( )进行增量。也就是说,当解析顺序发生变化, 也会随之改变
下面来使用两个插件解决这个问题。第一个插件是 ,将使用模块的路径,而不是数字标识符。虽然此插件有助于在过程中输出结果的可读性,然而执行时间会长一些。第二个选择是使用 ,推荐用于生产环境构建
【公用代码内联】
使用----插件将.内联到文件中
图片懒加载,在页面上的未可视区域可以添加一个滚动条事件,判断图片位置与浏览器顶端的距离与页面的距离,如果前者小于后者,优先加载。如果为幻灯片、相册等,可以使用图片预加载技术,将当前展示图片的前一张和后一张优先下载。如果图片为图片,可以使用,,、64等技术。如果图片过大,可以使用特殊编码的图片,加载时会先加载一张压缩的特别厉害的缩略图,以提高用户体验。如果图片展示区域小于图片的真实大小,则因在服务器端根据业务需要先行进行图片压缩,图片压缩后大小与展示一致。
ꀖ 使用和 进行暴露
每一个文件相当于在一个函数中运行,而函数的作用域是局部作用域,所以两个文件之间的作用域不是共享的。
此时6规范就为我们提供了和 帮助我们将想要暴露的对象暴露出去。
的暴露格式:
暴露一个变量:
变量名
或者定义的时候就进行了暴露
变量名 = 变量值
暴露多个变量:
{量名1,变量2,变量3}
注意: 在中如果对直接的变量进行暴露是没有意义的,因为不使用任任何关键字(如:)直接生命的变量本事就是全局的如果再使用进行暴露是没有意义的。
使用格式:
定义一个对象,将对象暴露出去:
进行引入
针对 暴露的引入
格式: {暴露的变量名1,暴露的变量名1,...} &;文件路径名&;
针对 暴露的引入
格式: 自定义的名字 &;文件路径名&;
和 区别
和 都可用于导出常量、函数、文件、模块等
在一个文件或模块中,、可以有多个, 仅有一个
通过方式导出,在导入时要加{ },且不能自定义名字, 不用加{ },且可以自定义名字
使用例子
.:
.
运行.,报错
(安装环境所致,安装了环境默认使用的是规范而不是6规范,所以报错。没有安装可能不会报该错)
解决:
在所在的文件夹添加.文件,添加"": "",指定规范模式为6模式
再次运行如果报如下错误
是因为的文件路径没写全,将路径进行补全
再次运行,运行成功:
使用例子
.
.
运行.
ꀖ 1.该值在数组中有多个,找出所有位置
ꁂ#0;该值在数组中只有一个
返回或者
()
返回索引
.()ꀩ.() 为要找的值
1: 思路:定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。
2: 思路:先将原数组排序,在与相邻的进行比较,如果不同则存入新数组。
ꁖ 3: 利用对象属性存在的特性,如果没有该属性则存入新数组。
4: 利用数组的下标属性来查询。
5: 利用数组原型对象上的方法。
6: 利用数组原型对象上的 和 方法。
7: 利用数组原型对象上的 和 方法。
ꀩ#0; ꀩ#0;
8: 利用数组原型对象上的 方法。
9: 利用数组原型对象上的 方法。
10: 利用 6的 方法。
ꀖ ꀖ 什么是垃圾?
(1)没有被引用的对象或变量
(2)无法访问到的对象(几个对象引用形成一个环,互相引用)
可达性
可达性是指那些以某种方式可以访问到或可以用到的值,它们被保证存储在内存中。
有一组基本的固有可达值,由于显而易见而无法删除:
(1)本地函数的局部变量和参数
(2)嵌套调用链上的其他函数的变量与参数
(3)全局变量
(4)还有一些其他的,内部的
这些值成为根。
如果引用或引用链可以从根访问任何其他值,则认为该值是可访问的。
垃圾回收机制
垃圾回收机制(: ):执行环境负责管理代码执行过程中使用的内存。的垃圾回收机制是为了以防内存泄漏,内存泄漏的含义就是当已经不需要某块内存时这块内存还存在着,没有被释放,导致该内存无法被使用,垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存。
垃圾回收的必要性
字符串、对象和数组没有固定的大小,所以只有当它们大小已知时才能对它们进行动态的存储分配。程序每次创建字符串、数组或对象时,解释器都要分配内存才存储这个实体。只要像这样动态地分配了内存,最终都要释放这些内存以便它们能够被再次利用;否则,的解释器将会消耗完系统中所有可用的内存,造成系统崩溃。
有自己的垃圾回收机制( ),的解释器可用检测到何时程序不再使用一个对象,当确定了一个对象无用的时候,就说明不再需要这个对象了,就可用把这个对象所占用的内存释放掉。
例如:
代码执行以后,‘’这个字符串就失去了引用(刚开始是被引用的),系统检测到之后,就会启动垃圾回收机制,释放字符串的存储空间,以便这些空间可用再被利用。
垃圾回收方式
执行环境中的垃圾回收器怎样才能检测到哪块内存可以被回收呢?
通常有两种方式:标记清除( )、引用计数( )
标记清除
这是中最常用的垃圾回收方式。
(1)当变量进入执行环境时(函数中变量),就标记这个变量为“进入环境”,当变量离开环境时(函数执行结束),则将其标记为“离开环境”,离开环境之后还有的变量则是需要被删除的变量。
(2)垃圾回收器在运行的时候会给存储在内存中的所有变量都加上标记。
(3)去掉环境中的变量以及被环境中变量引用的变量的标记。
(4)之后再被加上标记的变量即是需要回收的变量(因为环境中的变量已经无法访问到这些变量)
(5)最后,垃圾收集器完成内存清除工作,销毁那些带标记的值,并回收他们所占用的内存空间。
引用计数
这种方式常常会引起内存泄漏,低版本的使用这种方式。机制就是跟踪一个值的引用次数,当一个变量并将一个引用类型赋值给该变量时该值引用次数加1,当这个变量指向其他一个时该值的引用次数便减一。当该值引用次数为0时,则说明没有办法再访问这个值了,被视为准备回收的对象,每当过一段时间开始垃圾回收的时候,就把被引用数为0的变量回收。引用计数方法可能导致循环引用,类似死锁,导致内存泄露。
例如:
和相互引用,两个对象的引用次数都是2。函数执行完成之后,和还将会继续存在,因为他们的引用次数永远不会是0。这样的相互引用如果说很大量的存在就会导致大量的内存泄露。
补充:
常见内存泄漏的原因:
(1)全局变量引起的内存泄露
(2)闭包引起的内存泄露:慎用闭包
(3)清空或删除时,事件未清除导致的内存泄漏
(4)循环引用带来的内存泄露
ꀖ 一、原型
①所有引用类型都有一个____(隐式原型)属性,属性值是一个普通的对象
②所有函数都有一个(原型)属性,属性值是一个普通的对象
③所有引用类型的____属性指向它构造函数的
二、原型链
当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的____隐式原型上查找,即它的构造函数的,如果还没有找到就会再在构造函数的的____中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。
对象的____和构造函数的原型组成了原型链
举例,有以下代码
在中查找某个属性时,会执行下面步骤:
访问链路为:
访问路链为ꀯ1;
①一直往上层查找,直到到还没有找到,则返回
②..____ === ꀩ#68;意这里的是一个对象
③所有从原型或更高级原型中的得到、执行的方法,其中的在执行时,指向当前这个触发事件执行的对象
原文链接:【原型和原型链】什么是原型和原型链_的博客-博客_原型和原型链
一般情况使用的变量取值是在当前执行环境的作用域中查找,如果当前作用域没有查到这个值,就会向上级作用域查找,直到查找到全局作用域,这么一个查找的过程我们叫做作用域链,下级作用域可以向上级作用域不断查找,但是上级作用域不能向下级作用域查找,类似原型链
举个栗子:
可以看到 、的值改变了ꀖ 1.什么是闭包?
如果一个函数用到了它作用域外面的变量,那么这个变量和这个函数之间的环境就叫闭包。
闭包有以下个特性:
函数嵌套函数;内部函数用到了外部函数的参数和变量;参数和变量不会被垃圾回收机制回收。参数和变量不会被垃圾回收机制回收
2.用码举例
闭包使函数的私有变量不受外部干扰
是变量存于内存中不被销毁
变量 保存在父作用域中,每次访问函数 时, 在函数 中找不到变量 , 会顺着作用域链一直向上找,直到全局作用域中也没找到为止。
闭包常用于实现单例模式、柯里化、防抖、节流、模块化。
滥用闭包可能会造成内存泄漏(无用变量存于内存中无法回收,一直占用内存)。解决此问题的方法是,清除变量(设为 )。
本文链接:【闭包】什么是闭包?闭包用途_的博客-博客_闭包
ꀯ659;法四 6中的继承 使用 和进行继承
1、使用构造一个父类
2、使用构造一个子类,并使用实现继承,指向父类的原型对象
3、实例化对象
方法五:原型式继承
这里不得不提到的就是 5 里面的 . 方法,这个方法接收两个参数:一是用作新对象原型的对象、二是为新对象定义额外属性的对象(可选参数)。
通过 . 这个方法可以实现普通对象的继承,不仅仅能继承属性,同样也可以继承 的方法,请看这段代码的执行结果。
最后两个输出结果是一样的,讲到这里你应该可以联想到浅拷贝的知识点,关于引用数据类型“共享”的问题,其实 . 方法是可以为一些对象实现浅拷贝的。
辗转相除法又名欧几里得算法( )
目的是求出两个正整数的最大公约数
代码实现
ꀖ 允许数组与字符串之间相互转换。其中 方法对象定义了 3 个方法,可以把数组转换为字符串,如表所示。
数组方法ꀯ0; ꀯ84;明
()ꀯ0; ꀯ506;数组转换成一个字符串()ꀯ0; ꀯ628;数组转换成本地约定的字符串()ꀯ0; ꀯ506;数组元素连接起来以构建一个字符串
示例1
下面使用 () 方法读取数组的值。
数组中 () 方法能够把每个元素转换为字符串,然后以逗连接输出显示。
当数组用于字符串环境中时, 会自动调用 () 方法将数组转换成字符串。在某些情况下,需要明确调用这个方法。
() 在把数组转换成字符串时,首先要将数组的每个元素都转换为字符串。当每个元素都被转换为字符串时,才使用逗进行分隔,以列表的形式输出这些字符串。
其中数组 是一个数组, 会以迭代的方式调用 () 方法把所有数组都转换为字符串。
示例2
下面使用 () 方法读取数组的值。
() 方法与 () 方法用法基本相同,主要区别在于 () 方法能够使用用户所在地区特定的分隔符把生成的字符串连接起来,形成一个字符串。
在上面示例中,() 方法根据中国的使用习惯,先把数字转换为浮点数之后再执行字符串转换操作。
示例3
下面使用 () 方法可以把数组转换为字符串。
() 方法可以把数组转换为字符串,不过它可以指定分隔符。在调用 () 方法时,可以传递一个参数作为分隔符来连接每个元素。如果省略参数,默认使用逗作为分隔符,这时与 () 方法转换操作效果相同。
示例4
下面使用 () 方法把字符串转换为数组。
() 方法是 对象方法,与 () 方法操作正好相反。该方法可以指定两个参数,第 1 个参数为分隔符,指定从哪儿进行分隔的标记;第 2 个参数指定要返回数组的长度。
ꀖ 这里用原生实现
原生实现图片懒加载
图片预加载和懒加载
图片懒加载
在渲染页面的时候,先将图片用一张默认图片代替,当图片到达浏览器可视区域时,才显示真实的图片。
这样的好处是,可以减缓服务器负担,加快初始界面的渲染速度。
实现方式:
使用或定时器进行延迟加载
条件加载,符合条件或触发事件后再进行异步下载
通过滚动条监听用户距图片距离,快要到达之前进行加载
图片预加载
与懒加载相反,先将图片提前加载到缓存,用户一打开页面就能快速呈现图片。
好处是,遇到一些较大的图片时,可以避免页面慢慢渲染。但是服务器负担会增大。
实现方式:的元素会自动预加载
则常用 ()实现
ꀖ ꀩ#0; ()
ꀖ 和的区别?何时使用状态码状态码200/302/401/404/500分别代表什么意思协议中的方法,除了方法、方法和的区别协议
浏览器存储浏览器图片加载
的原理46.用过的哪些组件,导航条怎么实现的(问原理),怎么适应窗口大小?-和-有什么冲突?的-?的响应式所示怎么实现的。栅格系统,你怎么理解栅格系统
生命周期的理解-和-的作用相似,它们的区别?项目-双向绑定原理用过的哪些组件?项目用什么搭建的,搭建的时候有遇到过什么问题吗?的? ,- 的模式有?标签里面有个什么(发音一样我不知道是什么)方法还是啥东西?的作用?为什么要用它?的生命周期,哪个钩子函数可以数据请求,为什么?第三方组件的引入第三方组件的引入中有哪些生命周期函数路由跳转的方式生命周期的理解数据双向绑定的原理,用了什么设计模式(高级)的钩子函数基于什么语言的第三方组件库组件之间的传参(例如子组件和父组件之间的传参)如何实现双向据绑定?父组件子组件通信?删除数据监测不到?父组件子组件传参路由跳转的方式路由传参怎么实现?生命周期的钩子函数有哪些?和区别?
1 做用了什么框架
2 用做过什么
3 .
每一个.执行文件,都自动创建一个对象,同时,对象会创建一个叫的属性,初始化的值是 {}
在 的 模块里可以直接调用ꁎꀯ548; 两个“全局”变量,但是 是 . 的一个引用。
是 . 的一个引用. 初始值为一个空对象 {},所以 初始值也是 {} 引用模块后,返回的是 . 而不是 !!!!!. 相当于在导出对象上挂属性,该属性对调用模块直接可见 = 相当于给 对象重新赋值,调用模块不能访问 对象及其属性如果此模块是一个类,就应该直接赋值 .,这样调用者就是一个类构造器,可以直接 实例。
在 编译的过程中,会把 模块封装成如下形式:
为了将函数直接导出成模块,而不是模块的一个方法,需要
. = ;
= . = {};
例子一:
例子二:
例子三:
例子四:
例子五:
总结:要导出的东西放在.里面ꀩ#0;.={} 刚开始他是一个空对象
ꀩ#0; ꀩ#0;.={ //这里面以键值对的形式放要导出的东西ꂆ
可以使用对象的简写方式,
微信小程序获取用户信息
的生命周期?
数据库的有几个参数?和的区别,用法区别
对哪个编程语言比较熟?中在下怎么禁止.和?传统网站、响应式、、小程序的区别?除了学校和培训,你还自学有什么技术?项目中哪个是你做得比较好的,实现了什么功能项目中哪个是你做得比较好的,实现了什么功能项目中遇到兼容性问题最近两年面试题总结,答案有时间慢慢完善:购物车的实现过程(包括怎么布局,可以用、、等)购物车详情页优化(用户商品加入太多导致页面卡顿)(懒加载、分页)数据结构(排序算法,冒泡以外的)团队合作的经验通宵经历(不是玩的)课外项目(自己瞎做的那种)为什么学前端?有没有参赛或者除了学校课程内容外的经验?应该是想知道有没有合作经验是否熟悉使用者工具?有没有使用过断点调试?最近有没有在看某一本书?或者是有没有学习某一个课程?有没有什么学习的计划?
持续更新中.......
实在抱歉 由于篇幅太长,导编辑起来很卡所以没有继续编辑,ꀩ#8;行了分类其他内容放在以下链接(题目不一定相同)
前端十五道面试题_一只路过的菜鸟的博客-博客_前端面试题
十五道面试题(含答案)_一只路过的菜鸟的博客-博客_面试题
【30 道 面试题,内含详细讲解】_一只路过的菜鸟的博客-博客_的一些面试题
相关十道面试题(含答案)_一只路过的菜鸟的博客-博客_面试题
转载自-专业技术社区
版权本文为博主原创文章,遵循 4.0 - 版权协议,转载请附上原文出处链接和本。
原文链接: