返回

用小程序做个「很难」的产品是怎样一种体验

见解分享

“理论上,小程序能力还挺完整的,大部分 Web 可以做的产品,都可以落地。”

然而,实践总能暴露出问题,理论的美好总能被现实无情戳破。

就在前段时间,我们在轻芒做了一个特别“难”的小程序。这也许是目前小程序中,交互最有特色,实现最有挑战的小程序之一了。

所谓“难”,主要体现在:

  • 交互复杂: 小程序中既有常见的单页面交互,也有复杂的瀑布流交互,同时还需要兼顾沉浸式阅读体验,交互逻辑异常复杂。
  • 性能要求高: 小程序毕竟是运行在手机上的,性能要求不可避免地会比 Web 端低,如何保证复杂交互下的性能流畅度成为一大挑战。
  • 实现难度大: 小程序提供的 API 有限,很多 Web 端可以轻松实现的效果,在小程序中却需要另辟蹊径。

作为一个有责任心的开发者,在技术选型上,我们果断舍弃了常规的小程序开发框架,转而采用更灵活、更底层的原生开发模式。

原生开发模式给了我们更大的自由度,但同时也意味着更多的坑和更多的挑战。

瀑布流的实现

瀑布流是小程序中最大的难点之一。小程序提供的原生滚动组件虽然支持惯性滑动,但并不能实现瀑布流效果。

实现瀑布流的常规思路是,通过计算每项的高度,然后通过定位元素实现瀑布流效果。然而,小程序的定位元素能力有限,无法满足瀑布流的要求。

最终,我们采用了一种全新的思路:利用 canvas 实现瀑布流。

通过 canvas,我们可以直接绘制每项,并通过控制绘制顺序实现瀑布流效果。这种方式不仅解决了定位问题,还极大提升了性能。

沉浸式阅读的实现

沉浸式阅读需要隐藏页面中所有非必要元素,只保留正文内容。在 Web 端,这可以通过 CSS 轻松实现。然而,小程序中并没有提供类似的 API。

最终,我们通过重写小程序原生渲染层,实现了沉浸式阅读功能。这种方式不仅可以隐藏页面元素,还可以屏蔽小程序的原生导航栏,真正实现沉浸式阅读体验。

性能优化的实现

小程序的性能优化是一个系统性工程,涉及到各个方面的细节优化。

在布局方面,我们采用了虚拟列表,只渲染可视区域内的元素,大大减少了渲染压力。

在交互方面,我们通过事件委托和函数节流,减少了不必要的事件触发和函数调用,提升了交互响应速度。

在网络方面,我们通过缓存和预加载技术,减少了网络请求次数和数据加载时间,提升了页面加载速度。

通过这些细节优化,我们最终将小程序的性能优化到了极致,保证了复杂交互下的流畅度。

结语

做一个“难”的小程序,是一段充满挑战和收获的旅程。

通过创新思维和技术突破,我们最终克服了重重困难,打造出了一个交互独特、性能流畅的小程序。

这个小程序不仅给我们带来了巨大的用户好评,也让我们对小程序的开发边界有了更深的认识。

相信随着小程序生态的不断完善,开发者们可以创造出更多更惊艳的小程序产品。