-
浏览器输入url到页面呈现的过程
- 资源加载
1)DNS解析:将域名解析为ip地址
2)浏览器通过ip地址向服务器发送http请求
3)服务器响应数据 - 页面渲染
1)将html文件解析为DOM tree
2)将css文件解析为CSSDOM
3)将DOM tree和CSSDOM合并形成名为Render tree的渲染树
4)若遇到js代码,会执行js代码,完成后继续渲染Render tree
-
window.onload和DOMContentLoaded的区别
| 时间 | 含义 |
|---|---|
| window.onload | 页面全部资源加载完毕才执行,包括图片视频等媒体文件 |
| DOMContentLoaded | DOM渲染完成即可执行,此时图片等媒体文件可能还未加载完成 |
-
前端性能优化
原则:尽量使用缓存、内存,减少CPU计算,减少网络加载耗时(空间换时间)
- 减小资源体积:压缩代码
- 减少访问次数:合并代码,服务端渲染SSR,缓存
- 使用更快的网络:CDN
- css放在head中,js放在最底部
- js执行尽早,在DOMContentLoaded中执行
- 懒加载(图片懒加载,上划加载)
- 对DOM查询进行缓存
- 频繁操作DOM,合并到一起插入DOM结构中
- 防抖debounce 节流throttle
-
手写防抖debounce和节流throttle
防抖的应用场景:
1. 搜索框实时搜索:在搜索框中输入关键词时,防抖可以延迟请求发送,只在用户输入完成或者停顿一段时间后才触发实际的搜索请求,避免频繁的网络请求。
2. 窗口大小调整:当用户调整浏览器窗口大小时,窗口大小变化事件会连续触发,使用防抖可以确保只在用户完成调整后再执行相应的响应逻辑,以避免过多的布局计算。
节流的应用场景:
1. 页面滚动加载:在无限滚动的页面中,滚动事件会频繁触发,使用节流可以控制数据加载的频率,防止短时间内多次加载数据,提高页面加载性能。
2. 按钮防重复点击:当用户点击按钮执行某个操作时,使用节流可以确保按钮在一定时间内只能触发一次,防止用户重复点击造成误操作。
//防抖
function debounce(fn,delay){
let timer=null
return function(){
if(timer){
clearTimeout(timer)
}
timer=setTimeout(() => {
fn.apply(this,arguments)
timer=null
}, delay);
}
}
//节流
function throttle(fn,delay){
let timer=null
return function(){
if(timer){
return
}
timer=setTimeout(() => {
fn.apply(this.arguments)
timer=null
}, delay);
}
}
-
前端XSS攻击与XSRF攻击
| 含义 | 措施 | |
|---|---|---|
| XSS | 跨站脚本攻击,用户输入插入script脚本 | 对用户输入的特殊字符进行转义 |
| XSRF | 跨站请求伪造,通过隐藏的图片链接伪造请求 | 使用post请求,增加验证 |