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

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. 缓存

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

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

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

3. CDN

4. SSR

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

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

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

5. 懒加载

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

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

6. 缓存DOM查询

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 () {

if (timer) {

return

}

timer = setTimeout(() => {

fn.apply(this, arguments)

timer = null

}, delay)

}

}

div1.addEventListener(‘drag’, throttle(function (e) {

console.log(e.offsetX, e.offsetY)

}, 200))

三、安全

========

1. XSS跨站请求攻击


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

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

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

img

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

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

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

最后

资料过多,篇幅有限,需要文中全部资料可以点击这里免费获取前端面试资料PDF完整版!

自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。

3805926001)]

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

[外链图片转存中…(img-F8DBdUdF-1713805926001)]

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

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

[外链图片转存中…(img-YmdLcx6Y-1713805926002)]

最后

[外链图片转存中…(img-q6vBT9vc-1713805926002)]

[外链图片转存中…(img-e3rLFxEQ-1713805926002)]

资料过多,篇幅有限,需要文中全部资料可以点击这里免费获取前端面试资料PDF完整版!

自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript作为一种强大的脚本语言,可以快速搞定前端技术。在前端开发中,JavaScript可以用来实现交互效果、动画效果、表单验证、页面布局等各种功能。同时,JavaScript也可以与HTML、CSS紧密结合,使页面功能更加丰富。 为了快速搞定前端技术,需要熟练掌握JavaScript的基本语法和常用API,例如DOM操作、事件处理、定时器、Ajax等。掌握这些知识不仅可以提高开发效率,还能够让你在前端开发中发挥更大的创造性。 除了学习JavaScript的基本语法和API之外,还要多进行实战练习,掌握实际应用技巧。可以参考优秀的前端开源项目和博客,了解不同的开发思路和技术实现方法,同时也可以积累更多的经验。 最后,在进行前端开发的过程中,可以使用比较成熟的JavaScript框架和库,比如jQuery、AngularJS、React等,能够更好地提高开发效率,并且有助于让你的应用达到较好的性能和用户体验。 总之,通过深入学习JavaScript,结合实际开发实践,应用成熟的JavaScript框架和库,可以快速搞定前端技术,使自己更加成为一名优秀的前端开发工程师。 ### 回答2: JavaScript是一种高级编程语言,用于在网页上创建交互式效果。它可以被用于快速搞定前端技术一面。 JavaScript的主要优点之一是它易于学习和使用。它被广泛使用,因为它不仅简单易懂,更可以用于许多场景。JavaScript可以用于DOM操作、事件处理、动画、表单验证等多种场景,这些都是前端技术中的核心部分。 对于想要迅速入门前端技术的人来说,建议从JavaScript开始学习。有很多在线资源,比如MDN文档,可以帮助你开始认识JavaScript的基础知识和语法。同时,有很多JavaScript框架,如React、Vue、Angular等,可以让你更有效地构建大型应用程序。 另外,要想在前端技术领域获得成功,还需要学习HTML和CSS。它们是构建网页的基础。但是,通过JavaScript,你可以使这些基础更加强大。例如,你可以使用JavaScript操作HTML元素,并对其添加样式,使网页更加交互和美观。 因此,如果你想快速搞定前端技术一面,请开始学习JavaScript吧。你会发现这是一门动态、有趣且实用的编程语言,可以帮助你构建高度可交互的网页体验。 ### 回答3: JavaScript是一门运行在浏览器端的编程语言,是前端开发必备的技术之一。在JavaScript中,可以使用HTML和CSS来操作和控制页面的交互和显示效果,同时也可以通过JavaScript来实现一些复杂的功能和逻辑操作。 要快速搞定前端技术中的JavaScript,需要掌握以下几个方面: 1. 基础语法:JavaScript的基础语法包括变量、数据类型、运算符、流程控制语句等,需要掌握这些基本概念,才能编写出简单的程序。 2. DOM操作:DOM是文档对象模型的缩写,用于操作HTML和CSS。掌握DOM操作能够使前端开发更为得心应手,可以快速处理页面的展示效果。 3. AJAX:AJAX是异步JavaScript和XML的缩写,是一种用于创建快速动态网页的技术。它可以通过JavaScript异步请求数据,可以将页面刷新的时间和流量大大降低。 4. 框架和库:JavaScript拥有众多框架和库,这些工具包可以帮助前端开发者更快速地完成开发工作。例如,React、Vue.js等框架可以将前端开发极大地简化,加速前端开发效率。 总而言之,想要快速搞定前端技术中的JavaScript,需要不断学习掌握基础语法、DOM操作、AJAX等技术,同时了解一些常用的库和框架,这样便可以更好地适应前端开发的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值