1.手写promise封装axios
2.如何解决回调地狱
3.请详解移动端点透发生场景、原因及解决方案(最优)
4.详述前端性能优化的手段
5.浏览器输入网址回车发生了什么
6.页面的渲染过程
7.列举你知道的浏览器内核
8.如何优化SPA首屏加载慢的问题
1.手写promise封装axios
promise 封装 axios
发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态,XMLHttpRequest对象提供了onreadyStateChange事件实现这一功能。这类似于回调函数的做法。
简单说服务器已经收到了请求,但是不知道怎么处理onreadyStateChange事件就是给我们提供了一个回调函数,在这个回调函数里,来执行我们要得到的操作,还有一个readyState属性
readyState属性发生改变时触发的,readyState的值表示了当前请求的状态,在事件处理程序中可以根据这个值来进行不同的处理。 readyState有五种可取值0:尚未初始化,1:正在加载,2:加载完毕,3:正在处理;4:处理完毕。一旦readyState属性的值变成了4,就可以从服务器返回的响应数据进行访问了。
2.如何解决回调地狱
一、拆解function
二、事件发布/监听模式
三、Promise
四、Generator
五、async/await
3.请详解移动端点透发生场景、原因及解决方案(最优)
点透问题出现的场景
当A/B两个层上下z轴重叠,上层的A点击后消失或移开(这一点很重要),并且B元素本身有默认click事件(如a标签)或绑定了click事件。在这种情况下,点击A/B重叠的部分,就会出现点透的现象。
总结如下:
A/B两个层上下z轴重叠(上下重叠,A盖着B)。
上层的A点击后消失或移开。(这一点很重要)
B元素本身有默认click事件(如a标签) 或 B绑定了click事件。
点透问题的出现原因
点透问题出现的原因就是因为我们上边说过的移动端click事件300ms延迟问题,当点击上层元素时,先触发touchstart事件,然后在300ms后会触发click事件,而此时上层元素已经消失,所以下边的元素会触发click事件,这就是点透
点透问题的解决方案
1、fastclick.js
fastclick.js既然可以解决click300ms延迟,那必然可以解决点透问题,使用方法如上文所述。
2、对于B元素本身存在默认click事件的情况,使用touchend代替touchstart事件并阻止掉时A元素touchend的默认行为
preventDefault(),因为触发touchend需要200ms,从而阻止click事件的产生。
3、使用一个(透明)遮罩层,屏蔽所有事件,然后400ms(对于IOS来说是个理想值)后自动隐藏
4、延迟一定的时间(300ms+)来处理事件
5、直接使用click事件,不考虑延迟问题
6、下层避开click事件,如a链接改为span等标签,使用js跳转页面
4.详述前端性能优化的手段
1.减少http请求数
常用的减少http请求数有以下几种:
1)合并图片。当图片较多时,可以合并为一张大图,从而减少http请求数。经常变化的图片可能不太合适,变化相对稳定的就可以考虑。合并大图除了能减少http 请求数外,还可以充分利用缓存来提升性能。
2)合并压缩css样式表和js脚本,他们的共同目的都是为了减少http连接数。
3)去掉不必要的请求。开发写代码或者系统升级之后残留的无效请求连接。
4)充分利用缓存。这里说的缓存是客户端侧缓存或者说浏览器缓存。Expires头信息是客户端侧缓存的重要依据,格式类似于Expires:sun ,20 Dec 2017 23:00:00 GMT。 如果当前时间小于Expires指定的时间,浏览器就会从缓存中直接获取相关的数据信息或html文件,如果当前时间大于Expires指定的时间,浏览器会向服务器发送请求来获取相关数据信息。
以Apache为例,可在Apache的配置文件httpd.conf中设置Expires。
2.图片优化
优化方法:
1)尽可能的使用PNG格式的图片,它相对来说体积较小。
2)对于不同格式的图片,在上线之前最好进行一定的优化。
3)图片的延迟加载,也叫做赖加载。
3.使用CDN
CDN即内容分发网络,可以使用户就近取得所需内容,解决网络拥挤的状况,提高用户访问网站的响应速度。
4.开启GZIP
GZIP即数据压缩,用于压缩使用Internet传输的所有文本资源。开启GZIP的方法很简单,到对应的web服务配置文件中设置一下即可。以Apache为例,在配置文件httpd.conf中添加。
5.样式表和JS文件的优化
一般我们会把css样式表文件放到文件的头部。比如,放到
标签中,这样可以让CSS样式表尽早地完成下载。对应js脚本文件,一般我们把他放到页面的尾部。6.使用无cookie域名
无cookie域名的概念:当发送一个请求时,同时还要请求一张静态的图片和发送cookie时,服务器对于这些cookie不会做任何使用,也就是说这些cookie没什么用,没不要随请求一同发送。
7.前端代码结构的优化
5.浏览器输入网址回车发生了什么
1.对www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址
2.根据这个IP,找到对应的服务器,发起TCP的三次握手
3.建立TCP连接后发起HTTP请求
4.服务器响应HTTP请求,浏览器得到html代码
5.浏览器解析html代码,并请求html代码中的资源(如js、css图片等)(先得到html代码,才能去找这些资源)
6.浏览器对页面进行渲染呈现给用户
6.页面的渲染过程
1.用户的请求数据通过控制器交给模型来处理(图中的2)
2.模型根据用户的请求数据,在数据库中查询,调用相应的数据返回给控制器(图中的345)
3.控制器得到数据库返回数据后,交给视图模板填充形成页面的模板(页面基本的代码成型)
4.视图模板填充好后,把数据反馈给控制器
5.控制器将数据反馈给浏览器
6.浏览器得到数据后,进行相应的渲染,呈现给用户。
7.列举你知道的浏览器内核
1、Trident内核:IE最先开发或使用的,也称IE内核,360浏览器使用的也是IE内核;
2、blink内核(之前是Webkit内核):谷歌chrome浏览器最先开发或使用,也叫谷歌内核,枫树浏览器、太阳花使用的也是谷歌内核;
3、Gecko内核: Netscape6开始采用的内核,后来的Mozilla FireFox (火狐浏览器) 也采用了该内核,K-Meleon浏览器也是使用这种内核;
4、Presto内核:目前只有Opera浏览器采用该内核
此外,由于IE浏览器在国内的普及率非常高,所以造成了很多网上银行和支付系统只支持IE的Trident内核,其他浏览器访问根本无法进行正常支付和转账等业务。这就造成了经常在网上购物的人离不开Trident内核的IE浏览器。但是Trident内核的速度和兼容性上又是在比不上Chrome浏览器的WebKit内核和Firefox浏览器的Gecko内核。于是双核浏览器应运而生,比如傲游、枫树浏览器(ChromePlus)、搜狗高速浏览器
8.如何优化SPA首屏加载慢的问题
1、安装动态懒加载所需插件
2、去掉.extract ()
3、配置 output 输出形式
4、配置 externals
5、在首页 HTML 挂载点之前引入静态资源 CDN
6、配置 vue 路由
------form 小曼很nice