快速搞定前端JS面试 -- 第十二章 运行环境 (页面加载、性能优化、安全)

4. Window.onload和DOMContentLoaded

二、性能优化

1、性能优化原则

2、如何入手性能优化

1. 资源合并

2. 缓存

3. CDN

4. SSR

5. 懒加载

6. 缓存DOM查询

7. 尽早开始JS执行

8. 防抖

9. 节流

三、安全

1. XSS跨站请求攻击

2. XSRF跨站请求伪造

问题解答

1. 从输入url到显示出页面的整个过程

2. Window.onload和DOMContentLoaded区别

3. 为何把css放在中

4. 为何把js放在最后

5. html中css写在前js写在后的优点

6. 如何入手性能优化

7. 防抖节流以及手写代码

8. 常见的Web前端攻击方式有哪些


运行环境即浏览器(server端有nodejs)

下载页面代码,渲染出页面,期间会执行若干JS

要保证代码在浏览器中:稳定且高效

一、页面加载过程

============

1. 资源的形式


(1)Html代码

(2)媒体文件,如图片,视频等

(3)JavaScript css

2. 渲染过程


(1)根据HTML代码生成DOM树

(2)根据CSS代码生成CSSOM(CSS对象模型)

(3)将DOM树和CSSOM整合形成Render Tree(渲染树)

(4)根据Render Tree渲染页面

3. 页面加载过程


(1)根据HTML代码生成DOM树

(2)根据CSS代码生成CSSOM(CSS对象模型)

(3)将DOM树和CSSOM整合形成Render Tree(渲染树)

(4)根据Render Tree渲染页面

(5)遇到

(6)直至把Render Tree渲染完成

4. Window.onload和DOMContentLoaded


Window.addEventLiatener(‘load’, function() {

// 页面的全部资源加载完才会执行,包括图片视频等

})

Document.addEventListener(‘DONContentLoaded’, function() {

// DOM渲染完成即可执行,此时图片视频可能还没有加载完成

})

二、性能优化

==========

是一个综合问题,没有标准答案,但是要求尽量全面

细节问题:手写防抖、节流

1、性能优化原则


(1)多使用内存、缓存或者其他方法

(2)减少CPU计算量,减少网络加载耗时(空间换时间)

2、如何入手性能优化


加载更快

(1)减少资源体积:压缩代码

(2)减少访问次数:合并代码,SSR服务器端渲染,缓存

(3)使用更快的网络:CDN

渲染更快/流畅

(1)CSS放在head,JS放在body最下面

(2)尽早开始执行JS,用DOMContentLoaded触发

(3)懒加载(图片懒加载,上滑加更多)

(4)对DOM查询进行缓存

(5)频繁DOM操作,合并到一起插入DOM结构

(6)节流throttle和防抖debounce

1.资源合并

2. 缓存

![](https://img-blog.csdnimg.cn/202005151739034.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NhYnJpbmFfY2M=,size_16,color_FFFFFF,t_70)

静态资源加载hash后缀,根据文件内容计算hash

文件内容不变,则hash不变,则url不变

Url和文件不变,则会自动触发http缓存机制,返回304

3. CDN

![](https://img-blog.csdnimg.cn/20200515174002462.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NhYnJpbmFfY2M=,size_16,color_FFFFFF,t_70)

4. SSR

服务器端渲染:将网页和数据一起加载,一起渲染

非SSR(前后端分离):先加载网页,网页Ajax加载数据,发送请求返回请求,返回之后再渲染数据

早期的JSP ASP PHP 现在的vue React SSR

5. 懒加载

场景:一个较长的新闻列表,有很多张图片,不希望图片一下子就加载完成,随着滑动页面图片逐渐被加载出来。

实现方法:把图片的路径设置为preview.png预览,而把真正的图片地址放在data-
realsrc里面。只有当浏览器判断当图片被滑动到露出屏幕时,再去加载图片。

6. 缓存DOM查询

![](https://img-blog.csdnimg.cn/20200515174150104.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NhYnJpbmFfY2M=,size_16,color_FFFFFF,t_70)

![](https://img-blog.csdnimg.cn/20200515174158205.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NhYnJpbmFfY2M=,size_16,color_FFFFFF,t_70)

7. 尽早开始JS执行

8. 防抖

场景:监听一个输入框,文字变化后触发change事件。直接用keyup事件,则会频繁触发change事件

防抖:函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时

用户输入结束或者暂停时,才会触发change事件

// 防抖封装

function debounce(fn, delay = 500) {

// timer 是闭包中的

let timer = null

// 返回一个函数

return function () {

if (timer) {

clearTimeout(timer)

}

timer = setTimeout(() => {

fn.apply(this, arguments)

timer = null

}, delay)

}

}

input1.addEventListener(‘keyup’, debounce(function (e) {

console.log(e.target)

console.log(input1.value)

}, 600))

9. 节流

场景:拖拽一个元素时,要随时拿到该元素被拖拽的位置

直接使用drag事件则会频繁触发,很容易导致卡顿

节流:函数节流(throttle):当持续触发事件时,保证一定时间段内只调用一次事件处理函数。

无论拖拽速度多快,都会每隔固定事件如100ms触发一次

// 节流函数

function throttle(fn, delay = 100) {

let timer = null

return function () {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

![img](https://img-
blog.csdnimg.cn/img_convert/7477e2819c2621642518c64619f85dc3.jpeg)

![](https://img-
blog.csdnimg.cn/img_convert/f229fd8c5052929125deb046526ee4b0.png)

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

![](https://img-
blog.csdnimg.cn/img_convert/21a81cc1feb1ef0973f3cbfc535fed18.png)

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

![](https://img-
blog.csdnimg.cn/img_convert/28005975575bb8ee4418a51190f6330c.jpeg)

结尾

正式学习前端大概 3
年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。

以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。

戳这里获取前端学习资料

有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

[外链图片转存中…(img-ZGMOt7Eq-1713283391843)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

![](https://img-
blog.csdnimg.cn/img_convert/28005975575bb8ee4418a51190f6330c.jpeg)

结尾

正式学习前端大概 3
年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。

以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。

戳这里获取前端学习资料

![前端学习书籍导图-1](https://img-
blog.csdnimg.cn/img_convert/85d381a593788585124c57cfd48550ab.webp?x-oss-
process=image/format,png)

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

扫码领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值