新晋是什么意思| 左行气右行血什么意思| 号是什么| 6月15号是什么星座| 辣皮子是什么| 什么是苔藓皮肤病| 脚气挂什么科室| 青光眼是什么意思| 血脂高吃什么油好| 67岁属什么生肖| 促甲状腺素低是什么原因| 百香果什么味道| 盗汗吃什么药| 4月8号什么星座| 牛黄安宫丸治什么病| 情窦初开什么意思| 甲减是什么原因引起的| 什么什么什么心| 生蚝有什么功效与作用| close什么意思| 神经递质是什么意思| 长期喝蜂蜜有什么好处| 朝秦暮楚是什么意思| 娘是什么意思| 蚊子怕什么颜色| 夏令时是什么| 梦见被蛇追着咬是什么意思| 沙和尚是什么动物变的| 杜蕾斯是什么| 吃什么容易怀女儿| 三月初什么星座| 颈椎痛吃什么药最好| 鸟字旁的字大多和什么有关| 99年属什么的| 肺结节什么东西不能吃| 木危读什么| 中国属于什么气候| 消化酶是什么| 磨砂膏是什么| 吃什么补充dha| 366是什么意思| 酒糟是什么| 起飞是什么意思| 怀孕腿抽筋是因为什么原因引起的| 窝在沙发里是什么歌| 顺手牵羊是什么生肖| 赛能是什么药| 肌肉酸痛挂什么科| 卫青为什么被灭九族| 大名鼎鼎的鼎是什么意思| 解尿支原体是什么| 401什么意思| 脸部麻木是什么的前兆| 什么叫哮喘| 老年人适合吃什么水果| 三醋酯纤维是什么面料| 呕气是什么意思| vans什么意思| 什么是生殖器疱疹| 交接是什么意思| 肝囊肿是什么意思| 手腕长痣代表什么意思| 睡眠不好总做梦是什么原因| 7月11日是什么日子| 故宫什么时候闭馆| 淋巴细胞低说明什么| 画眉是什么| 梦见下大雪是什么意思| 庄周梦蝶是什么意思| esrd医学上是什么意思| 南方有什么生肖| 像蜈蚣一样的虫子叫什么| 血压高挂什么科| 属狗和什么属相不合| 牛奶有什么营养| 结膜炎用什么药| 里正相当于现在什么官| 小孩腹泻吃什么药好得快| 月经期生气会造成什么后果| 拉格啤酒是什么意思| 夏天有什么植物| 姜薯是什么| 田螺吃什么| 鸡蛋有什么营养| 发烧41度是什么概念| g750和au750有什么区别| 山峦是什么意思| 六月初二是什么星座| 蓝猫为什么叫蓝猫| 尖锐湿疣用什么药| 声音嘶哑是什么原因| 子宫肌瘤吃什么食物好| 隔空打牛是什么意思| 39岁属什么| 心肌病是什么病严重吗| 大红袍属于什么档次| 离岸人民币是什么意思| 2月29号是什么星座| 暑湿是什么意思| 好雅兴是什么意思| 10点是什么时辰| 饶舌是什么意思| 99足银是什么意思| 水牛是什么意思| 贫血看什么科| 伯伯的儿子叫什么| 心率过速吃什么药| 晚餐吃什么减肥| 口臭喝什么茶效果最好| 肝病去医院挂什么科| 姓薄的读音是什么| 纯爱是什么意思| 十一月二十是什么星座| 男人忽冷忽热说明什么| 李白长什么样| 脾大是什么病| 职业年金有什么用| 茧子是什么意思| 胆囊炎是什么原因引起的| 做包子用什么面粉好| 阳痿吃什么| 痛风什么原因引起| 梦见好多猪肉是什么意思| 变色龙形容什么样的人| 无的放矢是什么意思| 肾宝片是什么| 本性难移是什么生肖| 什么的鸽子| 转氨酶高有什么症状| 康五行属什么| 戏是什么生肖| 海苔是什么做的| 煞南是什么意思| 七个月宝宝可以吃什么水果| 梦到做饭是什么意思| 心绞痛什么感觉| 滴虫性阴道炎用什么药| 出生医学证明有什么用| 宋江是一个什么样的人| 高锰酸钾治疗男性什么病| www是什么意思| 舅父是什么意思| 体型最大的恐龙是什么| 88年的龙是什么命| 银芽是什么菜| 睡眠不好会引起什么症状| 吉兆什么意思| 解大便时有鲜血流出是什么原因| 为什么会排卵期出血| 维生素c什么牌子好| 肠胃不好吃什么| 韭菜什么时候种最合适| 前白蛋白偏低是什么意思| 印第安纹是什么| 丙氨酸氨基转移酶高是什么意思| 21三体高风险是什么意思| 10000mah是什么意思| 透析病人吃什么水果好| 男性hpv挂什么科| 抑扬顿挫什么意思| 属牛是什么命| 神疲乏力是什么症状| cbs是什么意思| 肠胃消化不好吃什么食物| 7月12是什么星座| 女性脂肪率偏高说明什么| 南无是什么意思| 滑精是什么原因| 试桩是什么意思| Years什么意思| 下肢水肿吃什么药| 茶化石属于什么茶| 撞车了打什么电话| 胃复安是什么药| beko是什么牌子| 膈是什么器官| 大虾炒什么菜好吃| 怀孕初期怕冷是什么原因| 茯苓是什么植物| 动则气喘是什么原因| 胃酸吃什么可以缓解| 二月二十三日是什么星座| 男蛇配什么属相最好| 女性什么时候绝经| 六月份是什么季节| 肌肉僵硬是什么原因引起的| 摩罗丹主要治什么胃病| 蓝加红是什么颜色| 表哥的女儿叫什么| 什么是气胸有什么症状| 胎儿偏小吃什么补得快| barbie是什么意思| 吃什么可以补钙| 心功能iv级是什么意思| lucy是什么意思| 独守空房是什么意思| 梦见盖新房子是什么意思| 孩子皮肤黑是什么原因| 偏执什么意思| 刷牙牙龈出血是什么原因| 什锦是什么水果| 伤元气是什么意思| 右眼跳是什么意思| 结巴是什么原因引起的| 同样的药为什么价格相差很多| 什么是阴蒂| 如夫人是什么意思| 氯气是什么颜色| 学位证书有什么用| 头疼一般是什么原因引起的| 萝卜丁口红什么牌子| 什么是西米| 蟑螂长什么样子| 婆什么起舞| 血糖高对身体有什么危害| 失眠是什么原因导致的| 什么泡水喝可降血压| 吃什么补蛋白| 一毛不拔是什么动物| 肝硬化是什么引起的| 1994年五行属什么| 煮粥用什么锅最好| 铜钱癣用什么药| 甲胎蛋白什么意思| 梦见朋友结婚是什么意思| 慈禧姓什么| 三七粉什么颜色| 女子是什么意思| 宇宙是什么意思| 前列腺多发钙化灶是什么意思| gms是什么意思| 丙磺舒是什么药| 清江鱼是什么鱼| 177是什么意思| 分析是什么意思| 肛周脓肿什么症状| 蝙蝠吃什么| 鼻涕倒流到咽喉老吐痰吃什么药能根治| 月经提前量少是什么原因| 壮腰健肾丸有什么功效| 口腔脱皮是什么原因引起的| 囊肿和肿瘤有什么区别| 女人胆固醇高什么原因| 潜伏是什么意思| 绝倒是什么意思| 武则天属什么生肖| 1900年属什么生肖| 女人八卦是什么意思| 桂枝是什么| 什么大腰粗| 降血脂吃什么药| 苹果枸杞红枣煮水喝有什么功效| 鬼长什么样子| 除异味用什么效果最好| 什么叫包皮过长| mmf是什么药| 梦见大白菜是什么意思| 维生素b补什么| 皮肤发痒用什么药| 食少便溏是什么意思| 用黄瓜敷脸有什么功效| 增肌吃什么| 脚底灼热是什么原因| 7个月的宝宝吃什么辅食| 百度

新时代经世济民的思想丰碑

百度 《英雄联盟》中有一代补丁一代神的说法,在LPL元年的时间点上,游戏版本的重心从双人线转移到了上路个人实力突出的Gogoing很快就成了能与PDD同场竞技而不落下风的凶狠角色。

Skyline 以性能为首要目标,因此 CSS 特性上在满足基本需求的前提下进行了大幅精简,目前 Skyline 只保留更现代的 CSS 集合。另一方面,Skyline 又添加了大量的特性,使开发者能够构建出类原生体验的小程序。在编码上,Skyline 与 WebView 模式保持一致,仍使用 WXML 和 WXSS 编写界面。在不采用 Skyline 新增特性的情况下,适配了 Skyline 的小程序在低版本或未支持 Skyline 的平台上可无缝自动退回到 WebView 渲染。

# 支持与 WebView 混合使用

小程序支持页面使用 WebView 或 Skyline 任一模式进行渲染,Skyline 页面可以和 WebView 页面混跳,故开发者可以页面粒度或分包粒度按需适配。

// page.json
// skyline 渲染
{
    "renderer": "skyline"
}

// webview 渲染
{
    "renderer": "webview"
}
// app.json
{
  "subPackages": [
    {
      "root": "packageA",
      "pages": ["pages/cat"],
      "componentFramework": "glass-easel",
      "renderer": "skyline",
    },
  ],
}

# 提供更好的性能

Skyline 在渲染流程上较 WebView 更为精简,其对节点的渲染有着更精确的控制,尽量避免不可见区域的布局和绘制,以此来保证更高的渲染性能。WebView 由于其整体设计不同以及兼容性等问题,渲染流水线的实现更加冗长复杂。

在光栅化策略上,Skyline 采用的是同步光栅化的策略,WebView 是异步分块光栅化的策略。两种策略各有千秋,但 WebView 的策略存在一些难以规避的问题,例如:快速滚动会出现白屏问题;滚动过程中的 DOM 更新会出现不同步的问题,进而影响到用户体验。

在此基础上,我们还进一步实现了很多优化点。

# 1. 单线程版本组件框架

Skyline 下默认启用了新版本的组件框架 glass-easel,该版本适应了 Skyline 的单线程模型,使得建树流程的耗时有效降低(优化 30%-40%),同时 setData 调用也不再有通信开销和序列化开销。

# 2. 组件下沉

Skyline 内置组件的行为更接近原生体验,部分内置组件(如 scroll-view、swiper 等)借助于底层实现,有更好的性能和交互体验。同时,我们将部分内置组件(如 view、text、image 等)从 JS 下沉到原生实现,相当于原生 DOM 节点,降低了创建组件的开销(优化了 30% 左右)。

# 3.长列表按需渲染

长列表是一个常用的但又经常遇到性能瓶颈的场景,Skyline 对其做了一些优化,使 scroll-view 组件只渲染在屏节点(用法上有一定的约束),并且增加 lazy mount 机制优化首次渲染长列表的性能,后续我们也计划在组件框架层面进一步支持 scroll-view 的可回收机制,以更大程度降低创建节点的开销。

# 4. WXSS 预编译

同 WebView 传输 WXSS 文本不同,Skyline 在后台构建小程序代码包时会将 WXSS 预编译为二进制文件,在运行时直接读取二进制文件获得样式表结构,避免了运行时解析的开销(预编译较运行时解析快 5 倍以上)。

# 5. 样式计算更快

Skyline 通过精简 WXSS 特性大幅简化了样式计算的流程。在样式更新上,与 WebView 全量计算不同,Skyline 使用局部样式更新,可以避免对 DOM 树的多次遍历。Skyline 与小程序框架结合也更为紧密,例如: Skyline 结合组件系统实现了 WXSS 样式隔离、基于 wx:for 实现了节点样式共享(相比于 WebView 推测式样式共享更为精确、高效)。在节点变更、内联样式和继承样式的更新上,Skyline 也进行了一些优化,从而保证样式计算的性能。

此外,对于 rpx 单位,我们直接在样式计算阶段原生支持,这样避免了在 JS 层面做太多额外的计算。

<!-- 样式共享目前暂未自动识别,可手动声明 list-item 属性开启 -->
<scroll-view type="list" scroll-y>
    <view wx:for="{{list}}" list-item>{{index}}</view>
</scroll-view>

# 6. 降低内存占用

在 WebView 渲染模式下,一个小程序页面对应一个 WebView 实例,并且每个页面会重复注入一些公共资源。而 Skyline 只有 AppService 线程,且多个 Skyline 页面会运行在同一个渲染引擎实例下,因此页面占用内存能够降低很多,还能做到更细粒度的页面间资源共享(如全局样式、公共代码、缓存资源等)。


# 根除旧有架构的问题

在基于 Web 体系的架构下,小程序的部分基础体验会受限于 WebView 提供的能力(特别是 iOS WKWebView 限制更大一些),使得一些技术方案无法做得很完美,留下一些潜在的问题。

# 1. 原生组件同层渲染更稳定

iOS 下原生组件同层渲染的原理先前有介绍过,本质上是在 WKWebView 黑盒下一种取巧的实现方式,并不能完美融合到 WKWebView 的渲染流程,因此很容易在一些特殊的样式发生变化后,同层渲染会失效。在 Skyline 下可以很好地融合到渲染流程中,因此会更稳定。

# 2. 无需页面恢复机制

iOS 下 WKWebView 会受操作系统统一管理,当内存紧张时,操作系统就会将不在屏的 WKWebView 回收,会使得小程序除前台以外的页面丢失,虽然在页面返回时,我们对页面做了恢复,但页面的状态并不能 100% 还原。在 Skyline 下则不再有该问题。

# 3. 无页面栈层数限制

由于 WebView 的内存占用较大,页面层级最多有 10 层,而 Skyline 在内存方面更有优势,因此在连续 Skyline 页面跳转(复用同一引擎实例)的情况下,不再有该限制。


# 全新的交互动画体系

要达到类原生应用的体验,除渲染性能要好外,做好交互动画也很关键。在 Web 体系下,难以做到像素级可控,交互动画衔接不顺畅,究其原因,在于缺失了一些重要的能力。为此,Skyline 提供一套全新的交互动画能力。

# 1. Worklet 动画

Worklet 机制是 Skyline 交互动画体系的基础,它能够很方便地将 JavaScript 代码跑在渲染线程,那么基于 Worklet 机制的 动画模块,便能够在渲染线程同步运行动画相关逻辑,使动画不再会有延迟掉帧。

# 2. 手势系统

在原生应用的交互动画里,手势识别与协商是一个很重要的特性,而这块在 Web 体系下是缺失的,因此 Skyline 提供了基于 Worklet 机制的 手势系统

  • 支持常用手势的识别,如缩放、拖动、双击等,并能够渲染线程同步监听手势、执行手势相关逻辑;
  • 支持手势协商处理,能够在遇到手势冲突(常见于滚动容器下)时决定让哪个手势生效,以实现更顺畅的动画衔接。

# 3. 自定义路由

页面间中转进行自定义的转场动画,在原生应用里也是一个很常见的交互动画。在原来的小程序架构下,每个页面都是独立的 WebView 渲染,互相隔离,其跨页能力是基本不具备的。因此,Skyline 提供了基于 Worklet 机制的 自定义路由模块,能实现市面上大多数页面转场动画效果。

# 4. 共享元素动画

支持 跨页面共享元素,能够很方便地将上一个页面的元素“共享”到下一个页面,并伴随着过渡动画,同时支持了一套可定制化接口,能实现自定义的过渡动画。

# 5. 内置组件扩展

对内置组件的扩展也是重要一环,特别是 scroll-view 组件,很多交互动画与滚动息息相关,Skyline 添加了很多在 Web 下很难做到又非常重要的特性。

  • 内置下拉刷新的实现,并完善相关事件。原来 WebView 的实现基于 transform,性能不够好且动画衔接不顺畅。
  • 提供“下拉二楼”交互的机制。
  • 提供 sticky 吸顶组件,能很方便地实现吸顶元素交错切换。
  • 使 scroll-view 组件在内容未溢出时也能滚动,让用户得到及时的交互反馈。
  • 为 scroll-view 组件提供更多控制能力,如最小触发滚动距离(min-drag-distance)、滚动结束事件(scrollend)、滚动原因(isDrag)等。
  • 提供原生的 swiper 实现,相比 WebView 基于 transform 的实现,性能更好。

# 更多的高级能力

除了交互动画的系列能力外,借助 Skyline 的优势,我们还提供了很多高级特性。

# 1. 提供 grid-view 瀑布流组件

瀑布流是一种常用的列表布局方式,得益于 Skyline 在布局过程中的可控性,我们直接在底层实现并提供出来,渲染性能要比 WebView 更优。

# 2. 提供 snapshot 截图组件

大多数小程序都会基于 canvas 实现自定义分享图的功能,一方面,需要通过 canvas 绘图指令手动实现,较为繁琐;另一方面,在分享图的布局较复杂时,或者在制作长图时会受限于系统对 canvas 尺寸限制,canvas 的方案实现成本都会很大。得益于 Skyline 在渲染过程中的可控性,Skyline 能直接对 WXML 子树进行截图,因此我们直接提供了截图组件,这样能复用更完善的 WXSS 能力,极大降低开发成本。

# 3. scroll-view 组件支持列表反转

在聊天对话的场景下,列表的滚动常常是反向的(往底部往上滚动),若使用正向滚动来模拟会有很多多余的逻辑,而且容易出现跳动,而 scroll-view 提供的 reverse 属性很好的解决这一问题。


还有更多计划提供出来的特性,请详见特性状态

打劫是什么意思 调养是什么意思 为什么会晨勃 梦见蛇吃人代表什么预兆 痔疮手术后可以吃什么
脑梗挂号挂什么科室 十滴水泡脚有什么好处 宫颈潴留性囊肿是什么 股骨头坏死有什么好办法治疗吗 左眼上眼皮跳是什么预兆
安慰的意思是什么 店铺开业送什么礼物好 什么饮料好喝又健康 月经量突然减少是什么原因 十二月八号是什么星座
cos是什么意思 看痔疮挂什么科 金银花搭配什么泡水喝好 什么是横纹肌溶解 皮疹是什么
风疹病毒是什么hcv8jop3ns2r.cn dollars是什么意思hcv8jop1ns9r.cn 子宫内膜厚是什么原因hcv8jop3ns7r.cn 焦虑症是什么症状hcv9jop2ns7r.cn 玉女心经是什么意思hcv8jop8ns3r.cn
柳州有什么大学hcv8jop2ns9r.cn 糜烂性脚气用什么药hcv8jop5ns7r.cn 走仕途是什么意思hcv8jop0ns4r.cn 耳顺是什么意思hcv8jop3ns2r.cn 狂犬病是什么hcv8jop2ns2r.cn
脚裂口子是什么原因hcv8jop4ns6r.cn 嗓子疼吃什么药好hcv8jop8ns7r.cn 肠痈是什么意思hcv8jop5ns6r.cn police是什么意思hcv8jop6ns0r.cn 什么是功hcv7jop5ns1r.cn
胃复安又叫什么hcv9jop8ns0r.cn 床榻是什么意思hcv9jop1ns7r.cn 什么不同成语hcv9jop0ns8r.cn 梦到老公出轨是什么意思hcv8jop9ns4r.cn 为什么拉屎是绿色的hcv8jop2ns0r.cn
百度