页面性能以及错误监控

页面性能

提升页面性能的方法有哪些

  • 资源压缩合并,减少HTTP请求
  • 非核心代码异步加载
  • 利用浏览器缓存
  • 使用CDN
  • 预解析DNS
//开启DNS预解析,因为在一些情况下a连接没有默认开启DNS预解析
<meta http-equiv="x-dns-prefetch-control" content="on" />
//设置dns-prefetch:
<link rel="dns-prefetch" href="http://bdimg.share.baidu.com" />

异步加载

异步加载的方式
  • 动态脚本加载
    动态创建一个script标签添加到HTML
  • defer
  • async
异步加载的区别
  • defer是在HTML解析完之后才执行,如果是多个,按照加载顺序执行
  • async是在加载完之后立刻执行,执行顺序和加载顺序无关

浏览器缓存

强缓存

指的是不发送请求直接使用该缓存

  1. Expires: TUE,5 FEB 2019, 22:55:00 GMT 绝对时间,会根据本地时间来判断缓存是否过期,但是本地时间跟服务器时间可能不一样,可能会出现偏差
  2. Cache-Control: max-age = 3600 相对时间 从拿到文件起开始算

协商缓存

指的是发送请求确定是否使用缓存

  1. Last-Modified/If-Modified-Since
    二者的值都是GMT格式的时间字符串,具体过程:
    • 浏览器第一次跟服务器请求一个资源,服务器在返回这个资源的同时,在respone的header加上Last-Modified的header,这个header表示这个资源在服务器上的最后修改时间
    • 浏览器再次跟服务器请求这个资源时,在request的header上加上If-Modified-Since的header,这个header的值就是上一次请求时返回的Last-Modified的值
    • 服务器再次收到资源请求时,根据浏览器传过来If-Modified-Since和资源在服务器上的最后修改时间判断资源是否有变化,如果没有变化则返回304 Not Modified,但是不会返回资源内容;如果有变化,就正常返回资源内容。当服务器返回304 Not Modified的响应时,response header中不会再添加Last-Modified的header,因为既然资源没有变化,那么Last-Modified也就不会改变,这是服务器返回304时的response header
  2. Etag/If-None-Match
    这两个值是由服务器生成的每个资源的唯一标识字符串,只要资源有变化就这个值就会改变;其判断过程与Last-Modified/If-Modified-Since类似,与Last-Modified不一样的是,当服务器返回304 Not Modified的响应时,由于ETag重新生成过,response header中还会把这个ETag返回,即使这个ETag跟之前的没有变化。

错误监控

前端错误的分类

  1. 即时运行错误: 代码错误
  2. 资源加载错误 CSS文件,图片等资源文件

错误的捕获方式

  1. 即时运行错误
    • try...catch...
    • window.onerror
  2. 资源加载错误
    • object.onerror
    • performance.getEntries()
    • Error事件捕获
  3. 延伸:跨域JS可否捕获到错误
    • 可以,但是只能获得Script error,没有详细错误信息。
    • 如何获取详细错误信息
      1. 前端: script标签添加crossorigin属性
      2. 服务端: 响应头添加 Access-Control-Allow-Origin: *

上报错误的原理

  • 采用Ajax通信的方式上报
  • 采用image对象上报
(new Image()).scr = 'http://www.baidu.com'
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 浏览器对于请求资源, 流程如图所示: 可以看到浏览器的缓存机制分为两个部分: 1、当前缓存是否过期? 2、服务器中...
    zhoulujun阅读 4,962评论 0 3
  • 0 前言 在前端开发中,性能一直都是被大家所重视的一点,然而判断一个网站的性能最直观的就是看网页打开的速度。其中提...
    七寸知架构阅读 12,917评论 7 58
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 7,763评论 0 6
  • #iOS网络缓存扫盲篇 #--使用两行代码就能完成80%的缓存需求 下篇预告:[使用80%的代码来完成剩下的20%...
    coding_chen阅读 6,333评论 0 11
  • 浏览器缓存,也就是客户端缓存,既是网页性能优化里面静态资源相关优化的一大利器,也是无数web开发人员在工作过程不可...
    强哥科技兴阅读 1,241评论 0 1