recursal/MDN huggingface dataset:
WebGLRenderingContext.blendColor()
==================================

WebGL API 的 **`WebGLRenderingContext.blendColor()`** 方法用于设置源和目标混合因子。

语法
--
```

void gl.blendColor(red, green, blue, alpha);
```

### 参数

`red`

`GLclampf` (en-US) 红色分量的范围为 0 到 1。

`green`

`GLclampf` (en-US) 红色分量的范围为 0 到 1。

blue

`GLclampf` (en-US) 红色分量的为 0 到 1。

alpha

`GLclampf` (en-US) 组件（透明度）的范围在 0 到 1。

### 返回值

None.

示例
--

要设置混合颜色，请使用：


```js
gl.blendColor(0, 0.5, 1, 1);
```


要获得混合颜色，请查询返回 `Float32Array` 的 BLEND\_COLOR 常量。


```js
gl.getParameter(gl.BLEND\_COLOR);
// Float32Array[0, 0.5, 1, 1]
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.3 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.blendEquation()`
* `WebGLRenderingContext.blendFunc()`
WebGLRenderingContext.clear()
=============================

WebGL API 的 **`WebGLRenderingContext.clear()`** 方法使用预设值来清空缓冲。

预设值可以使用 `clearColor()` 、 `clearDepth()` 或 `clearStencil()` (en-US) 设置。

裁剪、抖动处理和缓冲写入遮罩会影响 `clear()` 方法。

句法
--
```

void gl.clear(mask);
```

### 参数

`mask`

一个用于指定需要清除的缓冲区的 `GLbitfield` (en-US) 。可能的值有：

* `gl.COLOR_BUFFER_BIT //颜色缓冲区`
* `gl.DEPTH_BUFFER_BIT //深度缓冲区`
* `gl.STENCIL_BUFFER_BIT //模板缓冲区`

### 错误抛出

如果 mask 不是以上列出的值，会抛出 `gl.INVALID_ENUM` 错误。

### 返回值

无

示例
--

`clear()` 方法可接受复合值，


```js
gl.clear(gl.DEPTH\_BUFFER\_BIT);
gl.clear(gl.DEPTH\_BUFFER\_BIT | gl.COLOR\_BUFFER\_BIT);
```


要获得当前的清除值，传入 `COLOR_CLEAR_VALUE`、`DEPTH_CLEAR_VALUE` 或 `STENCIL_CLEAR_VALUE` 常量。


```js
gl.getParameter(gl.COLOR\_CLEAR\_VALUE);
gl.getParameter(gl.DEPTH\_CLEAR\_VALUE);
gl.getParameter(gl.STENCIL\_CLEAR\_VALUE);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.11 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `WebGLRenderingContext.clearColor()`
* `WebGLRenderingContext.clearDepth()`
* `WebGLRenderingContext.clearStencil()` (en-US)
WebGLRenderingContext.isContextLost()
=====================================

**`WebGLRenderingContext.isContextLost()`** 方法返回一个`Boolean` 标记 WebGL 的上下文是否已经丢失。

语法
--
```

gl.isContextLost();
```

### 返回值

`Boolean`。如果上下文丢失则返回 true，否则返回 false。

样例
--

比如，当检查程序链接成功时，你也可以检查是否上下文已经丢失。


```js
gl.linkProgram(program);

if (!gl.getProgramParameter(program, gl.LINK\_STATUS) && !gl.isContextLost()) {
  var info = gl.getProgramInfoLog(program);
  console.log("Error linking program:\n" + info);
}
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.13 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* The `WebGLContextEvent` signals changes in the context state.
WebGLRenderingContext.deleteRenderbuffer()
==========================================

WebGL API 的 **`WebGLRenderingContext.deleteRenderbuffer()`** 方法用来删除给定的 `WebGLRenderbuffer` 对象。如果渲染缓冲区已被删除，则此方法无效。

语法
--
```

void gl.deleteRenderbuffer(renderbuffer);
```

### 参数

renderbuffer

将要删除的{domxref("WebGLRenderbuffer")}} 对象。

### 返回值

None.

示例
--

### 删除一个渲染缓冲区


```js
var canvas = document.getElementById("canvas");
var gl = canvas.getContext("webgl");
var renderbuffer = gl.createRenderbuffer();

// ...

gl.deleteRenderbuffer(renderbuffer);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.7 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.bindRenderbuffer()`
* `WebGLRenderingContext.createRenderbuffer()`
* `WebGLRenderingContext.isRenderbuffer()` (en-US)
* Other buffers: `WebGLBuffer`, `WebGLFramebuffer`
WebGLRenderingContext.cullFace()
================================

WebGL API 的 **`WebGLRenderingContext.cullFace()`** 指定正面和/或背面多边形是否可以剔除。

语法
--
```

void gl.cullFace(mode);
```

### 参数

`mode`

`GLenum` (en-US) 指定适合进行剔除的面是正面还是背面。默认值是 `gl.BACK`. 可能的值有：

* `gl.FRONT`
* `gl.BACK`
* `gl.FRONT_AND_BACK`

### 返回值

None.

示例
--

多边形剔除功能默认不开启。想要开启这个功能，使用`enable()` 和 `disable()` (en-US) 方法，传入参数`gl.CULL_FACE`.


```js
gl.enable(gl.CULL\_FACE);
gl.cullFace(gl.FRONT\_AND\_BACK);
```


需要 `CULL_FACE_MODE` 常量来检查当前多边形剔除模式。


```js
gl.getParameter(gl.CULL\_FACE\_MODE) === gl.FRONT\_AND\_BACK;
// true
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.3 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关资料
----

* `WebGLRenderingContext.enable()`
* `WebGLRenderingContext.frontFace()` (en-US)
WebGLRenderingContext.uniform[1234][fi][v]()
============================================

WebGL API 的 **`WebGLRenderingContext.uniform[1234][fi][v]()`** 方法指定了 uniform 变量的值。所有在 ShaderProgram 对象中定义的，且激活的 uniform 变量在 ShaderProgram 执行 link 成功后被初始化为 0。它们将保留通过调用此方法分配给它们的值，直到再次将其初始化为 0 时，也就是 ShaderProgram 对象上发生下一次成功的 link 操作为止。

**备注：** 这里描述的许多函数都扩展了 WebGL 2 接口，可在以下地址查看 `WebGL2RenderingContext.uniform[1234][uif][v]()`。

语法
--
```

void gl.uniform1f(location, v0);
void gl.uniform1fv(location, value);
void gl.uniform1i(location, v0);
void gl.uniform1iv(location, value);

void gl.uniform2f(location, v0, v1);
void gl.uniform2fv(location, value);
void gl.uniform2i(location, v0, v1);
void gl.uniform2iv(location, value);

void gl.uniform3f(location, v0, v1, v2);
void gl.uniform3fv(location, value);
void gl.uniform3i(location, v0, v1, v2);
void gl.uniform3iv(location, value);

void gl.uniform4f(location, v0, v1, v2, v3);
void gl.uniform4fv(location, value);
void gl.uniform4i(location, v0, v1, v2, v3);
void gl.uniform4iv(location, value);
```

### 参数

`location`

`WebGLUniformLocation` 对象包含了将要修改的 uniform 属性位置。

`value, v0, v1, v2, v3`

新的值将被用于 uniform 变量。可能的类型：

* 浮点值 `Number`(方法名跟"f").
* 浮点数组 (例如 `Float32Array` 或 `Array` 的数组) 用于浮点型向量方法 (方法名跟 "fv").
* 整型值 `Number` (方法名跟"i").
* 整型数组`Int32Array` 用于整型向量方法 (方法名跟 "iv").

### 返回值

无（`undefined`）。

示例
--


```js
gl.uniform1f(u_alpha, 0.8);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.10 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.uniformMatrix()`
HTMLTemplateElement.content
===========================

**`HTMLTemplateElement.content`** 属性返回 `<template>` 元素的模板内容（一个 `DocumentFragment`）。

语法
--
```

var documentFragment = templateElement.content
```

示例
--


```js
var templateElement = document.querySelector("#foo");
var documentFragment = templateElement.content.cloneNode(true);
```

规范
--

| Specification |
| --- |
| HTML Standard # dom-template-content-dev |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关链接
----

* `HTMLTemplateElement`
ServiceWorkerContainer.register()
=================================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`ServiceWorkerContainer` 接口的 **`register()`** 方法创建或更新一个给定 scriptURL 的`ServiceWorkerRegistration` (en-US)。

如果成功，一个服务工作者注册将提供的脚本 URL 与一个范围进行关联，后者用于导航匹配。如果该方法无法返回一个 `ServiceWorkerRegistration`，则返回一个 `Promise`。

你可以从受控页无条件调用此方法，即，你不需要首先检查是否有一个有效的注册。

语法
--


```js
ServiceWorkerContainer.register(scriptURL, options).then(
  function (ServiceWorkerRegistration) {
    // do something
  },
);
```

### 参数

`scriptURL`

service worker 脚本的 URL.

`options` `可选`

注册时提供选项的配置对象。目前可用的选项包括：

* `scope`: 一个 `USVString`，表示定义 service worker 注册范围的 URL；service worker 可以控制的 URL 范围。通常是相对 URL。默认值是基于当前的 location，并以此来解析传入的路径。

### 返回

返回一个 `Promise` (en-US) 对象，值是 `ServiceWorkerRegistration` (en-US)。

示例
--


```js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker
    .register("service-worker.js", { scope: "./" })
    .then(function (registration) {
      document.querySelector("#status").textContent = "succeeded";
    })
    .catch(function (error) {
      document.querySelector("#status").textContent = error;
    });
} else {
  // The current browser doesn't support service workers.
  let aElement = document.createElement("a");
  aElement.href = `
 http://www.chromium.org/blink/serviceworker/service-worker-faq
 `;
  aElement.textContent = "unavailable";
  document.querySelector("#status").appendChild(aElement);
}
```

规范
--

| Specification |
| --- |
| Service Workers # navigator-service-worker-register |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
ServiceWorkerContainer.controller
=================================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

当状态为`activated` 时， `ServiceWorkerContainer` 接口的只读属性 **`controller`** 返回一个 `ServiceWorker` 对象（与 `ServiceWorkerRegistration.active` (en-US) 返回的对象是同一个）。当页面强制刷新 (*Shift* + refresh) 或不存在 active worder 时，该属性返回 `null` 。

语法
--
```

var myController = navigator.serviceWorker.controller;
```

### 值

一个`ServiceWorker`对象。

示例
--


```js
if ("serviceWorker" in navigator) {
  // Do a one-off check to see if a service worker's in control.
  if (navigator.serviceWorker.controller) {
    console.log(
      "This page is currently controlled by:",
      navigator.serviceWorker.controller,
    );
  } else {
    console.log(
      "This page is not currently controlled " + "by a service worker.",
    );
  }
} else {
  console.log("Service workers are not supported.");
}
```

规范
--

| Specification |
| --- |
| Service Workers # navigator-service-worker-controller |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
performance.getEntriesByName()
==============================

\*\*`getEntriesByName()`\*\*方法返回一个给定名称和 name 和 type 属性的`PerformanceEntry`对象数组。在创建 performance 标记或在明确的时间点测量（比如手动调用`mark()`方法）也可以创建这样的对象数组。

在 Workers 中可以使用该方法。

语法
--
```

entries = window.performance.getEntriesByName(name, type);
```

### 参数

name

The name of the entry to retrieve.

type 可选

The type of entry to retrieve such as "`mark`". The valid entry types are listed in `PerformanceEntry.entryType`.

### Return value

entries

A list of `PerformanceEntry` objects that have the specified `name` and `type`. If the `type` argument is not specified, only the `name` will be used to determine the entries to return. The items will be in chronological order based on the entries' `startTime` (en-US). If no objects meet the specified criteria, an empty list is returned.

Example
-------


```js
function use\_PerformanceEntry\_methods() {
  log("PerformanceEntry tests ...");

  if (performance.mark === undefined) {
    log("... performance.mark Not supported");
    return;
  }

  // Create some performance entries via the mark() method
  performance.mark("Begin");
  do\_work(50000);
  performance.mark("End");
  performance.mark("Begin");
  do\_work(100000);
  performance.mark("End");
  do\_work(200000);
  performance.mark("End");

  // Use getEntries() to iterate through the each entry
  var p = performance.getEntries();
  for (var i = 0; i < p.length; i++) {
    log("Entry[" + i + "]");
    check\_PerformanceEntry(p[i]);
  }

  // Use getEntries(name, entryType) to get specific entries
  p = performance.getEntries({ name: "Begin", entryType: "mark" });
  for (var i = 0; i < p.length; i++) {
    log("Begin[" + i + "]");
    check\_PerformanceEntry(p[i]);
  }

  // Use getEntriesByType() to get all "mark" entries
  p = performance.getEntriesByType("mark");
  for (var i = 0; i < p.length; i++) {
    log(
      "Mark only entry[" +
        i +
        "]: name = " +
        p[i].name +
        "; startTime = " +
        p[i].startTime +
        "; duration = " +
        p[i].duration,
    );
  }

  // Use getEntriesByName() to get all "mark" entries named "Begin"
  p = performance.getEntriesByName("Begin", "mark");
  for (var i = 0; i < p.length; i++) {
    log(
      "Mark and Begin entry[" +
        i +
        "]: name = " +
        p[i].name +
        "; startTime = " +
        p[i].startTime +
        "; duration = " +
        p[i].duration,
    );
  }
}
```

Specifications
--------------

| Specification |
| --- |
| Performance Timeline # dom-performance-getentriesbyname |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Performance.measure()
=====================

**`measure()`** 方法在浏览器性能记录缓存中创建了一个名为`时间戳`的记录来记录两个特殊标志位（通常称为开始标志和结束标志）。被命名的`时间戳`称为一次测量（measure）。

**备注：** 此特性在 Web Worker 中可用

`measure` 可以被 `Performance` 接口 `getEntries*()` 中的方法检查到 (`getEntries()`, `getEntriesByName()` 或者 `getEntriesByType()` (en-US)).

The `measure's` `performance entry` will have the following property values:

* `entryType` - set to "`measure`".
* `name` - set to the "`name`" given when the measure was created.
* `startTime` (en-US) - set to the start mark `timestamp`.
* `duration` (en-US) - set to a `DOMHighResTimeStamp` that is the duration of the measure (typically, the end mark timestamp minus the start mark timestamp).
语法
--
```

performance.measure(name, startMark, endMark);
```

### 参数

name

一个 `DOMString`，代表测量的名字。

startMark 可选

一个 `DOMString`，代表测量的开始标志名字。May also be the name of a `PerformanceTiming` property.

endMark 可选

一个`DOMString`，代表测量的结束标志名字。May also be the name of a `PerformanceTiming` property.

### 返回值

无

例子
--

以下例子展示如何在浏览器性能记录缓存中使用 `measure()`创建一个新的测量记录`performance entry` 。


```js
// 以一个标志开始。
performance.mark("mySetTimeout-start");

// 等待一些时间。
setTimeout(function () {
  // 标志时间的结束。
  performance.mark("mySetTimeout-end");

  // 测量两个不同的标志。
  performance.measure("mySetTimeout", "mySetTimeout-start", "mySetTimeout-end");

  // 获取所有的测量输出。
  // 在这个例子中只有一个。
  var measures = performance.getEntriesByName("mySetTimeout");
  var measure = measures[0];
  console.log("setTimeout milliseconds:", measure.duration);

  // 清除存储的标志位
  performance.clearMarks();
  performance.clearMeasures();
}, 1000);
```

规范
--

| Specification |
| --- |
| User Timing # dom-performance-measure |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Performance.navigation
======================

概要
--

只读属性 **`Performance.navigation`** 会返回一个 `PerformanceNavigation` 对象。这个对象表示出现在当前浏览上下文的 navigation 类型，比如获取某个资源所需要的重定向次数。

语法
--
```

navObject = performance.navigation;
```

规范
--

因为 Navigation Timing 规范已被弃用，此特性不再有望成为标准。请使用 `PerformanceNavigationTiming` 接口代替。

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关链接
----

* 这个功能属于接口 `Performance` .
Performance.onresourcetimingbufferfull
======================================

**`onresourcetimingbufferfull`** 属性是一个在 `resourcetimingbufferfull` 事件触发时会被调用的 `event handler` (en-US)。这个事件当浏览器的资源时间性能缓冲区已满时会触发。

语法
--
```

callback = performance.onresourcetimingbufferfull = buffer_full_cb;
```

### 返回值

callback

一个当 `resourcetimingbufferfull` 事件触发时调用的事件处理器。

例子
--

下面的示例在 `onresourcetimingbufferfull` 属性上设置一个回调函数。


```js
function buffer\_full(event) {
  console.log("WARNING: Resource Timing Buffer is FULL!");
  performance.setResourceTimingBufferSize(200);
}
function init() {
  // Set a callback if the resource buffer becomes filled
  performance.onresourcetimingbufferfull = buffer_full;
}
<body onload="init()">
```

规范
--

| Specification |
| --- |
| Resource Timing # dom-performance-onresourcetimingbufferfull |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Performance.clearResourceTimings()` (en-US)
* `Performance.setResourceTimingBufferSize()` (en-US)
Performance.memory
==================

语法
--
```

timingInfo = performance.memory
```

属性
--

`jsHeapSizeLimit`

上下文内可用堆的最大体积，以字节计算。

`totalJSHeapSize`

已分配的堆体积，以字节计算。

`usedJSHeapSize`

当前 JS 堆活跃段（segment）的体积，以字节计算。

规范
--

无。

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

查看更多
----

* 属于 `Performance` 接口。
Performance.toJSON()
====================

`Performance` 的 **`toJSON() 方法是一个标准的串行器：它返回一个由 performance 对象各个属性组成的 JSON`**Syntax
------
```

myPerf = performance.toJSON()
```

### Arguments

无

### Return value

myPerf

`Performance` 对象序列化之后转化成的 JSON 对象。

Example
-------


```js
var js;
js = window.performance.toJSON();
console.log("json = " + JSON.stringify(js));
```

Specifications
--------------

| Specification |
| --- |
| High Resolution Time # dom-performance-tojson |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Performance.clearMeasures()
===========================

**`clearMeasures()`** 方法可以从浏览器的性能入口缓存区中移除声明的度量衡。如果这个方法被调用时没有传入参数，则所有 `entry type` 标记值为"`measure`" 的`性能实体`将被从性能入口缓存区中移除。

**备注：** 此特性在 Web Worker 中可用

用法
--
```

performance.clearMeasures();
performance.clearMeasures(name);
```

### 参数

name 可选

用于表述时间戳名称的 `DOMString`。如果没有提供这个参数，则所有 `entry type` 标记值为"`measure`" 的`性能实体`将被移除。

### 返回值

无

例子
--

下面的两个例子演示了 `clearMeasures()` 的用法。


```js
function clear\_measure(name) {
  if (performance.clearMeasures === undefined) {
    console.log("performance.clearMeasures Not supported");
    return;
  }
  // 根据给定的 name 移除所有标记类型为 "measure" 的性能入口
  performance.clearMeasures(name);
}
function clear\_all\_measures() {
  if (performance.clearMeasures === undefined) {
    console.log("performance.clearMeasures Not supported");
    return;
  }
  // 移除性能缓存区中所有标记类型为 "measure" 的性能入口
  performance.clearMeasures();
}
```

规范
--

| Specification |
| --- |
| User Timing # dom-performance-clearmeasures |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Performance.timing
==================

**已弃用:** 不再推荐使用该特性。虽然一些浏览器仍然支持它，但也许已从相关的 web 标准中移除，也许正准备移除或出于兼容性而保留。请尽量不要使用该特性，并更新现有的代码；参见本页面底部的兼容性表格以指导你作出决定。请注意，该特性随时可能无法正常工作。

**警告：** 该属性在 Navigation Timing Level 2 specification 中已经被废弃，请使用 `PerformanceNavigationTiming` 替代。

**`Performance.timing`** 只读属性返回一个 `PerformanceTiming` 对象，这个对象包括了页面相关的性能信息。

语法
--
```

timingInfo = performance.timing;
```

规范
--

因为 Navigation Timing 规范已被弃用，此特性不再有望成为标准。请使用 `PerformanceNavigationTiming` 接口代替。

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关
--

* `Performance` 接口。
Performance.now()
=================

**`performance.now()`** 方法返回一个精确到毫秒的 `DOMHighResTimeStamp`。

**警告：** 这个时间戳实际上并不是高精度的。为了降低像Spectre这样的安全威胁，各类浏览器对该类型的值做了不同程度上的四舍五入处理。（Firefox 从 Firefox 59 开始四舍五入到 2 毫秒精度）一些浏览器还可能对这个值作稍微的随机化处理。这个值的精度在未来的版本中可能会再次改善；浏览器开发者还在调查这些时间测定攻击和如何更好的缓解这些攻击。

**备注：** 此特性在 Web Worker 中可用

返回值表示为从time origin之后到当前调用时经过的时间

牢记如下几点：

* 在以`Window`上下文创建各个 worker 中，`performance.now()`的值要比在创建这些 worker 的 window 中的小。它原来等于 main 上下文的`t0`，但是现在不是了。
* 在共享 worker 或服务 worker 中，在 worker 中的值可能要比 main 上下文中高，因为 window 对象可能在这些 worker 之后创建。
语法
--
```

const t = window.performance.now();
```

示例
--


```js
const t0 = window.performance.now();
doSomething();
const t1 = window.performance.now();
console.log("doSomething 函数执行了" + (t1 - t0) + "毫秒。");
```


和 JavaScript 中其他可用的时间类函数（比如`Date.now`）不同的是，`window.performance.now()`返回的时间戳没有被限制在一毫秒的精确度内，相反，它们以浮点数的形式表示时间，精度最高可达微秒级。

另外一个不同点是，`window.performance.now()`是以一个恒定的速率慢慢增加的，它不会受到系统时间的影响（系统时钟可能会被手动调整或被 NTP 等软件篡改）。另外，`performance.timing.navigationStart + performance.now()` 约等于 `Date.now()`。

时间精度降低
------

 为了提供对定时攻击和指纹的保护，performance.now() 的精度可能会根据浏览器的设置而被舍弃。
 在 Firefox 中，privacy.reduceTimerPrecision 偏好是默认启用的，默认值为 1ms。
```

// 降低时间精度 (1ms) 在 Firefox 60
performance.now();
// 8781416
// 8781815
// 8782206
// ...

// 降低时间精度 当 `privacy.resistFingerprinting` 启用
performance.now();
// 8865400
// 8866200
// 8866700
// ...
```


在 Firefox 中，你还可以启用 `privacy.resistFingerprinting` 这将精度改为 100ms 或`privacy.resistFingerprinting.reduceTimerPrecision.microseconds` 的值，以较大者为准。

从 Firefox 79 开始，如果你使用`Cross-Origin-Opener-Policy` (en-US)和`Cross-Origin-Embedder-Policy`头来跨源隔离你的文档，就可以使用高分辨率定时器。
```

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
```


这些头确保顶层文档不会与跨源文档共享浏览上下文组。COOP 过程——隔离你的文档，潜在的攻击者如果在弹出窗口中打开你的全局对象，就无法访问它，从而防止一组被称为 XS-Leaks 的跨源攻击。

规范
--

| Specification |
| --- |
| High Resolution Time # dom-performance-now |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关链接
----

* When milliseconds are not enough: performance.now() from HTML5 Rocks
Performance.clearMarks()
========================

**`clearMarks()`** 这个方法可以从浏览器的 performance entry 缓存中移除声明的标记。如果调用这个方法时没有传递参数，则所有带有`entry type`这类标记的`performance entries` 将从 performance entry 缓存区中被移除。

用法
--
```

performance.clearMarks();
performance.clearMarks(name);
```

### 参数

name 可选

`DOMString` 表示时间戳的名字，如果没有提供这个参数，则所有带有`entry type`这类标记的`performance entries` 将从 performance entry 缓存区中被移除。

### 返回值

无

例子
--

下面的例子演示 `clearMarks()` 的两种用法。


```js
function clear\_mark(name) {
  if (performance.clearMarks === undefined) {
    console.log("performance.clearMarks Not supported");
    return;
  }
  //移除所有标记了此名称的 peformance entry
  performance.clearMarks(name);
}
function clear\_all\_marks() {
  if (performance.clearMarks === undefined) {
    console.log("performance.clearMarks Not supported");
    return;
  }
  //从 performance 缓冲区中移除所有标记的 performance entry
  performance.clearMarks();
}
```

规范
--

| Specification |
| --- |
| User Timing # dom-performance-clearmarks |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Performance.timeOrigin
======================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

接口 `Performance` 的只读属性 **`timeOrigin`** 返回一个表示 the performance measurement 开始时间的高精度 timestamp

语法
--
```

var timeOrigin = performance.timeOrigin
```

### 值

高精度 timestamp，例如 1518354643295.86

Specifications
--------------

| Specification |
| --- |
| High Resolution Time # dom-performance-timeorigin |

Browser Compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Performance.mark()
==================

**`mark()`** 方法在浏览器的性能缓冲区中使用给定名称添加一个`timestamp(时间戳)` *。*

*应用*定义的时间戳可以通过 `Performance` 接口的一个 `getEntries*()` 方法 (`getEntries()`, `getEntriesByName()` 或者 `getEntriesByType()` (en-US)) 检索到。

`标记` 的 `performance entry`将具有以下属性值：

* `entryType` - 设置为 "`mark`".
* `name` - 设置为 mark 被创建时给出的 "name"。
* `startTime` (en-US) - 设置为 `mark()` 方法被调用时的 `timestamp` 。
* `duration` (en-US) - 设置为 "`0`" (标记没有持续时间).

如果这个方法被指定的 `name` 已经存在于`PerformanceTiming` 接口，会抛出一个`SyntaxError`错误。

语法
--
```

performance.mark(name);
```

### 参数

name

一个表示标记名称的`DOMString`。

### 返回值

无

实例
--

下面的示例演示如何使用 `mark()` 来创建和检索`PerformanceMark` (en-US)条目。


```js
// 创建一些标记。
performance.mark("squirrel");
performance.mark("squirrel");
performance.mark("monkey");
performance.mark("monkey");
performance.mark("dog");
performance.mark("dog");

// 获取所有的 PerformanceMark 条目。
const allEntries = performance.getEntriesByType("mark");
console.log(allEntries.length);
// 6

// 获取所有的 "monkey" PerformanceMark 条目。
const monkeyEntries = performance.getEntriesByName("monkey");
console.log(monkeyEntries.length);
// 2

// 删除所有标记。
performance.clearMarks();
```

规范
--

| Specification |
| --- |
| User Timing # dom-performance-mark |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Navigator：locks 属性
==================

**安全上下文:** 此项功能仅在一些支持的浏览器的安全上下文（HTTPS）中可用。

`Navigator` 接口的 **`locks`** 只读属性返回一个 `LockManager` 对象，该对象提供了请求新的 `Lock` 对象和查询现有的 `Lock` 对象的方法。

值
-

一个 `LockManager` 对象。

规范
--

| Specification |
| --- |
| Web Locks API # dom-navigatorlocks-locks |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.