又一个2W+的答题抽奖活动,复盘复盘总结总结

前段时间太忙了,现在才有时间对一些活动进行复盘总结,这里先对其中一个答题抽奖活动进行复盘总结一下。遇到的一些问题、分析以及其解决方案。

答题+抽奖

参与者每答对一道题既可获得相对应的分数,分数进行累计达到活动规定的分数后即可参与抽奖,通过奖励的方式刺激用户参与活动。

答题抽奖规则:用户需要在规定的时间点才可以答题,非活动开放时间点进入活动也无法参与。给到充足的活动预热时间,让更多用户参与到活动中,在每场的答题时间内用户答对设置的所有的题目,即可有机会获得抽奖奖品。

抽奖核心算法

基于云开发的聚合能力上进行封装实现。如果现在进行抽奖活动,需要选出一名幸运用户。那么使用云开发的聚合方法 sample,可以轻松实现这样的一个场景。

比如,如果现在进行抽奖活动,需要选出一名幸运用户。可以使用聚合Aggregate.sample(size: number)实现,那么 sample 的调用方式如下:

db.collection('users') .aggregate() .sample({ size: 1 }) .end()

返回了随机选中的一个用户对应的记录,结果如下:

{ "_id": "696529e4-7e82-4e7f-812e-5144714edff6", "name": "b" }

关于服务器资源费用开销

这次活动,我选了基础套餐+按量付费,总的下来服务器资源开销也就一百几十不等。具体可以看看官方的计费方式和标准。其实服务器资源总开销,还得看访问人数和访问次数,比如同样的2W+人参与答题抽奖活动,但是人均访问的次数翻倍,那么资源消耗也差不多翻倍了的。

1、答题过程中的白屏问题

由于题库的题量实在太大了,一次性加载setData或者多次concat后setData,其实它俩都是一次性setData,这样就会造成加载超大数据无法渲染空白的问题。

问题问题

setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。

文档中写的是单次设置,但咋使用过程中发现分批次设置达到这个值也依然无法渲染数据,此时的解决方案,一般就是只显示能渲染的条数,或改成翻页,不能无限加载更多,从此看来,还是不够理想,查了半天没有找到答案,特此把解决方案分享给大家。

解决办法

通过设置数组下标(二维数组),实现每次只setDate新加载的数据。

data:{pageNo:0,list:[]
},getListData:function(){let arr = [];......// 本次加载的数据赋值给arrsetData({['list[' + pageNo + ']']: arr});
}
<!--wxml--><view wx:for="{{list}}" wx:for-item="item" wx:key="{{index}}"><view wx:for="{{item}}" wx:for-item="ele" wx:key="{{indexEle}}"><text>ele.xxx</text><text>ele.xxx</text></view></view>

2、导出成绩排名时遇到的问题

我作为这次答题活动小程序的开发者,应对方要求,比赛结束后,导出的要素要包含排名、参赛编码、所属赛区、分数、用时、答题日期这些信息。

在这次知识竞赛活动结束后,将排行榜数据导出为excel,打开查看,发现了一个问题,看见答题日期与实际相差8小时,这显然是有问题的。既然发现了问题,那就需要解决问题了。

分析问题

云函数中的时区为 UTC+0,不是 UTC+8,在云函数中使用时间时需特别注意。如果需要默认 UTC+8,可以配置函数的环境变量,设置 TZ 为 Asia/Shanghai。

解决办法

打开云开发控制台

配置函数的环境变量

这样,然后重新导出的数据就正常了。

3、关于学时

参训人员学习时,系统将记录全部学时。因系统后台处理大量数据需要一定时间,有时不能及时反馈至用户端,可能出现学时没有及时显示、学习状态没有改变的情况,待下次登录时系统将更新相关数据。

4、关于系统卡顿

由于前期参与人数较多,系统处理信息能力不足,有时会出现卡顿现象。目前系统已完成升级改造,将有效提升流畅度。

5、数组push时被覆盖

这是一个数据库读取事件,actLine被加值后,在下次开启加值时,会将之前加的值替换,但对原本的值无影响,即几次push后,所有push的值都会变成最后一次push的值。

解决办法:

if(res.data.length != 0){   //查询成功时for(let i = 0; i < res.data.length; i++){obj.title =  res.data[i].titleobj.host =  res.data[i].hostactLine.push(Object.assign({}, obj))      //采用Object.assign将obj置于对象中再push给actLineconsole.log(i,actLine)
}

6、还有一些兼容问题:

1、IOS 的 Date 构造函数不支持2018-04-26这种格式的日期,必须转换为2018/04/26这种格式;

2、image组件使用webp图片时,IOS需要设置webp属性;

3、Android手机在onShow内调用wx.showModal,如果不关闭弹窗(直接点击右上角退出小程序),弹窗不会销毁,再次进入页面触发onShow时会出现两次弹窗,IOS正常;

4、小程序中使用web-view打开pdf, IOS 可以正常打开,Android 打开为空白;

常见使用问题解答

除了一些程序系统本身的bug,还有一些用户在使用上遇到的问题,因为有的用户是第一次使用线上答题,所以还不太会用是可以理解的。在此对常见问题进行一一解答。

1、题目做错了,想再次巩固怎么办?

可点击“错题记录”,然后去错题记录里面去消除错题,最终达到巩固的效果。

2、经典题目,想多次练习,怎么办?

可点击题目下方“收藏”按钮,然后在“题目收藏”中查看!

3、已做题目想重复学习,去哪看?

点击“答题记录”即可。

又一个2W+的答题抽奖活动,复盘复盘总结总结相关推荐

  1. c语言写的跳转心理测试,求各位大神赐教!我做了一个“心理测试的答题卷”编程,总共有1...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求各位大神赐教!我做了一个"心理测试的答题卷"编程,总共有10道题,每道题有3个供选择的答案,每个答案得分从小到大是8分.5分和3分, ...

  2. 用c语言编写心里测试,求各位大神赐教!我做了一个“心理测试的答题卷”编程,总共有1...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求各位大神赐教!我做了一个"心理测试的答题卷"编程,总共有10道题,每道题有3个供选择的答案,每个答案得分从小到大是8分.5分和3分, ...

  3. c语言编写心理测试,求各位大神赐教!我做了一个“心理测试的答题卷”编程,总共有1...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求各位大神赐教!我做了一个"心理测试的答题卷"编程,总共有10道题,每道题有3个供选择的答案,每个答案得分从小到大是8分.5分和3分, ...

  4. c语言做心理测试程序,求各位大神赐教!我做了一个“心理测试的答题卷”编程,总共有1...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求各位大神赐教!我做了一个"心理测试的答题卷"编程,总共有10道题,每道题有3个供选择的答案,每个答案得分从小到大是8分.5分和3分, ...

  5. c语言编写一个简单的答题系统

    利用c语言编写一个简单的答题系统. 思路是先设计好题目和答案,再输入自己的答案,利用输入的答案与正确答案对比,从而得出你回答的对错. (一)捆绑题目和答案 我们可以利用结构体对一个题目捆绑上一个答案. ...

  6. 利用微信第三方平台制作微信抽奖的优势以及一个成功的微信抽奖活动方案分享!

    微信9 亿用户量,微信小程序一经推出就备受市场关注,很多人认为这将会是未来企业流量的一大入口,而实际情 况,也的确是如此. 在这样的市场背景下,越来越多的商家想通过微信抽奖小程序来制作微信抽奖活动,那 ...

  7. 一个爆款小程序的复盘

    在社交网络的用户行为中,表情和图像素材处理一直是非常强烈的需求所在,旧文 今天聊聊表情包 里面点到为止,不敢说的太多. 那么从PC时代,到移动APP时代,到微信时代,这一诉求从未降温,但你理解诉求,和 ...

  8. 用c语言制作一个简单的答题系统

    首先制作一个答题系统需要有一个题库,其次要有完整的出题系统,然后要能够进行答题和判断答案对错,最后就是统计答案正确率了. 实现创建一个题库并不难,仅需要使用数组保存题目与标准答案就行了,使用strcp ...

  9. 做一个九宫格诗词答题小程序 (二)倒计时功能实现

    为了增加答题的趣味,设置了答题时间.采用倒计时,时间设置为9秒.时间一到0,结束答题.点击核对答案原文按钮可以判别答案是否正确,并显示判别结果.正确答案和原文.如回答正确,答对题数增加1个. 为了适用 ...

最新文章

  1. XamarinAndroid组件教程RecylerView适配器设置动画示例
  2. M产品研发日志(4)---项目出差
  3. 泛微e9隐藏明细表_泛微E8 隐藏行、明细表
  4. html5计数器,CSS 计数器(counter)
  5. get方式乱码及MAC异常
  6. c++ string 堆还是栈_5 个刁钻的 String 面试题!你都遇到过哪些?
  7. 多线程介绍和多线程模块-lock-互斥锁
  8. bootstrap validator 提供了哪些验证函数
  9. Python框架篇之Django(Template模版:标签tag、自定义filter、extend模板继承)
  10. Windows服务器:切断默认共享通道七招
  11. 【安装包】MySQL客户端
  12. React_loadable
  13. springboot属性配置
  14. oracle返回当前日期函数,oracle 日期时间函数使用总结
  15. 在renderman中使用raytrace 计算fur的项目
  16. 如何提取网易公开课的音频
  17. 获取IFeatureWorkspace所有要素类、表
  18. C++ 匠心之作 从0到1入门学编程
  19. 2018百度之星程序设计大赛资格赛(4道题的答案)
  20. Uva 11201麻球繁衍(设概率方程的技巧)

热门文章

  1. 恒压供水(无负压供水)全套图纸程序 西门子s7-200smart PLC
  2. 来看看你的人体胖瘦程度以及是否健康?Python实现体重指数计算器
  3. 北京地图矢量数据下载
  4. 颈椎病的知识介绍(5)- 预防
  5. 【K3s】第1篇 K3s入门级介绍及架构详解
  6. 诺基亚5230微信 服务器繁忙0,十年前神机诺基亚5230上手,微信都没法上,网友:主要是情怀!...
  7. 热力学与统计物理全揽(未完待续)
  8. 腐烂国度2巨霸版计算机学知识,【图片】《腐烂国度2:巨霸版》新手入门_腐烂国度2吧_百度贴吧...
  9. 关于应届毕业生签署三方协议有关注意事项
  10. 谷歌相册将于2021年6月告别不限量高品质云照片与视频存储