Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >更稳更快:深大的树洞小程序版本迭代与优化记录

更稳更快:深大的树洞小程序版本迭代与优化记录

原创
作者头像
Song
修改于 2017-07-26 02:13:52
修改于 2017-07-26 02:13:52
4.3K1
举报
文章被收录于专栏:Song的专栏Song的专栏

作者简介: Jason,深圳大学通信工程专业大三在读,深大的树洞小程序开发者。高中接触 Web 开发和设计,大学开始正式学习前端、PHP、Node.js,大一开始在校不间断负责多个公众号、小程序的开发。

深大的树洞(以下简称树洞)是面向深大学生的一款小程序,同学们可以在这里分享新鲜事,吐槽生活中不爽,诉说碰到的委屈。

树洞也是自微信小程序公测以来上线较早的一批小程序,上线之后获得了深大同学们的广泛好评,平台也一直保持着较高的活跃度。

核心功能展示:

产品核心逻辑较为简单,用户进入小程序之后在首页可以浏览用户已发布的内容,支持点赞和评论,用户同时能在底部TAB 栏进入消息页查看和回复相关评论信息。

点击屏幕右下角的悬浮按钮可以进入发布页面,内容支持文字和配图,并提供定位功能,用户如果选择实名发布信息的话,会获取用户的微信昵称和头像以供主页显示。

版本迭代

关于 1.0

大概是今年的 2 月份,当时小程序正式上线了,自己用了一圈,体验上总体来说还是比网页要出色一些。然后我也一直有开发一款树洞类应用的想法,于是就着手开始做一款树洞小程序。

当时为了赶在 2.14 情人节上线,整个开发周期基本就只有不到一周的时间,包括前后端的开发,十分的紧迫。1.0 的技术选型阶段,后端采用 Node.js + MySQL 的架构,而前端小程序方面,为了使用 ES6 和 Less 进行开发,选用了 Labrador 框架。

但是后来发现 Labrador 也有问题,首先就是状态的绑定分为了 propsstate,绑定的时候增加了复杂度,其次就是对于组件的支持并不是特别的舒服,没有 Vue 单文件来的好用。

下面就开始来讲 2.0 的整个开发过程。

技术选型

后端

后端没有推倒重来,在 1.0 的基础上增加了 /v2 的后缀,并且复用了一些 1.0 版本的 API。一方面是考虑到某些 API 的数据结构已经比较完善了,而且暂时没有更好的设计;另一方面是考虑到这样可以节省一点开发的工作,也可以兼容低版本。

对于数据的设计,也没有推倒重来,只添加了广告和通知两个数据库

前端(小程序端)

在 1.0 发布之后,无意之间发现了 WePY 这个框架,发现这个框架借鉴了 Vue 的单文件组件的开发模式,而且一些 API 的使用也更加贴近原生的 Vue,另外在框架层面也实现了数据的脏检查,可以摒弃原生小程序的setData,于是决定采用 WePY。

开发

考虑到 2.0 版本要加入评论回复的提醒,那么如何展示通知就是一个大问题。原因是因为小程序没有提供跨出小程序通知的能力,那么我们就只能在小程序内考虑通知的提示。

而在对后端的通知 API 设计的时候,考虑了两种方案:

  • Websocket
  • 轮询

Websocket 是基于 TCP 的全双工通信,可以实现服务端推送信息,微信的 Web 端也是采用 Websocket 来实现通信的,而轮询则是客户端定时请求服务端来查询有无通知。

相比而言,Websocket肯定是更优选择,但是考虑到小程序入口在微信内部的,聊天时一定要退出小程序,并且很少人会使用小程序置顶的功能,所以如果使用 Websocket 就需要经常重复建立 Websocket 连接。

并且考虑到很少有人会开着树洞等回复,所以实时的通知对用户体验的提升不大,于是我采用了轮询来实现,这也是技术上比较简单的实现方式。

在开发通知页面的时候,我还发现了一个问题,就是微信小程序的 request API 还不支持 PATCH 请求,便暂用 PUT请求作为替代。

通知方面,由于通知只能在小程序内部进行显示。于是我打算使用 Tab 栏来提示,随之而来的第二个问题就是,小程序提供了一个展示 Tab 栏的能力,但是只能自定义 icon 和文字,并且只能在配置文件里配置,等于说完全失去了对 Tab 栏编程能力,于是我抛弃了原生的 Tab 实现,使用 WePY 提供的组件系统自己实现了一个 Tab 栏。

最后的页面结构如下图所示:

基于此,首页、通知、用户三个页面不再是 page,而是 component,所以开发的时候 class 应该继承的是 wepy.component 这个类。而其他页面层级的页面的类,则应该继承 wepy.page。也正是由于这种情况,组件是没有生命周期的函数的,所以需要在 index.wpy 上面手动触发组件内的函数,来模拟生命周期函数的调用。

接下来的一个问题,就是关于 request 的登录态的问题。由于小程序是没有 cookie 的,于是我们普通设计 ajax 的登录态 token 不能放在 cookie 上了,于是便考虑将 token 放在 headers 里。在用户首次登陆的时候将登录态的 token 放在本地的 Storage 里,并在每个请求发起的时候自定义了一个请求头,手动带上 token。

示意图如下:

关于树洞开发的一些问题和解决方案就基本记录到这里了。

体验优化

随着树洞用户量的逐渐增加,部分用户反馈在夜间高峰期树洞首页数据刷新缓慢甚至经常刷不出数据。

还有一些已经去外地实习的同学跟我吐槽说,树洞的使用体验不如在校内使用时那么流畅。

我对以上问题进行反思,先考虑从小程序的代码层面进行优化,但是折腾一番后发现在基于微信提供的框架上进行开发后,自己能做的事情十分有限,便作罢。

然后开始从用户请求与服务器端通信的过程入手分析问题,这时正巧看到腾讯云动态加速新品内测,我尝试申请了一下竟然很快就通过了,于是遍想通过接入动态加速,看看问题是否出在网络传输过程中。

接入过程也十分简单,填写加速域名和IP,然后过大概5分钟OK了:

在接入动态加速之后的一个星期的时间,我每天跟踪了之前曾经跟我反馈过问题的同学们的树洞使用体验,发现他们基本没有再跟我吐槽过卡顿、数据丢失等问题,使用高峰期间的用户体验得到了很大的提高。

然后我使用听云测试了一下腾讯云动态加速的加速效果:

  • 源站所在地:广州
  • 检测数据时间段:2017年07月24日 16:30 - 2017年07月25日 16:30
  • 测试条件:10 M大小文件下载

未经加速直连源站各运营商监测数据:

加速后各运营商监测数据:

未经加速直连源站各省份监测数据:

加速后各省份监测数据:

相比之下,加速后性能提升近50%,可用性也有所提高,效果还是相当明显的。

虽然加速效果很明显,但是我发现截止发文时间为止,腾讯云动态加速控制台的统计分析模块所提供的统计维度还是太少,对于树洞这类运营需求比较强的产品来说,显得有些美中不足,希望他们正式上线之后,能加入更丰富的统计功能。

以上,希望我分享的内容能帮到大家。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
请问树洞代码是你写的吗?
请问树洞代码是你写的吗?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
无痛的微信小程序开发体验
在小程序之初便开发应用了,现在小程序的开发也越来越成熟了,完善了很多的API、组件、架构等,社区也由原来的零星点点到现在的不大不小,但也算是有了,期间也诞生了很多的开发框架,越来越多的三方辅助库,我也捣鼓出很多。比较有名的算是 wepy 和 labrador , wepy是 vue 风格的小程序开发框架, labrador 则比较亲和 React ,各有千秋,也各有深坑,而labrador 作者目前已经停止更新了 TnT,作为React深度使用者的我来说是忧伤的,于是我捣鼓出 wn-cli 来用类 React 快速开发微信小程序,然而在这个过程中,想了很多,为什么需要开发框架呢?小程序本身在一开始就强调框架,且现在做的也不差,后来总结了下,无非是不熟悉小程序这套框架,但学习新的中间框架去开发小程序,这不是更加加大了熟悉成本吗?且出了问题增加了处理的代价。
疯狂的小程序
2018/01/25
1.5K0
小程序与后端服务的对接实践
小程序的核心价值在于其轻量级、高效、易于使用的特性,而后端服务的对接则是小程序开发中的关键环节。一个良好的前后端协作不仅能提升用户体验,还能提高系统的稳定性和可扩展性。本文将详细介绍小程序与后端服务的对接流程、关键技术点,并结合具体实例进行解析。
LucianaiB
2025/01/29
1280
小程序优秀开发资源
下面是一些 github 上比较受欢迎的小程序项目,包括开发框架、UI组件等 labrador (开发框架) 特性: 支持加载海量NPM包 支持ES6/7标准代码,使用async/await能够有效避免回调地狱 实现了组件重用和嵌套 强力压缩代码,尽可能减小程序体积 更详细信息可以查看项目主页 https://github.com/maichong/labrador 目前已有 1045 个 star wepy (开发框架) 特性: 类Vue开发风格 支持引入NPM包 支持Promise 小程序细节优化,如请
dys
2018/04/04
1K0
云开发xWePY,快速实现Linux命令查询小程序
本文作者:Linux 中国开发组组长 白宦成,自由职业者,曾就职于网易杭州研究院,目前专注于云计算技术和理念的布道和分享。
腾讯开源
2019/05/16
1.7K0
云开发xWePY,快速实现Linux命令查询小程序
小程序开发仿微信界面 DEMO
前言 先看一个视频,这个视频并不是去演示如何使用微信,而是演示基于wepy开发的微信小程序demo。 点击观看视频 : 【wepy开发的微信小程序demo 】 demo中包含的功能有: 仿微信界面 联
Gcaufy
2017/05/10
19.9K7
小程序开发仿微信界面 DEMO
小程序开发总结
很久很久很久没有更新了,最近几个月因为房子交房,生活上是一片忙碌,工作上的事其实还好,没有分去很多精力,主要是在生活上的事情牵扯了太多了精力,于是乎把每周一更博客的习惯都打断了,每周想起这件事情都觉得很愧疚,但是总是又抽不出时间来写,好像脑袋一片空白,不知道在要写什么。
Originalee
2018/08/30
12.7K1
微信小程序面试题总结
大体相同,但小程序直接this.data的属性是不可以同步到视图的,必须调用this.setData()方法!
changxin7
2020/02/25
8.1K0
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
一夜之间,微信小程序刷爆了行业网站和朋友圈,小程序真的能如张小龙所说让用户“即用即走”吗?其功能能和动辄几十兆安装文件的APP相比吗?开发小程序,是不是意味着移动应用开发的一次推倒重来,企业的运营成本会不会因此增加?近日,笔者参加了一次腾讯自选股介绍小程序开发过程的内部沙龙,自选股小程序产品经理Poppy和首席开发工程师小K的一番海聊,从开发技术和行业走势两个方面为我们揭开了小程序的秘密。 今年7月,腾讯自选股团队接到微信的邀请,做一个Web+的应用测试。当时他们还不知道,这就是微信小程序的首批开发内测。
顶级程序员
2018/04/26
1.3K0
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
超实用的小程序官方能力,你知道吗?
小程序官方平台和工具里,其实有很多很好用的能力,你都了解吗? 小程序管理后台 微信公众平台里,其实藏着一些好用的能力,一起来看看吧。 问题定位辅助 ---- 运维中心 在小程序管理后台,【开发】-【运维中心】里,可以有以下能力: 错误查询: 可以查到所有小程序运行错误的记录。 性能监控: 可以监控小程序运行的性能,包括不同时间段的启动耗时、下载耗时、初次渲染耗时等。 告警设置: 错误告警通过微信群来通知,每个小程序对应唯一的告警群,扫码加入后即可接收告警通知。 微信7.0以后: 如果使用工具压缩和
腾讯NEXT学位
2019/01/11
1.7K0
超实用的小程序官方能力,你知道吗?
小程序测试
开发版和体验版无需审核,需要给微信号配置权限,通过扫小程序二维码才能访问,-------记得打开调试。
用户10443079
2023/03/21
1.8K0
小程序优化36计
本文偏技术,可能较枯燥,阅读完大概需要 15分钟 微信小程序转眼上线将近一年了,提供了接近原生App的使用体验,加上一年来不断释放新的能力,获得的关注越来越多。笔者参与到了小程序产品相关的研发工作,感觉对于结构较为复杂的小程序,性能问题还是蛮突出的。 性能优化是一个长久的课题,今天总结了一些在研发过程中的优化策略,有代码层面的,也有一些方案策略层面的,其中一些优化方法也适用于app和web,有些则只适用于小程序。今日抛砖引玉,与各位分享小程序性能优化的36计。 瞒天过海 用户对小程序速度的第一感知就
企鹅号小编
2018/01/23
2.1K0
小程序优化36计
微信小程序 接口调用讲解 (AccessToken、小程序码登录)
♘ 通过微信小程序实现扫码登录 ♘【网页版】使用小程序码登录 ♘ 通过扫小程序码实现网站登录功能
泥豆芽儿 MT
2022/05/10
18.1K0
微信小程序 接口调用讲解 (AccessToken、小程序码登录)
[猫头虎分享21天微信小程序基础入门教程] 第11天:小程序的动态数据展示与实时更新
[猫头虎分享21天微信小程序基础入门教程] 第11天:小程序的动态数据展示与实时更新
猫头虎
2024/05/26
3870
如何快速开发一款AI小程序?基于微信云开发的实战指南
微信小程序凭借其轻便、易推广等特点,已成为应用开发的重要方式之一。而AI技术的快速发展让智能化应用成为可能。通过微信云开发(CloudBase)与小程序结合,开发者可以实现从前端到后端的一站式AI应用开发。本文将深入讲解如何利用微信云开发快速搭建一款AI小程序,展示从模型训练到云端部署的完整流程。
一键难忘
2024/11/12
1K0
如何快速开发一款AI小程序?基于微信云开发的实战指南
干货 | 两百条!微信小程序开发跳坑指南
微信小程序开发过程中,经常会遇到各种坑及疑难问题,为了让各位在开发过程中少走弯路,因此极乐大叔整合了200条跳坑指南,请大家仔细阅读,日后开发绕开这些坑~ 跳坑一 跳坑textarea《二百二十三》不显示文本及textarea相关问题集合 跳坑《二百一十三》 background-image无法获取本地资源图片、... 跳坑《二百一十二》单位rpx/px/em/vh使用说明 跳坑《二百一十一》转发API:onShareAppMessage使用 跳坑《二百一十》使用模拟数据mock.js 跳坑《二百零九》te
极乐君
2018/02/06
4.1K0
微信小程序实例
UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wemark ★85 - 微信小程序Markdown渲染库 WeZRender ★36 - 微信小程序Canvas增强组件 wetoast ★21 - 仿照微信小程序提供的showToast功能 wxapp-charts ★20 - 微信小程序图表charts组件 WeiXinProject ★18 - 列表的上拉刷
YGingko
2018/03/30
5.1K0
使用微信小程序来实现扫码登录网站
微信小程序本身提供了openid等信息的无感知获取,基于此来实现微信扫码登录,主要包含以下几个步骤:
ianzhi
2023/10/19
2K0
【小程序】384- 如何一人五天开发完复杂小程序(前端必看)
自定义导航栏布局下,我们可以完全控制导航栏样式,赋予导航栏更多交互及 UI 设计上的可能。如上图所示,Readhub 在导航栏中加入了设置按钮,喜茶在个人页中标题渐隐及沉浸式导航栏效果。
pingan8787
2019/10/23
1K0
【小程序】384- 如何一人五天开发完复杂小程序(前端必看)
小程序 · 一周报
微信新增了服务类小程序分类搜索。用户进入「发现-小程序」,点击搜索按钮,即可体验该搜索服务。
极乐君
2018/07/31
8830
小程序 · 一周报
小程序开发项目实战:社交平台
随着微信小程序的普及,越来越多的开发者开始使用它来构建各种应用,其中社交平台作为一种互动性强、需求广泛的应用形式,成为了许多开发者的首选。社交平台小程序能够实现用户之间的即时通讯、朋友圈发布、互动等功能,满足了现代人们日益增加的社交需求。在这篇文章中,我们将通过一个社交平台小程序的开发实战,详细介绍如何设计和开发社交类小程序,并结合具体的代码示例和开发经验,帮助你更好地掌握小程序开发的实战技巧。
LucianaiB
2025/01/28
1820
相关推荐
无痛的微信小程序开发体验
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档