这周做的项目遇到2个费了很多时间才解决的bug,解决之后,发现根本问题并不是什么很难的技术难点,都是因为自己在写代码的过程中,思维不够清晰。还有一个需要再提高的地方就是解决问题的思维,如何快速定位到问题。

第一个bug很严重:本地前后端联调没有问题,而且调的是和测试环境一样的接口,但是测试环境就是报length为undefined

和同事从晚上8点多一起找问题到晚上12点都没有解决好这个问题。问题出现前我做了一波这样的操作,改了一次代码然后提交到测试环境(自己本地没测试到位就提交了,就是最大的问题),然后就发现挂了。现在想想如果是老赵解决这个问题,他一定会问我刚刚改了些什么,然后会让我把刚刚改的改回去,再去排除bug。如果我们当初改这个bug的时候,是先这样思考的,那么我们也就不会为这个bug花那么多无用的时间了。最终定位到问题的时候,确实是我提交前改的那个变量写错了,这个变量不是一个数组。

如果真的想不起来自己刚改了什么,也应该是先去从那些调用了length的变量上去排除,将所有的可能的数组变量替换成[]一个空值再来判断。

回顾这个问题,想起一件有趣的事情。

第一个,测试环境有问题,但是本地没有问题,说明本地环境还是不行的,出了问题不报错,这是一个需要去思考看能否优化的点,本地环境是否能和测试环境保持一样的环境。至少本地环境能像测试环境一样有问题能在console中暴露出来。第二个,拿到这个问题,我第一个去检查传的数据是否正确,我定位了所有会调用到的方法,最后发现都可以一一执行,数据传递都正常但到最后还是会报length为undefined,我当时就蒙圈了。到底是因为什么原因?现在发现其实定位这个问题并不难,再多想想,拿到数据之后会干嘛?拿到数据当然就是去渲染dom啦,这里就应该怀疑是渲染dom出错了,问题就浮现水面了,dom上有个不是数组的变量读取了length,再去一一排除可能的数组变量就能解决问题了。

第二个bug:数据改变,需要重新触发dom渲染高度。采用js操作dom,重新设置元素高度,但是无效。

场景:切换月份获取当月的数据,对应的表格元素的高度要自适应内容的高度,表格的每一行有一个跨单元格的悬浮的div,这个div中包含内容,当前的行的表格单元格的高度要和这个div的高度保持一直。高度采用js计算,在刚开始进入这个页面的时候就会在等到拿到数据并渲染dom之后去调用这个js逻辑去读取表格中每一行包含的这个悬浮的div的高度,然后再去给对应行的表格的单元格设置对应高度。

按理说操作dom,重新给元素赋值高度是可以,但是不行的时候,是为什么不行?这个方案最后结果不是我们想要的,就要去排除是什么原因导致的不行,如果最后排除原因是方案不行就要换方案,没有排除原因都不能去想着换方案。

高度没有按预期去渲染,看下想要设置的数据是否是正确的,永远打印整个变量去检查数据,因为这次从数组中去读取数据就是打印的其中的部分数据,结果才迟迟没有定位到真的问题,最后发现数据读的总是前面部分的数据,定位到问题是切换月份没有置空之前数组中的数据。

总结:

  1、问题的表象不一定就是真的问题所在,比如第一个bug,看上去像是环境问题导致的,其实不是,只是本地也出错了没有把错误暴露出来,问题根本原因还是代码问题。

  2、解决问题的思路:数据渲染没按预期渲染,检查数据,从预期结果出发,先思考预期结果什么样,然后看看实际结果是什么,思考实际结果出现的原因,问题就浮现了。

12月中旬项目中出现的几个bug解决方法的思考的更多相关文章

  1. 项目总结---- imageLoder 的2个Bug解决方法、1.9.4如何选择性删除disk缓存和其它一些错误。

    我们不说废话,直接入主题,抓紧时间写完,好继续找bug... (PS:imageLoder的bug 百度不到的哦,不过我坚信我的观点没错) 版本1.9.2,1.9.4我没测试 1,imageLoder ...

  2. Type.GetType()反射另外项目中的类时返回null的解决方法

    项目1:ProjectA namespace ProjectA { public class paa { .... } } Type.GetType("paa")返回null Ty ...

  3. electron项目中使用jquery不生效的解决方法

    才开始接触electron的时候,本来想用bootstrap快速搞一个demo,无奈有些功能没法用,之后才意识到是jquery没发用,之后找了一些资料,比较简单的方式就是在引入jquery之前加入一下 ...

  4. [Android Studio Problems]记录克隆项目中遇到的坑(问题)以及解决方法

    ①Migrate project to Gradle? 问题描述: This project does not use the Gradle build system. We recommend th ...

  5. 【Vue中的坑】vue项目中动态绑定src不显示图片解决方法

    v-for绑定src的数据如下: data() { return { img_src:"../../assets/images/mirror-service.png" } } 渲染 ...

  6. vue中npm run dev运行项目不能自动打开浏览器! 以及 webstorm跑vue项目jshint一直提示错误问题的解决方法!

    vue中npm run dev运行项目不能自动打开浏览器!以及 webstorm跑vue项目jshint一直提示错误问题的解决方法! 1.上个项目结束就很久没有使用vue了,最近打算用vue搭建自己的 ...

  7. jquery中checkbox全选失效的解决方法

    这篇文章主要介绍了jquery中checkbox全选失效的解决方法,需要的朋友可以参考下     如果你使用jQuery 1.6 ,代码if ( $(elem).attr(“checked”) ),将 ...

  8. 记一次SpringBoot 开发中所遇到的坑和解决方法

    记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型出现空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Inte ...

  9. 编程中遇到的Python错误和解决方法汇总整理

    这篇文章主要介绍了自己编程中遇到的Python错误和解决方法汇总整理,本文收集整理了较多的案例,需要的朋友可以参考下   开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析, ...

随机推荐

  1. 『Python CoolBook』使用ctypes访问C代码_上_用法讲解

    一.动态库文件生成 源文件hello.c #include "hello.h" #include <stdio.h> void hello(const char *na ...

  2. js中用户名的正则(字符,数字,下划线,减号)

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Inse ...

  3. 内建函数之:reduce()使用

    #!/usr/bin/python#coding=utf-8'''Created on 2017年11月2日 from home @author: James zhan ''' print reduc ...

  4. react-router解决锚点跳转问题

    添加一个onClick方法.onClick方法传入一个锚点的id,然后用下面的函数来找到锚点并跳转到锚点. scrollToAnchor = (anchorName) => { if (anch ...

  5. (淘宝无限适配)手机端rem布局详解

    从网易与淘宝的font-size思考前端设计稿与工作流 本文结合自己对网易与淘宝移动端首页html元素上的font-size这个属性的思考与学习,讨论html5设计稿尺寸以及前端与设计之间协作流程的问 ...

  6. docker 常用命令(一)

    1.docker安装 centos1611(7.3)在线安装: # 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的yu ...

  7. 【深入理解Java集合框架】红黑树讲解(上)

    来源:史上最清晰的红黑树讲解(上) - CarpenterLee 作者:CarpenterLee(转载已获得作者许可,如需转载请与原作者联系) 文中所有图片点击之后均可查看大图! 史上最清晰的红黑树讲 ...

  8. Javascript获取图片原始宽度和高度的方法详解

    前言 网上关于利用Javascript获取图片原始宽度和高度的方法有很多,本文将再次给大家谈谈这个问题,或许会对一些人能有所帮助. 方法详解 页面中的img元素,想要获取它的原始尺寸,以宽度为例,可能 ...

  9. 剑指Offer 29. 最小的K个数 (其他)

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题目地址 https://www.nowcoder.com/prac ...

  10. JAVA SFTP文件上传、下载及批量下载

    JavaJsch  1.jsch官方API查看地址(附件为需要的jar) http://www.jcraft.com/jsch/ 2.jsch简介 JSch(Java Secure Channel)是 ...