博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个图片偶尔加载不出来的事故
阅读量:7125 次
发布时间:2019-06-28

本文共 1073 字,大约阅读时间需要 3 分钟。

事故详情

这周我做了一个显示图片的功能,出现一个bug,偶尔图片无法显示,只剩一个白框框。天真且忙碌的我以为是网络或者浏览器内存不够的原因(页面嵌入app里面,那段时间app很抽风),就随他去了,反正大多数时间都是正常的。后面有时间了,我被迫(内心觉得不是自己的原因很不情愿)去优化这个问题,结果啪啪!打脸。

分析:

  1. 我以为是vue(对,我用的就是vue)双向绑定失效的问题,结果发现img标签的src是有值的。事实证明vue是很强大的。
  2. src有值为什么不能显示呢?难道是浏览器的锅?疯魔的我都怀疑到浏览器上了。但是,浏览器的技术很成熟伟大,我要坚信,所有的bug都只可能是我的问题。

思前想后,我觉得偶现这个问题很是问题。解决问题的关键在于知道为什么会产生问题

于是,我重复触发这个行为,大脑飞速运转(夸张),终于——————------
(柯南背景音乐:当当~当!当!当当~当!当!)
触发图片不显示的关键不是网络不好加载慢的原因,恰恰相反,是网络太快的原因。因为我的页面是有两个子页的,而展示图片的那个子页最开始是隐藏的。且图片需要放大缩小,所以图片是由很多div包裹的。有个容器div是相对定位,高度设为父div的100%,然而当时页面没有显示,父div没有高度,所以这个容器div高度为0—————————————图片显示不出。

震惊!

因为我对父组件是用vue写成固定高度的,而子页面显示时父组件也是有高度的,为什么容器div无法继承这个?
不可能是这个原因。因为,vue对v-show不可见的组件是用display:none控制的,浏览器对display:none后显示的组件采用reflow的方式渲染,reflow会计算所有的结点几何尺寸和位置([浏览器渲染原理及流程]),所以不可能子组件无法继承父组件的高度。

所以,我把目光投向了我那个放大缩小的插件PinchZoom.JS。

哼,果然是他!这个插件的代码很好查看,所以我迅速地定位了问题。这个插件在初始化时会设定容器的高度,而这个高度取得是父组件的高度,而这个时候父组件没有高度(⊙﹏⊙)b
emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
(太丢人了,我是不会告诉别人这个bug的原因的,我只会偷偷写在文章里。。。)

总结

如果你也遇到图片偶尔加载不出来的问题而看到我这满篇的废话,我对此深感抱歉和误解。但我想说,所有bug都是你的问题(重要),不要太相信自己,解决问题的关键是找到为什么会产生问题(重要)
最后,感谢您的耐心。over~

转载地址:http://rseel.baihongyu.com/

你可能感兴趣的文章
使用xshell登录中文版CentOS时,在xshell下显示中文乱码,通过如下办法可以有效的解决乱码问题...
查看>>
【转】Js基础知识(五) - 前端性能优化总结
查看>>
我的友情链接
查看>>
python之day2
查看>>
邮件服务器架构基础
查看>>
【白话设计模式十四】代理模式(Proxy)
查看>>
LINUX内核经典面试题
查看>>
解决连表查询连接字段字符集不一致异常
查看>>
网页基础
查看>>
springboot(五):spring data jpa的使用
查看>>
导数 sobel
查看>>
Debian命令行的配制工具
查看>>
my tips
查看>>
BeanUtils包的使用
查看>>
python学习笔记之函数
查看>>
敏捷个人教你如何制作2012生活看板
查看>>
JDBC连接时,出现的错误ORA-00604
查看>>
ftp: connect: No route to host
查看>>
CCNP-RIP总结
查看>>
java Class对象
查看>>