前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解:如何监控小程序异常及处理错误?

详解:如何监控小程序异常及处理错误?

作者头像
极乐君
发布2020-08-20 15:30:11
5K0
发布2020-08-20 15:30:11
举报
文章被收录于专栏:极乐技术社区极乐技术社区

对于小程序开发者来说,其中的错误监控一直是个头疼的问题。由于小程序开发迭代较快,会存在系统问题,机型问题和版本的兼容问题,有时候我们在自行测试中完美运行,可总是有用户抱怨使用异常。

如果我们对小程序的错误进行有效的监控,可以帮助小程序开发者发现异常,优化代码,用户体验也会随着优化逐步的提升。

由于线上环境复杂,一些问题只会在特定网络环境或者设备上发生,对于这类问题,异常信息的收集就显得格外重要了,我们不但希望收集错误的堆栈信息,还需要用户操作流程,设备信息等,以便复现错误。

作为一个小程序开发者,如果你对前端开发比较熟悉,那么在错误监控方面可能会更快的上手。因为小程序错误监控和Web端错误监控本身就具有很多相似性,因此监控的数据规则基本是一致的,但由于小程序自身的特性,在错误监控方面会有以下不同:

  • 在Web端我们监测的是页面完整的url,而小程序端监测的是路由地址;
  • 小程序页面属于微信内部的页面,使用时已全部加载完毕,因此监控页面性能时不统计页面加载时长等信息,更多的是对页面内请求、资源请求和用户行为的监控;
  • 由于微信官方和小程序代码的要求,集成方式对比Web端会相对严格一些。

1

小程序异常监控收集

web端与小程序错误监控差异

在 Web 端监测的是页面完整的 url,而小程序端监测的是路由地址; 小程序页面属于app内部的页面,使用时已全部加载完毕,因此监控页面性能时不统计页面加载时长等信息,更多的是对页面内请求、资源请求和用户行为的监控;

由于微信官方和小程序代码的要求,集成方式对比 Web 端会相对严格一些。

小程序需要监控的数据

  • JavaScript异常监控:不论是 Web 端还是小程序端,对 JavaScript 异常的监控都是必要的;
  • 页面内请求监控:对于小程序来说,需要统计发送网络请求的 swan.request() 异常时的请求状态、请求时长、请求地址等; 资源加载监控:当需要下载资源到本地的
  • swan.downloadFile() 出现异常时,统计加载时间、异常类型、资源地址等;
  • 页面性能监控:访问监控、页面来源及流向监控等,方便更好的对小程序进行运营;
  • 用户数据统计:用户的分布、操作系统及版本、app版本、IP 地址等,给错误的分析提供更多条件。

简单收集

小程序App()生命周期里提供了onError函数,可以通过在onError里收集异常信息,具体原理可查看JS实现监控微信小程序的原理

代码语言:javascript
复制
App({
      // 监听错误
      onError: function (err) {
          // 上报错误
          swan.request({
          url: "https://url", // 自行定义报告服务器
          method: "POST",
          errMsg: err          })
      }
  })  

用户操作路径收集

一些较隐蔽的错误如果只有错误栈信息,排查起来会比较难,如果有用户操作的路径,在排查时就方便多了。

暴力打点方法收集

  • 优点:简单直接
  • 缺点:污染业务代码,造成较多垃圾代码

函数劫持

需要在App函数中的onLaunch、onShow、onHide生命周期插入监控代码,通过重写App生命周期函数来实现。

代码语言:javascript
复制
  App = function(app) {
      ["onLaunch", "onShow", "onHide"].forEach(methodName => {
          app[methodName] = function(options) {
          // 构造访问日志对象
          var breadcrumb = {
              type: "function",
              time: utils.now(),
              belong: "App", // 来源
              method: methodName,
              path: options && options.path, // 页面路径
              query: options && options.query, // 页面参数
              scene: options && options.scene // 场景编号
          };
          self.pushToBreadcrumb(breadcrumb); // 把执行对象加入到面包屑中
      })
  }

但是这样写,会把用户自定义的内容给覆盖掉,所以还需要把用户定义的函数和监控代码合并。

代码语言:javascript
复制
var originApp = App // 保存原对象App = function(app) {
    // .... 此处省略监控代码
    // .... 此处省略监控代码
    originApp(app) // 执行用户定义的方法}  

小程序性能监控插件

Fundebug提供网站、微信小程序和小游戏的bug监控服务,例如:API的一些函数调用情况、监控函数调用的参数、收集HTTP请求错误的body、监控某些特定的自定义函数等。

FrontJS 的小程序错误监控相比于微信小程序后台的数据监控,增加了对于错误的统计和产生错误的相关用户分析,FrontJS可以收集精细到 console.log级别的任JavaScript异常信息并提供stack trace信息;

对于任何一条错误信息或访问,它都会统计到该用户IP、屏幕分辨率、DPR、操作系统类型和微信版本,方便更有针对性的去调试出现的错误。

百度数据统计分析展示平台提供对web页面的性能、访问点击、js异常、浏览器新特性、跨站资源、XSS漏洞、自定义事件、Native性能检测服务,对 百度小程序 的支持还需进一步调研。

白屏监控

用户在访问网页的时候,在浏览器开始显示之前都会有一个的白屏过程,在移动端,受限于设备性能和网络速度,白屏会更加明显。

白屏时间

页面完全空白的时间,web可以在页面的head底部添加的JS代码用来做白屏时间的标记。

微信web资源离线存储

通过使用微信离线存储,Web开发者可借助微信提供的资源存储能力,直接从微信本地加载 Web 资源而不需要再从服务端拉取,从而减少网页加载时间,为微信用户提供更优质的网页浏览体验。每个公众号下所有 Web App 累计最多可缓存 5M 的资源。这个设计有点类似 HTML5 的 Application Cache。

2

总结

前端的错误监控是一个任重而道远的任务,它的存在对任何前端开发都起一个相当重要的作用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极乐技术社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档