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

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

CICD校验


除了在git进行校验,我们也可以在cicd流程进行校验,一旦不通过,就不通过MR


{
  "scripts": {
    "lint": "eslint . --ext .js"
  }
}
stage('Linting') {
    steps {
        sh 'npm run lint'
    }
}


三、使用polyfill解决兼容性问题


在某些情况下,即使经过兼容性检查,仍然可能存在一些浏览器不支持的新特性。这时候,我们可以使用polyfill来为这些浏览器提供缺失的功能。


手动polyfill


安装第三方库:

在项目中安装需要的polyfill库,比如core-js或者polyfill.io。


npm install core-js --save


写兼容性代码:

在需要兼容性支持的地方,引入相应的polyfill库,并编写对应的代码。


// main.js
import 'core-js/features/promise';
const button = document.getElementById('my-button');
button.addEventListener('click', () => {
  // 使用新特性Promise
  new Promise((resolve) => {
    setTimeout(() => {
      resolve('Button clicked!');
    }, 1000);
  }).then((message) => {
    console.log(message);
  });
});


自动polyfill

使用Babel来自动根据目标浏览器版本转换代码,并使用babel-runtime来抽离公共模块。


安装相关库:

npm install @babel/preset-env @babel/plugin-transform-runtime --save-dev


配置Babel:

在项目的.babelrc文件中配置Babel:


{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage",
      "corejs": 3
    }]
  ],
  "plugins": ["@babel/plugin-transform-runtime"]
}


按需引入polyfill:

根据实际使用的新特性,Babel会自动根据目标浏览器版本引入必要的polyfill。


// main.js
const button = document.getElementById('my-button');
button.addEventListener('click', () => {
  // 使用新特性Promise
  new Promise((resolve) => {
    setTimeout(() => {
      resolve('Button clicked!');
    }, 1000);
  }).then((message) => {
    console.log(message);
  });
});


动态polyfill服务:

可以使用polyfill.io等服务来动态为不支持的浏览器提供polyfill,以减少页面加载的数据量。


<!DOCTYPE html>
<html>
<head>
  <title>Polyfill Example</title>
</head>
<body>
  <button id="my-button">Click Me</button>
  <!-- 加载polyfill.io服务 -->
  <script src="https://polyfill.io/v3/polyfill.min.js"></script>
  <script src="main.js"></script>
</body>
</html>


再谈Babel


Babel 是一个 JavaScript 编译器,为什么这么说,因为babel不会处理Web API啊,我当时也认为babel自动帮我们做polyfill,结果忽略了Web API,babel只会处理ECMAScript标准中的特性

Babel 是一个工具链,主要用于将采用 ECMAScript 2015+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。


  • 语法转换
  • 通过 Polyfill 方式在目标环境中添加缺失的特性 (通过引入第三方 polyfill 模块,例如core-js)
  • 源码转换(codemods)


遇到的问题

在chrome61环境中报错ResizeObserver is not a function。

经确认ResizeObserver特性最低支持chrome64,于是将babel编译的目标版本设置为chrome 61,但改报错仍未解决,经过一番查找,原因如下:

Babel only polyfills ECMAScript features.

What is ECMAScript? It is the core of the JavaScript that you can use in the browser. Browsers implements ECMAScript, and on top of it there are lots of expansions (Dom objects, service workers, Ajax, ...). ResizeObserver is one of those expansions.

How can you know if a feature is part of ECMAScript or not?

I'd suggest searching for that function on MDN, and look at the Specifications section (ArrayBuffer example).

参考出处

于是手动引入resize-observer-pollyfill问题就解决了


目录
相关文章
|
6月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
749 11
|
6月前
|
安全 BI 持续交付
金融保险行业 AD 域自动化管理解决方案
金融保险行业作为数据密集型领域,核心资产涵盖客户信贷信息、高净值客户数据、绿色金融项目资料等敏感内容,这些数据不仅是企业核心竞争力的体现,更是监管合规的重点关注对象。当前,行业正面临 “管理效率低下” 与 “数据安全风险” 的双重挑战。
214 0
|
8月前
|
运维 监控 持续交付
还在为部署开源工具烦恼?自动化部署工具 Websoft9一键部署 300+ 开源应用
在数字化时代,开源工具因免费、灵活、可定制等特性广受欢迎,但其部署过程却常因环境配置复杂、依赖繁琐、耗时长等问题令人头疼。本文介绍了传统部署的三大难点,并提出两种解决方案:传统手动部署与集成化控制台部署。
还在为部署开源工具烦恼?自动化部署工具 Websoft9一键部署 300+ 开源应用
|
8月前
|
运维 监控 应用服务中间件
运维打铁: Ruby 脚本在运维自动化中的应用探索
Ruby 是一种简洁、动态类型的编程语言,适合运维自动化任务。本文介绍了其在服务器配置管理、定时任务执行和日志分析处理中的应用,并提供了代码示例,展示了 Ruby 在运维自动化中的实际价值。
280 2
|
7月前
|
人工智能 IDE 测试技术
Browser-Use在UI自动化测试中的应用
Browser-Use是一款浏览器自动化工具,具备视觉与HTML解析、多标签管理、操作记录与复现、自定义操作、自我纠正及并行执行等功能,助力AI智能体高效完成网页任务。
726 0
|
12月前
|
运维 安全 网络安全
自动化与统一管理:Websoft9 平台为教师提供的一站式解决方案
教育场景常面临资源分散、技术门槛高、资源利用低效及安全风险等问题。Websoft9 提供自动化部署与统一管理方案,通过预集成应用模板库、容器化资源隔离和智能运维监控等技术,大幅缩短环境搭建时间,提升资源利用率并保障数据安全。其典型应用场景包括混合教学环境搭建、科研项目管理和实验课程弹性扩展,助力高校降低成本、提高效率。Websoft9 的图形化界面降低技术门槛,支持自定义开发,推动教育数字化转型,未来有望成为教学生产力提升的底层基座。
234 6
|
XML 人工智能 文字识别
Mobile-Agent:通过视觉感知实现自动化手机操作,支持多应用跨平台
Mobile-Agent 是一款基于多模态大语言模型的智能代理,能够通过视觉感知自主完成复杂的移动设备操作任务,支持跨应用操作和纯视觉解决方案。
5293 10
Mobile-Agent:通过视觉感知实现自动化手机操作,支持多应用跨平台
|
机器学习/深度学习 人工智能 自然语言处理
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
CogAgent-9B 是智谱AI基于 GLM-4V-9B 训练的专用Agent任务模型,支持高分辨率图像处理和双语交互,能够预测并执行GUI操作,广泛应用于自动化任务。
501 12
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
608 2
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%