关于 OMTC、无前缀的可视性 API 和 CSS 改进的进展 – Firefox 开发亮点

为了让所有 Web 开发人员了解 Firefox 中的新功能和改进,并能够在早期阶段进行测试和试验,以下是最新的 Firefox 开发亮点。这是我们 Bleeding Edge 系列的一部分,大多数示例仅在 Firefox Nightly 中有效(并且可能会有所改变)。

OMTC(“非主线程合成”)取得良好进展

OMTC 的直接优势是更具响应性的用户界面。渲染网页是一个复杂的过程,涉及不同的操作,例如计算页面布局、下载不同的资源、解码图像或执行 JavaScript 代码。
其中一些操作在同一个线程中执行。其中一些在主线程中执行,大多数用户界面交互都在这里处理。如果此主线程中的操作需要时间,它将阻塞 UI 并使 UI 感觉迟钝。

因此,我们希望将尽可能多的操作移到另一个线程中。我们要移动的操作之一称为“合成”。它负责“扁平化”页面。页面由层组成。例如,固定背景的层,文本的层和视频元素的层。扁平化页面,合成它,将把这些层合并成一个纹理。

Firefox OSFirefox for Android 中,合成操作是在不同的线程中完成的。我们正在取得一些进展,使 OMTC 适用于 Firefox 桌面版。

要深入了解此主题,我们建议您阅读 非主线程合成 (OMTC) 及其重要性

可视性 API 已取消前缀

您可以使用 页面可视性 API 了解网页何时可见或处于焦点状态。使用选项卡式浏览,任何给定网页都有可能在后台,因此对用户不可见。

当用户最小化网页或移动到另一个选项卡时,API 会发送一个关于页面可见性的 visibilitychange 事件。您可以检测该事件并执行一些操作或以不同的方式进行。例如,如果您的 Web 应用程序正在播放视频,它会在用户查看另一个浏览器时暂停,并在用户返回选项卡时恢复播放。用户不会失去视频中的位置,并且可以继续观看。

为此,对于 mozHiddenmozvisibilitychange,不再需要 moz 前缀。

CSS 改进

我们总是需要更多 CSS 支持,对吧?以下是最新的更改

@page CSS at-rule

当打印文档时,@page CSS at-rule 用于修改某些 CSS 属性。您不能使用 @page 更改所有 CSS 属性。您只能更改文档的边距、孤行、寡行和分页符。尝试更改任何其他 CSS 属性将被忽略。

例如,您可以使用 :left:right 伪类为左页和右页(想想“书”)编写特定的样式,或者使用 :first 为第一页编写特定的样式。

page-break-inside CSS 属性

page-break-inside CSS 属性 会调整当前元素内部的分页符。

page-break-inside:auto;

自动分页符(默认行为)

page-break-inside:avoid;

在元素之前强制分页符

/* avoid page break inside the paragraph */
p { page-break-inside: avoid; }

text-transform:full-width

对于 CSS text-transformfull-width 会强制字符(主要是表意文字和拉丁字母)写入方框内,使它们能够与常见的东亚文字(如中文或日语)对齐。

关于 Paul Rouget

Paul 是一位 Firefox 开发人员。

更多 Paul Rouget 的文章……

关于 Robert Nyman [荣誉编辑]

Mozilla Hacks 的技术布道者和编辑。就 HTML5、JavaScript 和开放 Web 进行演讲和博客写作。Robert 坚定地相信 HTML5 和开放 Web,自 1999 年以来一直从事 Web 前端开发工作 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 上发表博客,喜欢旅行和结识新朋友。

更多 Robert Nyman [荣誉编辑] 的文章……


4 条评论

  1. Paul Morris

    “当用户最小化网页或移动到另一个选项卡时,API 会发送一个 visibilitychange 事件以指示页面的可见性。”

    好的,那么,如果您从另一个应用程序的另一个打开的窗口中点击,是否会发送 visibilitychange 事件?换句话说,您没有最小化浏览器窗口,也没有切换到另一个选项卡,但浏览器窗口不再是活动/最上面的窗口。换句话说,这与使用窗口模糊/焦点有何不同或改进?

    我查看了维基页面,但那里也没有完全说明。谢谢!

    2012 年 11 月 22 日 06:50

  2. Paul Morris

    好的,我刚刚使用维基页面上的实时示例测试了这一点。显然,与窗口的焦点/模糊事件(在 DOM 中)不同,当您激活另一个打开的窗口时,页面被视为“隐藏”。您必须切换选项卡或最小化浏览器窗口才能触发 visibilitychange 事件。

    2012 年 11 月 22 日 06:57

    1. Robert Nyman

      感谢您的测试!是的,在行为方面存在细微的差别。

      2012 年 11 月 22 日 07:15

  3. Martin Melcher

    我相信关于 page-break-inside 的段落不完全正确。您可能将 page-break-inside 和 page-break-before/after 混淆了。您是否知道后者是否有任何进展?这将非常有用,这样您就可以避免标题与以下段落分离。

    2012 年 12 月 5 日 09:32

本文的评论已关闭。