专栏首页较真的前端十几行代码就可以让你的微信小程序挂掉

十几行代码就可以让你的微信小程序挂掉

mpvue是一个使用 Vue.js 开发小程序的前端框架。框架基于 Vue.js 核心,mpvue修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套 Vue.js 开发体验。

由来已久

一直以来,我都在用mpvue来编写小程序应用,虽然问题很多,不过都有替代方案。

比如在mpvue中,slot(插槽)中的内容不能动态的渲染,那我们可以放弃使用slot内使用动态数据。该问题在github中有多人反应。

再比如在mpvue中,自定义指令会直接导致编译报错,那么我们可以放弃使用自定义指令。该问题在github中也有多人反应。

但是今天的问题实在太严重,我一定要吐槽一下。

bug现象

我们在开发过程中,发现在某种情况下,页面UI层的更新时机全部错乱。即 数据变更后,只有在下次的onShow生命周期里有体现(有种“慢一拍”的感觉),整体的感觉就是页面的展示和交互完全瘫痪

bug调查

我们花了整整一天的时间调查,最后发现问题是在自定义组件上动态为v-if绑定值赋值上

将代码精简到十几行就可以复现bug。

bug再现

记住,这是一个mpvue项目。我在src/pages/目录下新建一个test页面,对应的index.vue文件的代码如下,逻辑很简单,就是利用v-if控制一个组件的显示:

<template>
  <test v-if="show"></test>
</template>
<script>
import test from '@/components/posterTest'
export default {
  data () {
    return { show: false }
  },
  onShow () {
    this.show = true
    setTimeout(() => { this.show = false }, 2000)
  },
  components: { test }
}
</script>

其中引入了posterTest组件。为了调查bug,我将多余的操作处理全部去掉,只有一张图片,它的代码如下:

<template lang="html">
  <div class="poster">
    <img src="https://interactive-examples.mdn.mozilla.net/media/examples/firefox-logo.svg" alt="">
  </div>
</template>
<script>
export default { }
</script>

这个页面只要一加载,2秒后控制台就会报下面的错误。

而只要报了这个错误,其他页面也跟着挂了。就像前面提到的一样,结果是灾难性的——页面都挂掉了,双向绑定的更新总像慢了一拍。

找到报错的代码,上面还有了一条有意添加的注释(也是vue源码的)

所以我怀疑是mpvue在调度上存在问题。

解决方法

mpvue还是要用的,但是以后不能再用v-if来操作组件的显示了,乖乖用v-show吧。但是话说回来,vue这样的操作可是一点毛病没有的。

总结

作为框架,作为一个“轮子”,我觉得不应该有这样“后果严重”的bug出现。再退一步说,一个页面的bug能导致到整个应用“瘫痪”,也是很恐怖的。

还是要感谢mpvue为我们带来的种种方便。

本文分享自微信公众号 - 较真的前端(gh_7af41a2be77e)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我用EggJS开发了一个日增量过亿的数据可视化平台

    前些日子,我所在的Team接到了一个“大活儿”,为我们公司某个服务(出于保密的原因,这里不能直说)做数据可视化及数据分析平台。

    用户1687375
  • 探寻Vue数据双向绑定的底层原理

    用户1687375
  • JS设计模式之单例模式

    首先要说明的是设计模式期初并非软件工程中的概念,而是起源于建筑领域。建筑学大师(克里斯托夫·亚历山大)曾经花了很长时间(传闻说20年)研究为了解决同一问题而采用...

    用户1687375
  • 为什么你学完了68个Python函数,却依旧做不好数据分析?

    ? 作者 Gam 本文为CDA数据分析师原创作品,转载需授权 数据分析老鸟都知道,相比于自己作出好的数据分析报告,“教别人如何入门数据分析”这事情简单多了...

    CDA数据分析师
  • Centos6.5中实现python2与

       yum install zlib-devel bzip2-devel  openssl-devel ncurses-devel sqlite-devel ...

    py3study
  • 201912-2 试题名称: 回收站选址CSP

    某个傻瓜开了305的动态数组???100分变成20分?305改成1005就对了???思路没问题,就因为这让人头秃的错误点,绩点自闭???吐血.jpg

    种花家的奋斗兔
  • centOS升级python2至pyth

    今天安装了一个centos 6.9  ,查看默认python版本是2.6,所以准备升级,按着以前在ubuntu上的升级步骤:

    py3study
  • NYOJ 108 士兵杀敌(一)

    题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=108

    Ch_Zaqdt
  • 台式机单硬盘安装黑苹果体验

    一直听说黑苹果坑比较多,尤其驱动更是让很多人崩溃,自己试着在台式机上折腾了下MacOS,学习了一些别人的经验,很快搞定,体验还不错,现在只是USB3.0接移动硬...

    AIHGF
  • Python编译安装

    mkdir /usr/local/openssl && cd /usr/local/openssl && wget http://www.openssl.org...

    py3study

扫码关注云+社区

领取腾讯云代金券