自动化兼容性检查和解决方案:应用不会再白屏了(一)

简介: 自动化兼容性检查和解决方案:应用不会再白屏了

引言


对于前端开发者来说,caniuse网站是一个非常有用的工具,它可以帮助我们查询JavaScript API在不同浏览器版本中的兼容性情况。以fetch为例,我们可以在网站上查到其兼容性如下图所示:

image.png

fetch('http://domain/service', { method: 'GET' })
  .then(response => response.json())
  .then(json => console.log(json))
  .catch(error => console.error('error:', error));

但是人工保证 API 的兼容性是不可靠的,下面我分享一个真实发生的案例来分享本文的主题自动化兼容性检查和解决方案


线上事故

最近发生了一起线上事故,让我深感惋惜。事情是这样的,小飞是刚毕业不久的前端应届生,7月份本该是他转正的日子。然而,不久前,由于他的一个小问题,导致线上APP H5页面出现了白屏,造成了部分业务损失。小飞同学主要负责借贷业务,这类业务涉及C端用户,而且涉及金钱,所以问题的严重性不言而喻。最终,这次事故导致他的转正申请未能通过,实在是遗憾。


事故原因

后来,小飞问我,该如何尽量避免这种白屏问题。他提到,在回归测试阶段,测试同学告诉他没有问题,结果线上用户才反馈白屏问题。我的第一反应是询问他是否有JS报错导致的问题。事实上,这确实是问题的根源。由于低端机型不支持某个API,导致页面报错,从而出现白屏问题。

那么,有没有办法在CICD流程中或者在代码开发中就能扫描到这种问题呢?除了监控系统之外是否还有其他方式?实际上是有的。之前我写过一篇文章我给项目加了性能守卫插件,同事叫我晚上别睡的太死,提到了如何利用eslint-plugin-compat插件来实现这种机制,从而避免类似线上生产事故的发生。使用这个插件,我们可以在代码开发阶段就发现可能的兼容性问题,让开发者及时修复,避免将问题带入线上环境。


自动化兼容性检查


使用eslint-plugin-compat插件

eslint-plugin-compat是一个强大的工具,可以帮助我们检查代码中使用的特性在不同浏览器中的兼容性。以下是使用eslint-plugin-compat进行自动化兼容性检查的步骤:

安装插件:

npm install eslint-plugin-compat --save-dev


配置ESLint:

在项目的.eslintrc.js配置文件中添加插件:

module.exports = {
  // ...
  plugins: [
    // ...
    'compat'
  ],
  // ...
};


设置browserslist:

通过使用browserslist配置,你可以确保你的项目在目标浏览器中都能够正常运行,并在开发阶段自动引入相应的polyfill或进行兼容性警告,从而节省调试时间,提高开发效率,并构建跨浏览器友好的Web应用。无论是在现代浏览器中使用最新的特性,还是在旧版浏览器中提供兼容性支持,browserslist都能帮助你轻松管理和配置项目的兼容性需求。

示例.browserslistrc配置如下:

# Browsers that have more than 5% global usage
> 5% 
# Last 2 versions of major browsers (including Chrome, Firefox, Safari, and Edge)
last 2 major versions 
# Specific browser versions
IE 11 
iOS >= 11
not dead
# Browsers used in specific countries
and_chr 78
and_ff 68
# Browsers used in specific environments
maintained node versions
not IE 11
# Development and production environment specific targets
development
  last 1 chrome version
  last 1 firefox version
production
  > 0.2%


配置选项 描述
> 5% 全球使用率超过5%的浏览器
last 2 major versions 最近两个主要版本的浏览器
IE 11 仅包括Internet Explorer 11
iOS >= 11 iOS系统版本大于等于11的浏览器
not dead 排除已经被认为是不再使用的浏览器
and_chr 78 特定版本的Chrome浏览器
and_ff 68 特定版本的Firefox浏览器
maintained node versions 当前被维护的Node.js版本
not IE 11 排除Internet Explorer 11
development 开发环境配置,指定兼容性需求
production 生产环境配置,指定兼容性需求
last 1 chrome version 最近一个版本的Chrome浏览器
last 1 firefox version 最近一个版本的Firefox浏览器
> 0.2% 全球使用率超过0.2%的浏览器

测试效果:

假设我们有以下的代码示例main.js

// main.js
const button = document.getElementById('my-button');
button.addEventListener('click', () => {
  console.log('Button clicked!');
});

运行eslint命令来检查代码的兼容性:

eslint main.js

如果浏览器版本支持addEventListener,则不会报错。否则,会提示相应的兼容性警告。


使用eslint-plugin-builtin-compat插件


eslint-plugin-builtin-compat是另一个用于检查浏览器兼容性的插件,它提供了一些额外的特性。


安装插件:

npm install eslint-plugin-builtin-compat --save-dev


配置ESLint:

在项目的.eslintrc.js配置文件中添加插件:

module.exports = {
  // ...
  plugins: [
    // ...
    'builtin-compat'
  ],
  // ...
};


配置检查脚本:

在package.json中添加检查脚本:

{
  "scripts": {
    // ...
    "compat-check": "eslint --no-eslintrc --ext .js main.js"
  }
}

运行检查脚本:

npm run compat-check


git提交校验


为了确保代码在提交前已经通过了兼容性检查,我们可以使用husky工具来在commit前执行校验。


安装husky:

npm install husky --save-dev


配置husky:

在package.json中添加pre-commit钩子,以在提交前执行兼容性检查:

{
  "husky": {
    "hooks": {
      "pre-commit": "npm run compat-check"
    }
  }
}

目录
相关文章
|
23天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
7天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
20天前
|
运维 监控 持续交付
自动化运维在现代数据中心的应用与实践####
本文探讨了自动化运维技术在现代数据中心中的应用现状与实践案例,分析了其如何提升运维效率、降低成本并增强系统稳定性。通过具体实例,展示了自动化工具如Ansible、Puppet及Docker在环境配置、软件部署、故障恢复等方面的实际应用效果,为读者提供了一套可参考的实施框架。 ####
|
28天前
|
机器学习/深度学习 人工智能 测试技术
探索自动化测试框架在软件开发中的应用与挑战##
本文将深入探讨自动化测试框架在现代软件开发过程中的应用,分析其优势与面临的挑战。通过具体案例分析,揭示如何有效整合自动化测试以提升软件质量和开发效率。 ##
|
1月前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
1月前
|
运维 Devops 应用服务中间件
自动化运维的利剑:Ansible在现代IT架构中的应用
【10月更文挑战第42天】本文旨在揭示自动化运维工具Ansible如何革新现代IT架构,通过简化配置管理和部署流程,提升效率和可靠性。我们将探索Ansible的核心功能、语言特性以及其在DevOps文化中的角色。文章还将展示如何借助Ansible构建模块化和可重用的配置代码,实现快速迭代与部署,并确保系统一致性。通过阅读本文,运维人员将了解如何利用Ansible优化日常任务,加速产品上线速度,同时提高系统的稳健性。
41 5
|
1月前
|
机器学习/深度学习 监控 算法
车辆违停检测:基于计算机视觉与深度学习的自动化解决方案
随着智能交通技术的发展,传统人工交通执法方式已难以满足现代城市需求,尤其是在违法停车监控与处罚方面。本文介绍了一种基于计算机视觉和深度学习的车辆违停检测系统,该系统能自动监测、识别并报警违法停车行为,大幅提高交通管理效率,降低人力成本。通过使用YOLO算法进行车辆检测,结合区域分析判断车辆是否处于禁停区,实现了从车辆识别到违停判定的全流程自动化。此系统不仅提升了交通管理的智能化水平,也为维护城市交通秩序提供了技术支持。
|
26天前
|
Java 测试技术 API
软件测试中的自动化测试框架选择与应用##
在快速迭代的软件开发周期中,选择合适的自动化测试框架对于提高软件质量和开发效率至关重要。本文探讨了当前流行的几种自动化测试框架的特点和适用场景,旨在为软件开发团队提供决策依据。 ##
|
28天前
|
机器学习/深度学习 人工智能 安全
探索AI在软件工程中的最新应用:自动化测试与代码审查
探索AI在软件工程中的最新应用:自动化测试与代码审查