问题:

  • 在小程序开发中如果有那么个场景和操作步骤,获取商品下拉列表商品列表data为goodsList
  1. 当从后台获取数据response.data.list,通常我们会setData({goodsList:response.data.list})
  2. 下拉获取到第二页数据,添加goodsList里来,再次setData一次goodsList(是的小程序直接添加进当前数组,再次setData就能渲染出来,不用生成新数组,这里不用vue3.0之前把呢不能和react那样),
const goodObject = {
goodName:'小苹果'
}
this.data.goodsList.push(goodObject);
const goodsList = this.data.goodsList
this.setData({
goodsList
})

或者数组合拼新数组

cosnt goodsList = this.data.goodsList
cosnt newGoodsList = response.data.list
this.setData({
goodsList:[...goodsList,...newGoodsList]
})

  看似没问题 ,实则再不同机型会有兼容问题,但是这个不是我要讲的,我要讲的是更深的坑,好吧,我们开始吧

小程序有讲

setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。

Object 以 key: value 的形式表示,将 this.data 中的 key 对应的值改变成 value

其中 key 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如 array[2].messagea.b.c.d,并且不需要在 this.data 中预先定义。

注意:

  1. 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
  2. 仅支持设置可 JSON 化的数据。
  3. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
  4. 请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。

当我们每次下拉分页,其实是将所有累计的每页数据一次setData的,那么理论上来说,迟早会超过1024Kb,如果数据里img字段而且还是二维码base64字符串,那没几页就会超过1024,此时就会报错

试了很多方法,最终还是没解决。。。。

’‘

‘’

当我要放弃的时候,突然灵光一下,才明白小程序团队的用心良苦,如果数据越大,渲染越吃力,那开发者们开发出的小程序变慢,那人们第一时间吐槽的就是小程序底层引擎有多垃圾,而不是骂当前小程序应用有多垃圾于是小程序开发团队才会设置这样一个阈值1024kb。那么既然它有设置这样的阈值,就有相应的处理方案吧,可惜官网给出的方案太直白,直白的让人无法理解

官方文档说:请尽量避免一次设置过多的数据

  好,然后让我们避免一次设置过多的数据,那我们怎么把过的数据渲染呢,少部分少部分的来设置?怎么设置呢?

  

我就不一一罗列我试过的方法了,直接给大家说一个很灵验得方法把

  如果我们有个数组100个长度就到达1024kb,那就把数组拆分设置setData,拆多大呢?只要小于1024就行。

而且次数不影响相率,那我们就挨个渲染。为了代码的可拓展。最终给大家一个万能的方案

当我们组装好我们的goodsList的时候,挨个设置,挨个去渲染!

  

cosnt oldList = this.data.goodsList
cosnt newGoodsList = response.data.list
const goodsList = [...newGoodsList,...oldList]
for(let i in goodsList){
this.setData({
['goodsList['+i+']']: goodsList[i]
})
}

  Object 以 key: value 的形式表示,将 this.data 中的 key 对应的值改变成 value

总之遇到i一个数组就这样吧,不会有潜在bug了。
for(let i in goodsList){
this.setData({
['goodsList['+i+']']: goodsList[i]
})
}
现在是凌晨快3点了,还在等运维上线,我也是醉了,好了 就这样吧!

如果解决小程序1024kb渲染之坑的更多相关文章

  1. 小程序onLaunch事件的坑

    记一个小程序踩过的坑 小程序项目中app.js里面定义了globalData,即全局变量,里面定义了一个token字段 需求是这样的,每次进入小程序的时候需要检验该token有没有,没有就请求后台获取 ...

  2. 微信小程序-列表渲染多层嵌套循环

    微信小程序-列表渲染多层嵌套循环 入门教程之列表渲染多层嵌套循环,目前官方的文档里,主要是一维数组列表渲染的案例,还是比较简单单一,给刚入门的童鞋还是无从入手的感觉. <view wx:for= ...

  3. 开发微信小程序 中遇到的坑 及解决方法

    1.wx.request 只能访问 https 解决: 新建项目  不填appid  即可访问 localhost 2.页面中多重三元表达式  解析有问题 解决: <!--{{index}} { ...

  4. 小程序textarea完美填坑

    相信做微信小程序的码友们都被textarea这个原生组件坑过,什么placeholder位置错乱,穿透弹窗或遮罩层,ios上输入法弹起后换行输入内容遮挡,删除输入内容时内容被遮挡等等... 反正综上所 ...

  5. 微信小程序开发常见之坑

    https://www.cnblogs.com/shunxing/articles/6971648.html input里的value会在浮层上面的,要解决这一问题还是很简单的,在小程序中input有 ...

  6. 小程序:web-view采坑指南

    最近负责开发的[广州医保查询]小程序已经发布上线,其中使用web-view组件完成的[在线绑定社保卡]核心流程,遇到了一些坑,现总结如下: 首先,让我们一起看看什么是web-view ? 小程序api ...

  7. 微信小程序—setTimeOut定时器的坑

    原文地址: http://fanjiajia.cn/2018/06/27/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E2%80%94setTimeOu ...

  8. 小程序红包开发跳坑记 微信小程序红包接口开发过程中遇到的问题 微信小程序红包开发

    现在做小程序的越来越多,商家推广也是一个瓶颈,谁不发点红包,都很难找到人来用你的微信小程序了.于是不管你开发什么小程序功能,你或多或少都要用到小程序来发红包吧.  我们自己之前做公众号发红包,做了两三 ...

  9. 高大上的微信小程序中渲染html内容—技术分享

    大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...

随机推荐

  1. python--第十九天总结(Django)

    1.静态资源导入 {#在顶部load 一个staticfiles#} {% load staticfiles %} {#在底部使用#} <script src='{% static " ...

  2. JavaScript进度条(datalist/repeater等多个进度条)

    JS代码: function SingleProgressBar() { var iload = document.getElementById("iLoading"); var ...

  3. mysql学习笔记--数据库事务

    一.概念 1. 事务是一个不可分割的单元 2. 事务作为一个整体要么一起执行,要么一起回滚 二.事务操作 1. 开启事务 start transaction 或者begin [work] 2. 提交事 ...

  4. layui数据表格监听按钮问题

    layui官网文档源码 原始容器 <table id="demo" lay-filter="test"></table> 工具栏模板: ...

  5. mysql 索引及索引创建原则

    是什么 索引用于快速的查询某些特殊列的某些行.如果没有索引, MySQL 必须从第一行开始,然后通过搜索整个表来查询有关的行.表越大,查询的成本越大.如果表有了索引的话,那么 MySQL 可以很快的确 ...

  6. hbase-多租户

    namespace 不同表在不同的namespace,可以做用户的权限控制 资源限制 限制每时间段请求的数量和大小 设置表的空间大小 修改hbase-site.xml文件 添加两个配置 hbase.q ...

  7. linux下修改时间戳

    Linux下touch是一个非常有用的命令. touch语法结构如下: touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间&g ...

  8. UCloud双11活动 - 新人UCloud代金券最低年100元香港云服务器

    UCloud,一家在国内还是比较大的云计算产品提供商,早年一直提供企业服务的,如今也开始落地到个人用户群.这不在希望获得更多的用户基础的同时发布各种促销活动.这次双十一活动时机肯定也是要把握的,据说官 ...

  9. Filezilla server配置FTP服务器中的各种问题与解决方法

    转至;https://www.jb51.net/article/122171.htm 安装文件以及补丁下载 公司很多资料需要通过ftp上传,那么就需要配置一个FTP服务器,找了一台Windows服务器 ...

  10. RequestMethod.Post&RequestMethod.GET

    1.GET和POST都是将数据送到服务器 2.GET通过URL请求传递用户的数据,将表单各字段名称以及内容,以成对的字符串连接,置于action所指程序的URL后:POST方法通过HTTP post ...