面试题21

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

你可能感兴趣的:(面试题21)