作者在 4 月 18~19 期间和同事一起在湾区参加了为其两天的 BlinkOn 9 会议。每次 BlinkOn 都是了解当前 Blink & Chrome 和 Web 技术演进现状和发展方向的一个不错机会,两天的会议下来大概听了 6 ~ 7 场分享,有些主题是之前已经有所了解,这次又更新了最新的进展信息;有些主题则是完全陌生,在这次 BlinkOn 上才第一次知悉。作者接下来会撰写一系列文章,每篇文章针对一个特定的主题,尽可能把相关的信息回馈给读者。

对于 Layered APIs 作者事前并没有了解,不过听了BlinkOn9 的分享后觉得这个概念还挺有意思的,如果真的能够实现构建一个跨浏览器通用的标准库,覆盖 Web 开发的主要需求,对 Web 开发者而言当然是极大的利好。

Layerd APIs 提出的一些背景

提出 Layered APIs 这个概念的背景,跟可扩展的 Web 宣言有关,可扩展的 Web 宣言提出了可扩展的 Web 平台演进的一些设计准则 —— 更聚焦于提供 low level primitives API,更多暴露引擎底层的能力来赋能开发者,使得引擎的开发和维护成本更低,从而更聚焦于安全和性能,让 Web 技术的演进也更快。

SharedArrayBuffer and Atomics,还有 Houdini 项目里面的 CSS Paint API,CSS Layout API 就是遵循这些设计准则的很好例子。

如果把浏览器引擎类比于操作系统,这些所谓的 primitives API 差不多就类似于操作系统的基础 API,通常会比较难以学习和使用,所以它们更多是面向库或者框架的开发者,也意味着普通的 Web 开发者需要选择第三方提供良好封装,更容易使用的库或者框架。但是不同的库提供的 high level API 设计可能并不相同,使用上又各有其优缺点,性能,稳定性,兼容性表现上可能也有缺陷,Web 开发者不得不增加很多库的学习,使用,对比选择,甚至自己完善其实现的成本。

Layered APIs vs 第三方库

Layered APIs 与第三方库相同的地方在于:

  1. 它们都基于 JavaScript 实现;
  2. 都使用了同样的 primitives API,Layered APIs 不会使用特定的私有 API;
  3. 使用前需要显式加载到当前的运行环境,Layered APIs 不会做成默认内置;

起码 Chromium 目前的设计原则是这样的,但是其它 Browser Vendor 理论上并不受这个约束,它们可以自由选择是否使用 native 的实现。

Layered APIs 与第三方库不同的地方在于:

  1. Layered APIs 可能有很多不同的实现,但是在 API 层面上是一致的(包括签名和行为);
  2. Layered APIs 在 API 的制定上跟其它 Web API 一样,也需要经过相同的标准化流程,在各大 Browser Vendor 和参与讨论的 Web 开发者之间达成一致;
  3. 支持某个特定 Layered API 的浏览器引擎会提供内建的实现,也支持在没有内建实现的情况下 fallback 到外部的实现;
  4. 外部的实现开发者可以自由选择,包括 Browser Vendor 比如 Chromium 提供的开源实现,或者其它第三方的实现,甚至自己的实现;

所以 Layered APIs 的目标是成为 Web 开发的标准库,为主要的功能模块提供标准化的,易于使用的 high level API,跟引擎直接实现的 primitives API 一起构成完整的 Web API 集。它相对于第三方库保证了 API 的一致性,浏览器引擎内建的实现理论上也提供了更好的性能和稳定性,降低了 Web 开发者的学习,使用成本,和 Web 开发的整体成本。并且,如果使用内建实现也意味着减少了网络加载的时间,另外内建实现可以被预编译,也减少了 JavaScript 虚拟机编译的时间。

Layered APIs 的使用

<script type="module"src="std:virtual-list|https://some.cdn.com/virtual-list.js">
</script><infinite-list>...</infinite-list><script type="module">
import { storage } from"std:async-local-storage|https://other.cdn.com/als.mjs";storage.get("key").then(...);
</script>

上面的代码显示如何使用 ES6 的模块加载语法来加载某个特定的 Layered API 模块,额外的语法支持让 fallback 到外部实现变得十分简单。

上述语法还没有最终定案,如果 Web 开发者有更好的建议,也欢迎去提。

Layered APIs 的现状

在 Chromium 内部,Layered API 还处于比较初期的概念验证的阶段。加载的语法大致已经确定,在 Chrome Canary 68 上已经可以使用。开发团队正在进行 virtual list(貌似改成了 virtual scroller) 和 async local storage 的开发,感兴趣的 Web 开发者已经可以尝试去体验。

BlinkOn9 - Layered APIs相关推荐

  1. 1-5分层API(Layered APIs)

    Flink provides three layered APIs. Each API offers a different trade-off between conciseness and exp ...

  2. flink入门实战总结

    随着大数据技术在各行各业的广泛应用,要求能对海量数据进行实时处理的需求越来越多,同时数据处理的业务逻辑也越来越复杂,传统的批处理方式和早期的流式处理框架也越来越难以在延迟性.吞吐量.容错能力以及使用便 ...

  3. 从flink-example分析flink组件(1)WordCount batch实战及源码分析

    上一章<windows下flink示例程序的执行> 简单介绍了一下flink在windows下如何通过flink-webui运行已经打包完成的示例程序(jar),那么我们为什么要使用fli ...

  4. Apache Flink 零基础入门(十八)Flink Table APISQL

    什么是Flink关系型API? 虽然Flink已经支持了DataSet和DataStream API,但是有没有一种更好的方式去编程,而不用关心具体的API实现?不需要去了解Java和Scala的具体 ...

  5. 一文教你弄懂Flink核心功能和原理

    文章目录 1.Flink概述 2.Flink的特性 2.1Flink核心特性 2.2Flink特点 2.3Flink关键特性 2.4Hadoop兼容性 3.Flink的优势 4.Flink核心四大基石 ...

  6. 用4+1架构视图说说Flink架构

    友情提示,本文11239字,预计阅读时间25分钟. 在实时流计算的江湖里,Flink 大有一统江湖的味道,其正处于如日中天的高光时刻.溯古论今,Flink 起源于德国柏林大学2010年的一个研究项目, ...

  7. Android APIs (Class Index - Android SDK)(二)

    类名 说明 R R.anim R.animator R.array R.attr R.bool R.color R.dimen R.drawable R.fraction R.id R.integer ...

  8. Android APIs (Class Index - Android SDK)(一)

    这些是Android API(API level: 19)类 类名 描述 A AbortableHttpRequest Interface representing an HTTP request t ...

  9. Writing a Winsock 2 Layered Service Provider

    Wei Hua, Jim Ohlund, Barry Butterklee 著 来源:http://greatdong.blog.edu.cn 作者:董岩 译 greatdong_2001@163.c ...

最新文章

  1. 漫话:如何给女朋友解释什么是熔断?
  2. linux+传输文件时卡住,linux - rsync 同步文件时卡住不动
  3. Vue_双向绑定解析以及指令介绍
  4. php接收多层数组中文乱码解决
  5. git commit -m 与 git commit -am的区别
  6. 移动平均滤波_Kalman滤波理论与MATLAB实现引言
  7. Visio 2010,如何打开多个窗口
  8. 深入理解程序执行原理
  9. 去除android控件滑动的时候出现的阴影
  10. CentOS7安装配置启动MySQL(附解决password does not satisfy)
  11. 《网络渗透技术》 强烈推荐
  12. Nero 7序列号的验证方法
  13. 毕设开题报告重要内容
  14. 微信卡包系列-核销微信卡券优惠券
  15. Unity3d 双阈值解决临界值跳跃的问题
  16. ACTION_DATE_CHANGED不响应
  17. APK查壳软件(根据so名)
  18. Matlab:License checkout failed. License Manager Error-95解决办法与Matlab加速启动
  19. css文本溢出时候,如何把多余的文字显示省略号
  20. ubuntu10.10下更新无线网卡驱动

热门文章

  1. Python_删除TXT文件中不想要的内容
  2. android 喇叭帧动画,CSS动画效果——语音播放小喇叭
  3. The error may exist in /com/bjpowernode/dao/StudentDao.xml ### Cause: org.apache.ibatis.builder.Buil
  4. U盘安装Ubuntu16.04报unable to find a medium containing a live file system和ACPI Error错误
  5. Bochs源码分析 - 16:conforming与non-conforming代码段区别以及Bochs代码的实现
  6. 集线器 交换机 路由器关系
  7. Failed resolution of: Landroid/webkit/TracingController;
  8. 【AI视野·今日NLP 自然语言处理论文速览 第十三期】Wed, 23 Jun 2021
  9. linux中test命令详解
  10. 女博士日记软件测试,一个女博士的日记