前端日常问题记录

本文详细探讨了解决移动端H5click延迟的方法、网络请求中token和cookie的区别、SSO实现、HTTP与UDP区别、HTTP版本差异、HTTPS安全、WebSocket与HTTP对比,以及前端性能排查技巧,包括ChromeDevTools和Lighthouse工具的应用。
摘要由CSDN通过智能技术生成

1.移动端H5 click有300ms延迟,如何解决?

背景double tap to zoom:

在这里插入图片描述

初期解决方案FastClick

在这里插入图片描述

fastclick原理:

  • 监听touchend事件(touchstart touchend 会先于click 触发)
  • 使用自定义DOM事件模拟一个click事件
  • 把默认的click事件(300ms之后触发)禁止掉

现在浏览器的改进

在这里插入图片描述
该属性表示已经是响应式处理,不需要缩放,就不会需要双击延迟

2.网络请求中,token和cookie有什么区别?

cookie

  • HTTP无状态,每次请求都要带cookie,以帮助识别身份
  • 服务端也可以向客户端set-cookie,cookie大小限制4kb
  • 默认有跨域限制:不可跨域共享、传递cookie(虽然是默认,但是也可以通过手段完成)
    传递:withCredentials
    在这里插入图片描述
    服务起端也要设置

cookie本地存储

  • HTML5之前cookie常被用于本地存储
  • HTML5之后推荐适用localStorage和sessionStorage

现代浏览器禁止第三方cookie

  • 和跨域限制不同,这里是:禁止网页引入的第三方JS设置cookie
  • 打击第三方广告,保护用户隐私
  • 新增属性 SameSite: Strict/Lax/None; 值可自己选择

cookie和session

  • cookie用于登录验证,存储用户标识(如userid)
  • session在服务端,存储用户详细信息,和cookie信息一一对应
  • cookie+session是常见登录验证解决方案
    在这里插入图片描述

token vs cookie

  • cookie是HTTP规范的一种,token是自定义传递

  • cookie会默认被浏览器存储,而token需自己存储

  • token默认没有跨域限制

  • cookie:HTTP标准;跨域限制;配合session使用

  • token:无标准;无跨域限制;用于JWT

JWT (JSON Web Token)

  • 前端发起登录,后端验证成功之后,返回一个加密的 token
  • 前端自行存储这个 token (其中包含了用户信息,加密了)
  • 以后访问服务端接口,都带着这个 token,作为用户信息

session和JWT哪个更好

没有那哪个更好,只是适合什么场景

session:
优点

  • 原理简单,易于学习
  • 用户信息存储在服务端,可快速封禁某个用户

缺点:

  • 占用服务器内存,硬件成本高
  • 多进程、多服务器时,不好同步——需要使用第三方缓存,如redis
  • 默认有跨域限制

JWT:
优点

  • 不占用服务端内存
  • 多进程、多服务器不影响
  • 没有跨域限制

缺点

  • 用户信息存储在客户端,无法快速封禁某用户
  • 万一服务端秘钥被泄漏,则用户信息全部丢失
  • token体积一般大于cookie,会增加请求数量

如有有严格管理用户信息的要求,推荐session
如果没有特殊要求,则使用JWT(如创业初期的网站)

3.如何实现SSO单点登录

基于cookie

  • cookie默认不可跨域共享,但有些情况可设置为共享
  • 主域名相同,如www.baidu.com image.baidu.com
  • 设置cookie domain为主域名,即可共享cookie

SSO

  • 主域名完全不同,则cookie无法共享
  • 可以使用SSO技术方案

4.HTTP协议和UDP协议有什么区别?

网络协议

  • HTTP是在应用层
  • TCP和UDP是在传输层
  • 严格来说是要拿TCP和UDP来对比
    在这里插入图片描述

TCP协议

  • 有连接(三次握手)
  • 有断开(四次挥手)
  • 稳定传输

UDP协议

  • 无连接,无断开
  • 不稳定传输,但效率高
  • 如视频会议,语音通话

5、HTTP协议1.0 1.1 2.0有什么区别?

HTTP1.0

  • 最基础的HTTP协议
  • 只支持GET POST方法

HTTP1.1(比较常用)

  • 缓存策略cache-control E-tag等
  • 支持长连接Connection:keep-alive ,一次TCP连接多次请求
  • 断点续传 ,状态码206
  • 支持新的方法PUT DELETE方法,可用于Restful API

HTTP2.0

  • 可压缩header,减少体积
  • 多路复用,一次TCP连接中可多个HTTP并发请求
  • 服务端推送

6、什么是HTTPS中间人攻击?如何预防?

HTTPS加密传输

  • HTTP明文传输
  • HTTPS加密传输 HTTP+TLS/SSL

在这里插入图片描述

7、script defer和async有什么区别?

在这里插入图片描述

  • 无:HTML暂停解析,下载JS,执行JS,再继续解析HTML
  • defer:HTML继续解析,并行下载,HTML解析完再执行JS
  • async:HTML继续解析,并行下载,执行JS,再继续解析HTML

8、prefetch 和 dns-prefetch 有什么区别?

preload和prefetch

  • preload资源在当前页面使用,会优先加载
  • prefetch资源在未来页面使用,空闲时加载
    在这里插入图片描述

dns-prefetch和preconnet

  • dns-prefetch即DNS预查询
  • preconnet即DNS预连接
    在这里插入图片描述

prefetch 是资源预获取(和 preload 相关)
dns-prefetch 是 DNS 预查询(和 preconnect 相关)

9、前端攻击有哪些?该如何预防?

XSS

  • Cross Site Script 跨站脚本攻击
  • 手段:黑客将js代码插入到网页内容中,渲染时执行JS代码
  • 预防:特殊字符替换(前端或者后端)
    在这里插入图片描述

CSRF

  • Cross Site Request Forgery 跨站请求伪造
  • 手段:黑客诱导用户去访问另一个网站的接口,伪造请求
  • 手段:严格控制跨域+验证码机制

CSRF详细过程:
用户登录了 A 网站,有了 cookie
黑客诱导用户到 B 网站,并发起 A 网站的请求
A 网站的 API发现有 cookie,认为是用户自己操作的

解决:
严格的跨域请求限制,如判断 referrer (请求来源 )
为 cookie 设置 SameSite,禁止跨域传递 cookie
关键接口使用短信验证码

点击劫持(Click Jacking)

  • 手段:诱导界面上蒙一个透明的iframe,诱导用户点击
  • 预防:让iframe不能跨域加载
    在这里插入图片描述

DDos(Distribute denial-of-service 分布式拒绝服务)

  • 手段:分布式的、大规模的流量访问,使服务器瘫痪
  • 预防:软件层不好做,需硬件预防(如阿里云 WAF)

SQL注入

  • 手段:黑客提交内容时写入 SOL语句,破坏数据库
  • 预防:处理输入的内容,替换特殊字符

10、WebSocket和HTTP有什么区别?

WebSocket

  • 支持端对端通讯(可以从client发起,也可以由server发起)
  • 用于:消息通知,直播间讨论区,聊天室,协调编辑
    简单demo
    在这里插入图片描述
    本地起服务:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

WebSocket连接过程

  • 先发起一个HTTP请求
  • 成功之后再升级到 WebSocket协议,再通讯
    在这里插入图片描述

区别:

  • WebSocket协议名是ws://,可双端发起请求
  • WebSocket没有跨域限制
  • 通过 send 和 onmessage 通讯(HTTP 通过 req和 res )
    在这里插入图片描述

Websocket和HTTP长轮询的区别?

在这里插入图片描述

  • HTTP 长轮询:客户端发起请求,服务端阻塞,不会立即返回
  • WebSocket:客户端可发起请求,服务端也可发起请求

11、描述从输入url到页面展示的完整过程

  • 网络请求
  • 解析
  • 渲染

网络请求

  • DNS查询(得到IP),建立TCP连接(三次握手)
  • 浏览器发起HTTP请求
  • 收到请求响应,得到HTML源代码

继续请求静态资源

  • 解析HTML过程中,遇到静态资源还会继续发起网络请求
  • js css 视频等
  • 注意:静态资源有可能强缓存,此时不必请求

解析:字符串——>结构化数据

  • HTML构建DOM树
  • CSS构建CSSOM树(style tree)
  • 两者结合,形成render tree

优化解析:
css放在 < head >中,不要异步加载CSS
JS放在body最下面(或者合理使用defer async)
img提前定义好width、height

渲染:Render Tree绘制到页面

  • 计算各个DOM的尺寸、定位,最后绘制到页面
  • 遇到js可能执行(参考defer async)
  • 异步css、图片加载,可能会触发重新渲染

12、重绘repaint和重排 reflow有什么区别?

重绘repaint

  • 元素外观改变,如颜色、背景色
  • 但元素的尺寸、定位不变,不会影响其他元素的位置

重排reflow

  • 重新计算尺寸和布局,会影响其他元素的位置
  • 如元素高度增加,可能会使相邻元素位置下移

区别:
重排比重绘要影响更大,消耗也更大
所以,要尽量避免无意义的重排

减少重排方式:

  • 集中修改样式,或直接切换 css class
  • 修改之前先设置 display: none,脱离文档流
  • 使用 BFC 特性,不影响其他元素位置
  • 频繁触发(resize scroll)使用节流和防抖
  • 使用 createDocumentFragment批量操作 DOM
  • 优化动画,使用CSS3和requestAnimationFrame

15、如何实现网页多标签通讯?

WebSocket

  • 无跨域限制
  • 需要服务端支持,成本高

通过localStorage通讯

  • 同域的A和B两个页面
    A 页面设置 localStorage
    B 页面可监听到localStorage 值的修改
    A页面:
    在这里插入图片描述
    B页面:
    在这里插入图片描述

通过SharedWorker通讯

  • SharedWorker是WebWorker 的一种
  • WebWorker 可开启子进程执行JS,但不能操作 DOM
  • SharedWorker可单独开启一个进程,用于同域页面通讯

答案

  • WebSocket 需要服务端,成本较高
  • localStorage简单易用,推荐
  • SharedWorker 调试不方便,不兼容 IE11

16、网页和iframe如何通讯?

在这里插入图片描述
在这里插入图片描述

  • 使用postMessage通讯
  • 注意跨域的限制和判断

17、如果一个H5很慢,你该如何排查性能问题?

首先问是哪里很慢,是首页加载慢?还是哪里操作慢?细化问题,还有咱们这个有啥标准吗?

前端性能指标

  • First Paint(FP)第一次渲染
  • First Contentful Paint(FCP)第一次有内容的渲染
  • First Meaningful Paint(FMP)–以弃用,改用 LCP 第一次有意义的渲染
  • DomContentLoaded (DCL) 页面DOM加载完成
  • Largest Contentfull Paint (LCP) 页面最大的内容渲染完
  • Load(L)全部加载完成

Chrome devTools

  • Performance可查看上述性指标,并有网页快照
  • Network 可以查看各个资源的加载时间

Lighthouse

  • 非常流行的第三方评测性能工具
    在这里插入图片描述
  • 如果是网页加载慢
    优化服务端硬件配置,使用CDN
    路由懒加载,大组件异步加载 - 减少主包的体积
    优化HTTP缓存策略
  • 如果是网页渲染慢
    优化服务端接口(如 Ajax 获取数据慢)
    继续分析,优化前端组件内部的逻辑(参考 Vue React 优化)
    服务端渲染 SSR
  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值