anjia / blog

博客,积累与沉淀
106 stars 4 forks source link

CSS Houdini #23

Open anjia opened 5 years ago

anjia commented 5 years ago

Houdini 的相关模块及各自进展

  规范 成熟度 说明
1 CSS Painting API 1 CR 用JS自定义CSS图像类型
2 CSS Layout API Level 1 FPWD 用JS自定义布局
  Worklets 1 FPWD 在渲染引擎的各个阶段执行脚本,独立于主JS
3 CSS Animation Worklet 1 FPWD 可控制一组动画效果的脚本动画
4 CSS Typed OM 1 WD 将CSSOM的值的字符串转成JS对象,性能好点
5 CSS Properties and Values API 1 WD 注册新的CSS属性,可定义类型/继承/赋初始值
  Box Tree API 1 Idea 访问 boxes 信息的 API
  Font Metrics API Idea 提供基本的字体指标
  CSS Parser API 提供CSS解析的API,移到了 WICG 仓库

7个今年还在更新维护中 Draft:Draft Community Group Report,社区小组报告草案 Idea:还在收集想法当中 WICG:Web Platform Incubator Community Group,Web平台孵化器社区小组

结合浏览器的实现情况及标准的进展,按成熟度降序排列:

anjia commented 5 years ago

移交到 WICG(Web Incubator Community Group)Web孵化器社区组的草案

https://dassur.ma/things/animworklet/

目前,CSS Animation Worklet API 的最新代码又移回到了 CSS Houdini Drafts


https://github.com/WICG

要将提案/草案移交至 WICG,须至少有一个浏览器厂商对此 API 有兴趣

anjia commented 5 years ago

Houdini 简介

Houdini: Demystifying CSS, 揭开 CSS 的神秘面纱

Houdini 旨在提高 CSS 的可扩展性,它能让开发人员介入浏览器的渲染环节,让其更自主更灵活。

第一次提出是在2016年5月中旬的 Google I/O 大会上,且在后续的 AC/TPAC 会上有技术交流和更新 Houdini: Demystifying the Future of CSS - Google I/O 2016

下面是它涵盖的内容:

  1. Wroklets
    • 是部分其它草案的基础,它本身并没很有用
    • 与 Web Workers 概念相似,但还引入 Worklet 是因为
      • 旨在让网页开发人员将自己的代码连接到 CSS 引擎及其周边系统
      • 适合处理大量的像素
    • 它用了 ES2015 里的类来定义方法集合,签名是由 worklet 预定义的类型
    • 轻量,生命周期短
  2. CSS Paint API
  3. Animation Wroklet
    • 它之前叫 Compositor worklet,然后重新设计了下,也改名了。点击查看更多细节
      • 最大的改变就是:代码不能运行在 Compositor 线程里了
      • 因为,一旦 Compositor 线程崩溃,整站就会卡死
    • 现在在AW里,代码是运行在一个 in-sync with compositor thread
      • 好处是,一旦代码性能太差,动画就失效/不执行了
      • 这样,AW的性能至少和 requestAnimationFrame 一样好了
      • 如果它的代码执行快,那就每帧更新;否则空闲时间时,主进程再执行它
    • 另,aw 到底是在哪个线程里执行,取决于属性本身
      • 如果是会引起重绘的,则 aw 会绑定到 main thread
      • 如果只是单纯的layer,则会运行在一个与 Compositor 同步的单独线程里
      • 尽量选择这个--因为动画会在低配设备上也会更流畅
      • 属性的分类同 csstrigger.com
    • 该草案已被移交到 WICG
    • 其它:
      • 目前,渲染引擎是分 layer 显示的,有些操作是在图形卡上执行
      • AW 旨在想在让动画期间,最小限度地重绘,最大限度地复用之前的帧
  4. Layout worklet
    • 编写自己的布局
    • 可以这样用display: layout(myLayout),让JS布局其子节点
  5. Typed CSSOM
    • 在 Chrome 里几乎已完整实现
    • 类型化的 CSSOM
  6. Properties and Values
    • 为自定义属性指定类型、默认值、用JS来使用继承
    • CSS的自定义属性,只是它没有类型
  7. Font Metrics

https://developers.google.com/web/updates/2016/05/houdini