前端Bug 修复手册

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.mzph.cn/pingmian/39037.shtml

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

相关文章

Spring每日面试题(day1)

目录 JavaWeb三大组件依赖注入的方式Autowire和Resurce有什么区别?Spring Boot的优点Spring IoC是什么?说说Spring Aop的优点Component和Bean的区别自定义注解时使用的RetentionPolicy枚举类有哪些值?Spring Boot自动装配原理Spring MVC工作原…

Charles抓包工具系列文章(三)-- 接口映射工具(Map Remote和Map Local)

一、背景 前文的http请求都是静态的,像compose a new request,仅适用于接口的自测。 回放repeat 一个 http 请求,也无法做到动态调试。 这里的动态还是静态,是站在客户端的角度,数据是实时的,可调试的。 …

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

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

深入解析Linux的使用(下)

深入解析Linux的使用(下) 在上一篇文章中,我们介绍了Linux的基础知识,包括基本命令、文件系统和权限管理。本文将继续探讨软件安装和系统管理等高级操作。 4. 软件安装 4.1 使用包管理器 不同的Linux发行版使用不同的包管理器…

有哪些常见的网络带宽和延迟问题

网络带宽和延迟问题是影响网络性能和用户体验的重要因素。以下是一些常见的网络带宽和延迟问题,结合参考文章中的相关数字和信息进行归纳和说明: 一、网络带宽问题 带宽不足 问题描述:当网络连接的带宽不足以满足当前的网络流量需求时&…

人工智能--目标检测

欢迎来到 Papicatch的博客 文章目录 🍉引言 🍉概述 🍈目标检测的主要流程通常包括以下几个步骤 🍍数据采集 🍍数据预处理 🍍特征提取 🍍目标定位 🍍目标分类 🍈…

Oracle PL / SQL约束

约束是表及其列的规则,用于约束可以插入,更新或删除的数据的方式和数据。 约束对列和表都可用。 列约束 列可以具有定义可以将什么值列表输入到其中的规则。 NOT NULL约束意味着列必须具有值。 它不能为未知,或为空。 下表使用DDL创建具…

文件夹读取难题:详解原因与数据恢复策略

一、文件夹读取不到文件的现象描述 在日常的计算机使用中,有时我们会遇到文件夹读取不到文件的情况。这通常表现为在尝试打开某个文件夹时,其中的文件列表并未正常显示,或者文件虽然显示但无法访问。这种问题不仅影响用户的工作效率&#xf…

Spark SQL----用于格式化和解析的数字Pattern

Spark SQL----用于格式化和解析的数字Pattern 一、描述二、语法三、Elements四、函数类型和错误处理五、例子5.1 to_number函数5.2 try_to_number 函数5.3 to_char函数 一、描述 诸如to_number和to_char之类的函数支持在字符串和Decimal类型的值之间进行转换。这些函数接受指示…

通俗易懂的chatgpg的原理简介

目录 一、深度学习与语言模型 二、ChatGPT训练三步走 三、情景学习与思维链 四、修改提示语优化结果 五、能力评估和注意问题 六.算法原理 简介: ChatGPT的人工智能原理主要基于深度学习技术,特别是大规模的预训练语言模型和Transformer结构。Cha…

【redis】redis事务

1、基本概念 Redis事务是一组命令的集合,这组命令要么全部执行,要么全部不执行,以保证数据的一致性。传统数据库中的事务相比,Redis事务有其独特之处,尤其是它不支持事务回滚。 2、特性 原子性:事务中的所…

马斯克宣布xAI将在8月份推出Grok-2大模型 预计年底推出Grok-3

在今年内,由特斯拉创始人马斯克创立的人工智能初创公司xAI将推出两款重要产品Grok-2和Grok-3。马斯克在社交平台上透露了这一消息,其中Grok-2预计在今年8月份面世,而Grok-3则计划于年底前亮相。 除此之外,马斯克还表示&#xff0c…

spring-05

什么是 Spring 的依赖注入 Spring 的依赖注入(Dependency Injection,简称 DI)是一种设计模式,用于管理和组织对象之间的依赖关系。在传统的程序设计中,对象通常会通过直接创建其他对象的实例来解决依赖关系&#xff0c…

EI期刊投稿要多久

EI检索的文章,无论是期刊还是会议论文,从投稿到发表的时间长度不一,受到多种因素的影响,包括期刊的审稿速度、会议的安排、以及EI的检索周期。 对于EI期刊文章,整个过程通常需要5到8个月,有时甚至更长。这包…

Java中如何优雅地处理TimeoutException异常?

Java中如何优雅地处理TimeoutException异常? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java编程中,TimeoutException异常是一个…

[信号与系统]IIR滤波器与FIR滤波器相位延迟定量的分析。

IIR滤波器与FIR滤波器最大的不同:相位延迟 IIR滤波器相位延迟分析 相位响应和延迟 这里讨论一下理想延迟系统的相位延迟。 对于一个给定的系统频率响应 H ( e j w ) H(e^{jw}) H(ejw)可以表示为 H ( e j w ) ∣ H ( e j w ) ∣ e Φ ( w ) H(e^{jw}) |H(e^{jw…

【面试系列】SQL 高频面试题

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…

iptable精讲

SNAT策略 SNAT策略的典型应用环境 局域网主机共享单个公网IP地址接入Internet SNAT策略的原理 源地址转换,Source Network Address Translantion 修改数据包的源地址 部署SNAT策略 1.准备二台最小化虚拟机修改主机名 主机名:gw 主机名&#xff1…

【Android面试八股文】为什么要用ContentProvider?它与SQL的实现上有什么区别

一、ContentProvider相比SQL的几个显著的区别和优势 ContentProvider是Android平台上的一个组件,主要用于在不同的应用程序之间共享数据,提供了一种标准化的接口来访问和操作数据。 它与直接使用SQL数据库有几个显著的区别和优势: 数据共享和访问控制: ContentProvider:…

嵌入式以太网硬件构成与MAC、PHY芯片功能介绍

一.以太网电路基本构成 1.总体介绍 对于上述三部分,并不一定都是独立的芯片,主要有以下几种情况: CPU内部集成了MAC和PHY,难度较高; CPU内部集成MAC,PHY采用独立芯片(主流方案); CPU不集成MAC和PHY&#…