前言
众所周知,小程序的渲染性能一直被广大开发者诟病,2023年中旬,小程序团队正式发布了 skyline 渲染引擎,Skyline,旨在替代 WebView 作为小程序的渲染层,以提供更优秀的渲染性能和诸多增强特性,让小程序能达到原生的体验。
非常好,那么就是说我们可以在小程序上体验类原生的特性啦!这下谁敢再说小程序是屎?
尝试
在用了一段时间,主要尝试了canvas、手势组件动画等功能,惊奇的发现,小程序做的这个 skyline 渲染引擎,是一陀超大的屎。
噢!腾讯,你小子好啊,研究了这么长时间,跑我这排宿便了是吧?


自己写的样式和iconfont样式给我报了很多坨警告,能用吗?能用,但是我是屎我需要恶心你,我必须得给你点警告。
除了控制台脏了之外,还有各种各样数不清的 bug。比如,地图的bindregionchange失效,而你去论坛发帖,他们只会说:"未复现"、"写片段"、"你试试",发文时实测依然没有修复😅。
爱莲说
铺垫了这么多,实属无奈,我也不想说这么多,只是这口屎憋在嘴里,臭的难受。我本以为出淤泥而不染已经很难得了,没想到在这屎坑里还有大佬栽培了一朵精美绝伦的白莲花,它就是 lspriv/wx-calendar ,github链接:github.com/lspriv/wx-c...。
看到这么牛逼的组件,只有区区一百来个 star。
牛逼不牛逼,直接看效果:

它还同时支持 skyline 和 webview 下渲染。

每个场景都是丝滑过渡的,元素到元素的联合动画。看的出来,这个日历是有很重的 MIUI 风格的,如果不是右上角的小程序胶囊,我甚至以为是某手机的自带日历。

依赖 skyline 的 worklet 动画,组件做到了跟手、丝滑,且符合直觉的动画。
lspriv/wx-calendar 使用
lspriv/wx-calendar 需要使用npm下载并构建,然后引入组件使用。
css
npm i @lspriv/wx-calendar
然后需要使用微信开发者工具构建 npm
perl
{
"usingComponents": {
"calendar": "@lspriv/wx-calendar"
}
}
ini
<calendar id="calendar" bindload="handleLoad" />
生态
作者十分聪明,给 lspriv/wx-calendar 预留了插件接口,开发者可以根据自身需求,写扩展功能。
源码中 src>plugins>lunar.ts 是一个内置插件,实现了农历、节气、闰年等功能。
目前为止,还没有看到有第二个人为作者贡献插件。
展望
目前还有很多基础功能还没有开发,比如
- 日期标注,日期标注有是有,但是作者将几种标记方式写死了,只能用内置的日程、角标和节假日标记,开发中肯定是期望可以传入组件或自定义样式的。
- 选择区间,一个很常见的场景,需要选择日期区间,跨月、跨年选择,这些在不了解源码的情况下,去手写插件也是比较困难的。
- 自定义样式,作者将自己的样式隔离了,开发者只能通过传入指定的style字符串修改样式,这个用起来不是很方便。
结语
总的来说,这是一款不可多得的组件,即使在PC端,也是不常见的。在小程序的层层阻挠下能开发出如此的组件,实属不易。
