前端Bug 修复手册

news2024/12/28 18:01:35

1.前端长整数精度丢失问题

(1)问题

在前后端联调时,发现后端有一个接口返回的值和前端页面上展示的值不一致。

后端Java实现的接口如下,返回一个json格式的大整数 123456789123456789

但是前端请求这个接口后,在界面上展示的却是 123456789123456780,最后一位是0而不是9!

(2)原因

在Js中,用Number来表示数字类型的值。Number类型总长度64位二进制bit,使用53位表示小数位,10 位表示指数位,1 位表示符号位。因此,Number整数的表示范围为 -2^53 ~ 2^53(不包含两端)

(3)解决方法

虽然前端也可以解决问题,比如通过正则表达式解析替换、或者修改json parser,但比较麻烦,更推荐在后端解决

非常简单,将可能超出范围的数字类型(Long)变量转为字符串类型(String)即可!

2.升级依赖版本导致的 Bug

(1)问题

事情是这样的,最近在搞一个新项目,之前基本都是我和另外一个前端朋友在开发。后来呢,我又拉了几位朋友加入进来,结果他们都反馈说代码在本地装不上依赖,导致运行不起来。

(2)原因

于是,有一位朋友就修改了项目中某一个依赖的版本号,然后依赖就安装成功了。结果运行项目时,出现了报错:试图从 undefined 未定义变量中获取属性。

(3)解决方法

虽然后来我才发现是因为自己忘了提交 yarn.lock 文件到代码仓库中,导致他们下载的依赖版本号和我本地不同,所以才出现了我本地能运行,他们却运行不了的情况。

结果,今天我自己要使用系统时,才发现这个改过代码的功能怎么突然不能用了!?

排查后才发现,原来之前升级版本后,组件的函数参数发生了改变,通过之前的代码再也获取不到需要的属性值了。虽然通过加可选链操作符可以防止报错,但实际上,这行代码逻辑已经不对了,毫无意义。

3.对前端依赖版本问题的深挖

(1)问题

升级一下 Ant Design 组件的版本号,导致导航条缺失了一些原本拥有的样式,鼠标放到子菜单项时不再变色了。

(2)原因

原本当鼠标悬停到菜单项时,会自动为该元素添加 xx-active 类名,然后触发上述样式代码变蓝色。但更新版本后,这段代码就消失了,所以没有变色。

(3)解决方法

把这段缺失的代码补上,写到一个公共样式里就可以了。

那接下来我们来追溯下这个 Bug,因为 Ant Design 是一个非常庞大的项目,代码多、版本多,所以我们要先明确两个边界,便于定位 Bug 来源。

这两个边界分别是:版本边界 和 代码边界 。

版本边界很好理解,假设我的代码是从 v14.0.0 版本升级到 v14.16.3 版本,那么这两个版本号就是版本边界(更细一点的话可以把每次提交都看作一个版本),Bug 只可能在其中出现。代码边界又可以叫组件边界、模块边界等等,我们发现导航菜单出了问题,那么只需要关心这个组件代码的改动。

因此,在找 Bug 的起源时,我先登录 GitHub,找到 Ant Design 官方仓库,打开了版本(Releases)列表:

图片

版本列表

如上图,每一次版本的更新都做了哪些事,一目了然。

在这个列表中改动点还挺多,但我们只需要关心 Menu 菜单组件,所以很快找到了这一行:

图片

如图,该版本有一个改动是 “修复 Menu 暗色模式下,部分样式被亮色模式污染的问题”,很明显是改了 Menu 组件的代码!

其实当时我看到这里,就觉得大概率是这次改动的问题了,但还不确定,所以还要点进本次改动详情看看。

一进去看代码,就发现惊喜了!果然,本次改动移除了导航条菜单的悬停样式:

图片

害,Bug 果然是解决不完的,不知道这是哪位小糊涂写的,改了一个 Bug,又引入了一个新的 Bug 。

最后,我们再看看怎么处理这个 Bug,我的项目因为不急着升级,所以就先回退到了上一个正常的版本,把这个问题交给官方。

4.缺少测试和上线规范导致的 Bug

(1)问题

我们有一个小需求:用户如果直接输入域名访问支付中心(而不是通过正常跳转下单访问),这时其实支付中心的页面内容是无意义的,我们希望将这些用户跳转到公司的官网。

没有经过任何测试,就把支付中心页面跳转的代码上线了。导致所有线上用户在创建支付订单时,强制跳转到了公司官网,而不是支付页面!

(2)原因

写完代码后没有做测试,并且因为自大,导致了没有测试就上线。由于多个需求同时上线,导致上线后没有进行完整充分的验证。

(3)解决方法

上线前,必须完整测试本次改动涉及的所有功能,例如:权限控制、边界异常处理、页面是否严格遵循设计稿等。

上线后,必须再次对功能进行测试验证。

编程导航 - 做您编程路上的导航员

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1884766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

firewalld(5)--direct

简介 direct 是 firewalld 服务的一个功能,它允许用户以更直接的方式配置防火墙规则,绕过通常的 firewalld 区域(zone)和服务的抽象层。然而,这个功能已经被弃用(deprecated),并将在未来的版本中移除。 弃用原因:直接配置可能导致与 firewalld 的其他功能(如区域和…

万界星空科技铜管加工行业MES系统解决方案

一、行业背景与挑战 随着铜管加工行业的快速发展,传统的管理模式已难以满足日益增长的生产需求。为满足市场的高效率、高质量、低成本要求,企业急需一套智能化的管理系统来提升生产效率、优化资源配置和确保产品质量。因此,我们针对铜管加工行…

波司登:2023/24财年业绩表现亮眼,用“新”提质推动高质量发展

2023年是全面贯彻党的二十大精神的开局之年,尽管国际国内经贸环境错综复杂,但中国经济回升向好、长期向好的基本趋势没有改变,新质生产力激活发展新动能,文化自信自强赋能国货品牌乘势而上,内需市场回暖向好&#xff0…

测试驱动开发(TDD)方法详解

目录 前言1. 什么是测试驱动开发1.1 TDD的基本原则1.2 TDD的优势 2. 测试驱动开发的流程2.1 编写测试2.2 运行测试2.3 编写实现代码2.4 重构代码 3. 常用工具和框架3.1 单元测试框架3.2 Mock框架3.3 集成工具 4. TDD在实际项目中的应用4.1 应用场景4.2 面临的挑战4.3 最佳实践 …

单一WiFi的RSSI指纹和行人航位推算(PDR)方法

问题背景 室内定位技术在现代生活中具有重要意义,应用广泛,如导航、物流跟踪、紧急救援等。然而,现有的室内定位技术在城市高密度平层环境中面临诸多挑战,主要包括: 多路径效应:信号在墙壁、家具等障碍物之间反射,导致信号路径复杂化。信号衰减与干扰:建筑物内的结构会…

高职人工智能专业实训课之“生成对抗网络(GAN)”

一、前言 生成对抗网络(GAN)作为人工智能领域的一项重要技术,已经在图像生成、风格迁移、数据增强等多个领域展现出巨大的潜力和应用价值。为了满足高职院校对GAN专业实训课程的需求,唯众人工智能教学实训凭借其前沿的教育技术平…

名企面试必问30题(十三)——项目中遇到最大的困难和挑战

1.思路 从面试官的视角来看,您所遇到困难的大小能够直接反映出您水平的层次。 其一,如果您遇到的最大挑战是诸如保障功能上线、需求分析这类基础且偏执行的产品工作,那么面试官或许会给您的能力水平贴上执行者的标签。 其二,如果…

内容营销专家刘鑫炜:自媒体时代,网站真的落伍了吗?

自媒体时代,虽然自媒体平台如雨后春笋般涌现,为内容创作者提供了更为广阔的空间,但并不意味着网站已经落伍。相反,网站仍然是信息传播、品牌建设、电子商务等多个领域的重要载体,具有不可替代的作用。 网站在信息传播方…

测试:自动化测试

文章目录 概念web测试selenium的工作原理selenium的常用函数元素定位操作测试对象窗口弹窗 概念 自动化的类型很多,那选择哪一种测试的收益是比较好的呢? 这里引出一个自动化测试金字塔 理想的自动化测试金字塔表达了自动化测试的理想状态,…

010-GeoGebra基础篇-动态验证三角形外接圆的圆心是否可以位于三角形的外部

接下来我们将进行一些稍微高级一点操作,一边学习新东西的同时,也开始对数学、物理等内容的研究。 目录 一、项目截图二、涉及内容三、问题设置1. 问题提出2. 验证方案 三、做图步骤1. 绘制定点A、B;2. 绘制动点C;(1&am…

mysql-5.6.26-winx64免安装版本

mysql为什么要使用免安装 MySQL 提供免安装版本主要有以下几个原因和优势: 便捷性:用户无需经历安装过程,直接解压即可使用。这对于需要快速部署环境或者在不支持安装权限的系统上使用MySQL非常有用。灵活性:免安装版允许用户将…

马斯克公布xAI Grok-2大语言模型将于8月推出;GPT-5仍需时日

🦉 AI新闻 🚀 马斯克公布xAI Grok-2大语言模型将于8月推出 摘要:7月1日,马斯克在X平台宣布,其人工智能初创公司xAI的新大语言模型Grok-2将于8月推出。此前,xAI已发布了Grok-1.5和Grok-1.5 Vision模型。马…

C#/WPF 自制白板工具

随着电子屏幕技术的发展&#xff0c;普通的黑板已不再适用现在的教学和演示环境&#xff0c;电子白板应运而生。本篇使用WPF开发了一个电子白板工具&#xff0c;功能丰富&#xff0c;非常使用日常免费使用&#xff0c;或者进行再次开发。 示例代码如下&#xff1a; Stack<St…

杨万里,诚斋体的开创者

杨万里&#xff0c;字廷秀&#xff0c;号诚斋&#xff0c;生于南宋绍兴元年&#xff08;公元1127年&#xff09;&#xff0c;卒于南宋庆元二年&#xff08;公元1206年&#xff09;&#xff0c;享年79岁。在中国古代文学的璀璨星河中&#xff0c;南宋诗人杨万里以其清新脱俗、贴…

方案论证项目实现功能

文章目录 1. 场景加载2. 3D 模型2.1. 坐标转换2.2. 放置模型2.3. 调整模型2.4. 提交方案 3. 查看方案3.1. 场景还原3.2. 删除 1. 场景加载 加载Cesium的Melbourne Photogrammetry的倾斜摄影作为底图&#xff0c;本身是贴地的&#xff0c;使用 Cesium 的primitives功能加载特定…

函数---逆序输出

数字的逆序输出 记住&#xff1a; n n * 10 number % 10; number number / 10; #include <stdio.h> # include <math.h>unsigned int reverse( unsigned int number );int main() {unsigned int n;scanf("%u", &n);printf("%u\n", r…

【JVM】JVM 内存结构

程序计数器 Cpu 要不停的切换执行线程&#xff0c;所以在切换回同一个线程的时候要知道程序执行到哪了&#xff0c;程序计数器&#xff08;PC 计数器&#xff09;&#xff0c;用来存储指向下一条指令的地址&#xff0c;也就是将要执行的代码。 程序的分支、循环、跳转、异常处…

Android12 MultiMedia框架之MediaExtractorService

上节学到setDataSource()时会创建各种Source&#xff0c;source用来读取音视频源文件&#xff0c;读取到之后需要demux出音、视频、字幕数据流&#xff0c;然后再送去解码。那么负责进行demux功能的media extractor模块是在什么时候阶段创建的&#xff1f;这里暂时不考虑APP创建…

6 月份获得了 10000 星的开源项目!

01 开源学习资源的宝库 在这个信息爆炸的时代&#xff0c;想要深入学习一项技术&#xff0c;却常常被海量资源淹没。别担心&#xff0c;Build Your Own X 项目来帮你&#xff01; 这是一个集合了各种技术主题的开源学习资源库&#xff0c;旨在引导开发者通过实践来掌握核心概念…

提升入住率|智慧酒店解决方案,打造有温度的居住体验!

近年来&#xff0c;智慧酒店被越来越多的人关注&#xff0c;由生物识别、物联网技术和互联网技术融合产生的智慧酒店解决方案&#xff0c;不仅可以提升顾客在酒店的入住体验&#xff0c;还可以帮助酒店降低运营成本&#xff0c;这也让越来越的酒店选择了智慧酒店的赛道&#xf…