

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# CloudWatch RUM Web 用戶端所收集的資訊
<a name="CloudWatch-RUM-datacollected"></a>

本節會記錄 **PutRumEvents** 結構描述，它定義了您可以使用 CloudWatch RUM 從使用者工作階段收集的資料結構。

**PutRumEvents** 請求會將包含下列欄位的資料結構傳送至 CloudWatch RUM。
+ 此批次 RUM 事件的 ID
+ 應用程式監控詳細資訊，其中包含下列各項：
  + 應用程式監控 ID
  + 監控的應用程式版本
+ 使用者詳細資訊，其中包含下列各項。**只有在應用程式監控已啟用 Cookie 時，才會收集此資訊。**
  + 由 Web 用戶端產生的使用者 ID
  + 工作階段 ID
+ 此批次中的 [RUM 事件](#CloudWatch-RUM-datacollected-event)陣列。

## RUM 事件結構描述
<a name="CloudWatch-RUM-datacollected-event"></a>

每個 RUM 事件的結構都包含下列欄位。
+ 事件的 ID
+ 時間戳記
+ 事件類型
+ 使用者代理程式
+ [中繼資料](#CloudWatch-RUM-datacollected-metadata)
+ [RUM 事件詳細資訊](#CloudWatch-RUM-datacollected-eventDetails)

## RUM 事件中繼資料
<a name="CloudWatch-RUM-datacollected-metadata"></a>

中繼資料包括頁面中繼資料、使用者代理程式中繼資料、地理位置中繼資料和網域中繼資料。

### 頁面中繼資料
<a name="CloudWatch-RUM-datacollected-metadata-page"></a>

頁面中繼資料包括下列項目：
+ 頁面 ID
+ 頁面標題
+ 父頁面 ID。– **只有在應用程式監視器已啟用 Cookie 時，才會收集此資訊。**
+ 互動深度 – **只有在應用程式監視器已啟用 Cookie 時，才會收集此資訊。**
+ 頁面標籤 – 您可以將標籤新增至頁面事件，以將頁面分類在一起。如需詳細資訊，請參閱[使用頁面群組](CloudWatch-RUM-page-groups.md)。

### 使用者代理程式中繼資料
<a name="CloudWatch-RUM-datacollected-metadata-useragent"></a>

使用者代理程式中繼資料包括下列項目：
+ 瀏覽器語言
+ 瀏覽器名稱
+ 瀏覽器版本
+ 作業系統名稱
+ 作業系統版本
+ 裝置類型
+ 平台類型

### 地理位置中繼資料
<a name="CloudWatch-RUM-datacollected-metadata-geolocation"></a>

地理位置中繼資料包括下列項目：
+ 國家代碼
+ 細分代碼

### 網域中繼資料
<a name="CloudWatch-RUM-datacollected-metadata-domain"></a>

網域中繼資料包含 URL 網域。

## RUM 事件詳細資訊
<a name="CloudWatch-RUM-datacollected-eventDetails"></a>

事件的詳細資訊會遵循下列其中一種結構描述類型，視事件類型而定。

### 工作階段啟動事件
<a name="CloudWatch-RUM-datacollected-sessionstart"></a>

此事件不包含任何欄位。**只有在應用程式監控已啟用 Cookie 時，才會收集此資訊。**

### 頁面檢視結構描述
<a name="CloudWatch-RUM-datacollected-pageview"></a>

**Page view** (頁面檢視) 事件包含下列屬性。您可以透過設定 Web 用戶端來停用頁面檢視集合。如需詳細資訊，請參閱 [CloudWatch RUM Web 用戶端文件](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)。


| 名稱 | 類型 | 說明 | 
| --- | --- | --- | 
|  **頁面 ID** |  String  |  在應用程式中唯一代表此頁面的 ID。根據預設，這是 URL 路徑。  | 
|  **父頁面 ID** |  String  |  當使用者導覽至當前頁面時，使用者所在頁面的 ID。**只有在應用程式監控已啟用 Cookie 時，才會收集此資訊。**  | 
|  **互動深度** |  String  |  **只有在應用程式監控已啟用 Cookie 時，才會收集此資訊。**  | 

### JavaScript 錯誤結構描述
<a name="CloudWatch-RUM-datacollected-JavaScriptError"></a>

代理程式產生的 JavaScript 錯誤事件包含下列屬性。只有在您選取收集錯誤遙測時，Web 用戶端才會收集這些事件。


| 名稱 | 類型 | 說明 | 
| --- | --- | --- | 
|  **錯誤類型** |  String  |  錯誤名稱 (如果存在)。如需詳細資訊，請參閱 [Error.prototype.name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name)。 某些瀏覽器可能不支援錯誤類型。  | 
|  **錯誤訊息** |  String  |  錯誤的訊息。如需詳細資訊，請參閱 [Error.prototype.message](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message)。如果錯誤欄位不存在，則這就是錯誤事件的訊息。如需詳細資訊，請參閱 [ErrorEvent](https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent)。 在不同的瀏覽器中，錯誤消息可能不一致。  | 
|  **堆疊追蹤** |  String  |  錯誤的堆疊追蹤 (如果存在) 會截斷為 150 個字元。如需詳細資訊，請參閱 [Error.prototype.stack](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack)。 某些瀏覽器可能不支援堆疊追蹤。  | 

### DOM 事件結構描述
<a name="CloudWatch-RUM-datacollected-DOMEvent"></a>

代理程式產生的文件物件模型 (DOM) 事件包含下列屬性。這些事件預設為無法收集。只有在您啟用互動遙測時，才會收集這些事件。如需詳細資訊，請參閱 [CloudWatch RUM Web 用戶端文件](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)。


| 名稱 | 類型 | 說明 | 
| --- | --- | --- | 
|  **事件** |  String  |  DOM 事件的類型，例如點選、滾動或懸停。如需詳細資訊，請參閱[事件參考](https://developer.mozilla.org/en-US/docs/Web/Events)。  | 
|  **Element** |  String  |  DOM 元素類型  | 
|  **元素 ID** |  String  |  如果產生事件的元素具有 ID，則此屬性會存放該 ID。如需詳細資訊，請參閱 [Element.id](https://developer.mozilla.org/en-US/docs/Web/API/Element/id)。  | 
|  **CSSLocator** |  String  |  用於識別 DOM 元素的 CSS 定位器。  | 
|  **InteractionId** |  String  |  使用者與 UI 間之互動的唯一 ID。  | 

### 導覽事件結構描述
<a name="CloudWatch-RUM-datacollected-NavigationEvent"></a>

只有在應用程式監控啟用效能遙測時，才會收集導覽事件。

導覽事件使用[導覽計時層級 1](https://www.w3.org/TR/navigation-timing/#performancetiming) 和[導覽計時層級 2](https://w3c.github.io/navigation-timing) API。並非所有瀏覽器都支援層級 2 API，因此這些較新的欄位是選用的。

**注意**  
時間戳記指標是根據 [DOMHighResTimestamp](https://www.w3.org/TR/hr-time-2/#sec-domhighrestimestamp) 而定。使用層級 2 API 時，所有的計時都預設與 `startTime` 相關。但對於層級 1，系統會從時間戳記指標減去 `navigationStart` 指標，以取得相對值。所有時間戳記值都以毫秒為單位。

導覽事件包含下列屬性。


| 名稱 | 類型 | 說明 | 備註 | 
| --- | --- | --- | --- | 
|  **initiatorType** |  String  |  表示起始效能事件的資源類型。 |  **值：**"navigation" **層級 1：**"navigation" **層級 2:**entryData.initiatorType | 
|  **navigationType** |  String  |  表示導覽的類型。此屬性不是必要項目。 |  **值：**值必須是下列其中一個： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html) | 
|  **startTime** |  Number  |  指示事件觸發的時間。 |  **值：**0 **層級 1：**entryData.navigationStart - entryData.navigationStart  **層級 2：**entryData.startTime | 
|  **unloadEventStart** |  Number  |  指示視窗中的上一個文件在擲出 `unload` 事件後開始卸載的時間。 |  **值：**如果沒有上一個文件，或者如果上一個文件或其中一個所需的重新引導不是相同的原點，則傳回的值為 0。 **層級 1：** <pre>entryData.unloadEventStart > 0<br />  ? entryData.unloadEventStart - entryData.navigationStart<br />  : 0<br /></pre> **層級 2：**entryData.unloadEventStart | 
|  **promptForUnload** |  Number  |  卸載文件所花費的時間。換言之，`unloadEventStart` 到 `unloadEventEnd` 之間的時間。`UnloadEventEnd` 表示卸載事件處理程式完成時的時刻，以毫秒為單位。 |  **值：**如果沒有上一個文件，或者如果上一個文件或其中一個所需的重新引導不是相同的原點，則傳回的值為 0。 **層級 1：**entryData.unloadEventEnd - entryData.unloadEventStart **層級 2：**entryData.unloadEventEnd - entryData.unloadEventStart | 
|  **redirectCount** |  Number  |  代表目前瀏覽環境下最後一次非重新引導導覽之後重新引導數量的數字。 此屬性不是必要項目。 |  **值：**如果沒有重新引導，或者有任何重新引導與目的地文件的原點不相同，則傳回的值為 0。 **層級 1：**不可用 **層級 2：**entryData.redirectCount | 
|  **redirectStart** |  Number  |  第一個 HTTP 重新引導啟動的時間。  |  **值：**如果沒有重新引導，或者有任何重新引導與目的地文件的原點不相同，則傳回的值為 0。 **層級 1：** <pre>entryData.redirectStart > 0<br />  ? entryData.redirectStart - entryData.navigationStart<br />  : 0</pre> **層級 2：**entryData.redirectStart | 
|  **redirectTime** |  Number  |  HTTP 重新引導所花費的時間。這是 `redirectStart` 與 `redirectEnd` 之間的差異。  |  **層級 1：**：entryData.redirectEnd - entryData.redirectStart **層級 2：**：entryData.redirectEnd - entryData.redirectStart | 
|  **workerStart** |  Number  |  這是 `PerformanceResourceTiming` 介面的屬性。它標誌著工作者執行緒操作的開始。 此屬性不是必要項目。 |  **值：**如果服務工作者執行緒已經在執行中，或立即在啟動服務工作者執行緒之前執行，則此屬性會在分派 `FetchEvent` 前立即傳回時間。如果服務工作者未攔截資源，則傳回 0。 **層級 1：**不可用 **層級 2：**entryData.workerStart | 
|  **workerTime** |  Number  |  如果服務工作者未攔截資源，則這樣會傳回工作者執行緒操作所需的時間。 此屬性不是必要項目。 |  **層級 1：**不可用  **層級 2：**<pre>entryData.workerStart > 0<br />   ? entryData.fetchStart - entryData.workerStart<br />   : 0</pre>  | 
|  **fetchStart** |  Number  |  瀏覽器準備就緒可以使用 HTTP 請求擷取文件的時間。這是在檢查任何應用程式快取之前。 |  **層級 1：** <pre>: entryData.fetchStart > 0<br />  ? entryData.fetchStart - entryData.navigationStart<br />  : 0</pre> **層級 2：**entryData.fetchStart | 
|  **domainLookupStart** |  Number  |  開始網域查詢的時間。 |  **值：**如果使用永久連線，或者如果資訊存放在快取或本機資源中，該值會與 `fetchStart` 相同。 **層級 1：** <pre>entryData.domainLookupStart > 0<br />  ? entryData.domainLookupStart - entryData.navigationStart<br />  : 0</pre> **層級 2：**entryData.domainLookupStart | 
|  **dns** |  Number  |  網域查詢所需的時間。 |  **值：**如果快取資源和 DNS 記錄，則預期的值為 0。 **層級 1：**entryData.domainLookupEnd - entryData.domainLookupStart **層級 2：**entryData.domainLookupEnd - entryData.domainLookupStart | 
|  **nextHopProtocol** |  String  |  代表用於擷取資源之網路通訊協定的字串。 此屬性不是必要項目。 |  **層級 1：**不可用 **層級 2：**entryData.nextHopProtocol | 
|  **connectStart** |  Number  |  使用者代理程式立即開始建立與伺服器的連線以擷取文件之前的時間。 |  **值：**如果使用 RFC2616 永久連線，或從相關應用程式快取或本機資源擷取目前的文件，則此屬性會傳回 `domainLookupEnd` 值。 **層級 1：** <pre>entryData.connectStart > 0<br />  ? entryData.connectStart - entryData.navigationStart<br />  : 0</pre> **層級 2：**entryData.connectStart  | 
|  **connect** |  Number  |  測量建立傳輸連線或執行 SSL 身分驗證所需的時間。它還包括當瀏覽器發出太多並行請求時所花費的阻塞時間。  |  **層級 1：**entryData.connectEnd - entryData.connectStart **層級 2：**entryData.connectEnd - entryData.connectStart | 
|  **secureConnectionStart** |  Number  |  如果當前頁面的 URL 結構描述是「https」，此屬性會傳回使用者代理程式立即啟動交握程序以保護當前連線之前的時間。如果不使用 HTTPS，則傳回 0。如需 URL 結構描述的詳細資訊，請參閱 [URL 表示法](https://url.spec.whatwg.org/#concept-url-scheme)。  |  **公式：**entryData.secureConnectionStart | 
|  **tlsTime** |  Number  |  完成 SSL 握手所花費的時間。  |  **層級 1：** <pre>entryData.secureConnectionStart > 0<br />   ? entryData.connectEnd - entryData.secureConnectionStart<br />   : 0</pre> **層級 2：** <pre>entryData.secureConnectionStart > 0<br />   ? entryData.connectEnd - entryData.secureConnectionStart<br />   : 0</pre>  | 
|  **requestStart** |  Number  |  使用者代理程式立即開始從伺服器或從相關應用程式快取或從本機資源請求資源之前的時間。  | **層級 1：** <pre>: entryData.requestStart > 0<br />  ? entryData.requestStart - entryData.navigationStart<br />  : 0<br /></pre> **層級 2：**entryData.requestStart | 
|  **timeToFirstByte** |  Number  |  提出請求後，接收資訊之第一個位元組所花費的時間。此時間與 `startTime` 相關。  | **層級 1：**entryData.responseStart - entryData.requestStart **層級 2：**entryData.responseStart - entryData.requestStart | 
|  **responseStart** |  Number  |  使用者代理程式的 HTTP 剖析器立即從相關應用程式快取、或從本機資源，或從伺服器接收回應之第一個位元組的時間。  | **層級 1：** <pre>entryData.responseStart > 0<br />   ? entryData.responseStart - entryData.navigationStart<br />   : 0</pre> **層級 2：**entryData.responseStart   | 
|  **responseTime** |  String  |  從相關應用程式快取、從本機資源或從伺服器以位元組形式接收完整回應所花費的時間。  | **層級 1：** <pre>entryData.responseStart > 0<br />  ? entryData.responseEnd - entryData.responseStart<br />  : 0</pre> **層級 2：** <pre>entryData.responseStart > 0<br />  ? entryData.responseEnd - entryData.responseStart<br />  : 0</pre>  | 
|  **domInteractive** |  Number  |  當剖析器在主要文件上完成其工作，並構建 HTML DOM 的時間。這時，其 `Document.readyState` 變更為「交互式」並擲出相應的 `readystatechange` 事件。  | **層級 1：** <pre>entryData.domInteractive > 0<br />  ? entryData.domInteractive - entryData.navigationStart<br />  : 0</pre> **層級 2 ：**entryData.domInteractive  | 
|  **domContentLoadedEventStart** |  Number  |  表示等於使用者代理程式在當前文件立即觸發 DOMContentLoaded 事件之前之時間的時間值。當初始 HTML 文件已完全載入並剖析時，就會觸發 DOMContentLoaded 事件。此時，主要 HTML 文件已經完成解析，瀏覽器開始構建轉譯樹狀結構，並且仍然需要載入子資源。這不會等待樣式表、映像和子框架完成載入。  | **層級 1：** <pre>entryData.domContentLoadedEventStart > 0<br />  ? entryData.domContentLoadedEventStart - entryData.navigationStart<br />  : 0<br /></pre> **層級 2：** entryData.domContentLoadedEventStart  | 
|  **domContentLoaded** |  Number  |  轉譯樹狀結構的開始時間和結束時間會由 `domContentLoadedEventStart` 和 `domContentLoadedEventEnd` 標記。它可以讓 CloudWatch RUM 追蹤執行。此屬性是 `domContentLoadedStart` 與 `domContentLoadedEnd` 之間的差異。 在此期間，DOM 和 CSSOM 已準備就緒。此屬性會等待指令碼執行，但非同步指令碼和動態建立的指令碼除外。如果指令碼依賴於樣式表，`domContentLoaded` 也會在樣式表上等待。它不會等待映像。  `domContentLoadedStart` 和 `domContentLoadedEnd` 的實際值近似於 Google Chrome 網路面板中的 `domContentLoaded`。它表明 HTML DOM \$1 CSSOM 轉譯樹狀結構構造時間始於頁面加載程序。對於導覽指標，`domContentLoaded` 值表示開始和結束值之間的差異，這是僅下載子資源和轉譯樹狀結構構造所需的時間。   | **層級 2：**entryData.domContentLoadedEventEnd - entryData.domContentLoadedEventStart  **層級 2：**entryData.domContentLoadedEventEnd - entryData.domContentLoadedEventStart  | 
|  **domComplete** |  Number  |  瀏覽器立即將當前文件的當前文件整備程度設定為完成之前的時間。此時，子資源 (例如映像) 的載入已完成。這包括下載封鎖內容 (例如 CSS 和同步 JavaScript) 所花費的時間。這近似於 Google Chrome 網路面板中的 `loadTime`。  | **層級 1：** <pre>entryData.domComplete > 0<br />  ? entryData.domComplete - entryData.navigationStart<br />  : 0<br /></pre> **層級 2：**entryData.domComplete  | 
|  **domProcessingTime** |  Number  |  回應與載入事件開始之間的總時間。  | **層級 1：**entryData.loadEventStart - entryData.responseEnd **層級 2：**entryData.loadEventStart - entryData.responseEnd  | 
|  **loadEventStart** |  Number  |  立即觸發當前文件之 `load` 事件的時間。 |  **層級 1：** <pre>entryData.loadEventStart > 0<br />  ? entryData.loadEventStart - entryData.navigationStart<br />  : 0<br /></pre> **層級 2：**entryData.loadEventStart | 
|  **loadEventTime** |  Number  |  `loadEventStart` 與 `loadEventEnd` 之間的差異。系統會在此期間觸發等待此載入事件的其他函數或邏輯。 |  **層級 1：**entryData.loadEventEnd - entryData.loadEventStart **層級 2：**entryData.loadEventEnd - entryData.loadEventStart | 
|  **duration** |  String  |  持續時間是頁面總載入時間。它會記錄下載主要頁面及其所有同步子資源的時間，以及轉譯頁面的時間。非同步資源 (例如指令碼) 會在稍後繼續下載。這是 `loadEventEnd` 和 `startTime` 屬性之間的差異。  | **層級 1：**entryData.loadEventEnd - entryData.navigationStart **層級 2：**entryData.duration | 
|  **headerSize** |  Number  |  傳回 `transferSize` 與 `encodedBodySize` 之間的差異。 此屬性不是必要項目。  | **層級 1：**不可用 **層級 2：**entryData.transferSize - entryData.encodedBodySize **層級 2：**entryData.transferSize - entryData.encodedBodySize | 
|  **compressionRatio** |  Number  |  `encodedBodySize` 和 `decodedBodySize` 的比率。`encodedBodySize` 值是排除 HTTP 標頭之資源的壓縮大小。`decodedBodySize` 值是排除 HTTP 標頭之資源的解壓縮大小。 此屬性不是必要項目。  | **層級 1：**不可用。 **層級 2：**<pre>entryData.encodedBodySize > 0<br />  ? entryData.decodedBodySize / entryData.encodedBodySize<br />  : 0</pre>  | 
|  **navigationTimingLevel** |  Number  |  導覽計時 API 版本。  | **值：**1 或 2  | 

### 資源事件結構描述
<a name="CloudWatch-RUM-datacollected-ResourceEvent"></a>

只有在應用程式監控啟用效能遙測時，才會收集資源事件。

時間戳記指標是根據 [The DOMHighResTimeStamp typedef](https://www.w3.org/TR/hr-time-2/#sec-domhighrestimestamp) 而定。使用層級 2 API 時，所有的計時都預設與 `startTime` 相關。但對於層級 1 API，系統會從時間戳記指標減去 `navigationStart` 指標，以取得相對值。所有時間戳記值都以毫秒為單位。

代理程式產生的資源事件包含下列屬性。


| 名稱 | 類型 | 說明 | 備註 | 
| --- | --- | --- | --- | 
|  **targetUrl** |  String  |  傳回資源的 URL。 |  **公式：** [entryData.name](http://entrydata.name/) | 
|  **initiatorType** |  String  |  表示起始效能資源事件的資源類型。 |  **值：**"resource" **公式：**entryData.initiatorType | 
|  **duration** |  String  |  傳回 `responseEnd` 和 `startTime` 屬性之間的差異。此屬性不是必要項目。  | **公式：**entryData.duration | 
|  **transferSize** |  Number  |  傳回擷取資源的大小 (以八位元為單位)，包括回應標頭欄位和回應酬載主體。此屬性不是必要項目。  | **公式：**entryData.transferSize | 
|  **fileType** |  String  |  衍生自目標 URL 模式的擴充。  |   | 

### 最大的有內容繪製事件結構描述
<a name="CloudWatch-RUM-datacollected-LargestPaintEvent"></a>

最大的有內容繪製事件包含下列屬性。

只有在應用程式監控啟用效能遙測時，才會收集這些事件。


| 名稱 | 描述 | 
| --- | --- | 
|  **Value** |  如需詳細資訊，請參閱 [Web 關鍵數值](https://web.dev/vitals/)。 | 

### 第一個輸入延遲事件
<a name="CloudWatch-RUM-datacollected-FirstInputDelayEvent"></a>

第一個輸入延遲事件包含下列屬性。

只有在應用程式監控啟用效能遙測時，才會收集這些事件。


| 名稱 | 描述 | 
| --- | --- | 
|  **Value** |  如需詳細資訊，請參閱 [Web 關鍵數值](https://web.dev/vitals/)。 | 

### 累計版面配置移位事件
<a name="CloudWatch-RUM-datacollected-CumulativeShift"></a>

累計版面配置移位事件包含下列屬性。

只有在應用程式監控啟用效能遙測時，才會收集這些事件。


| 名稱 | 描述 | 
| --- | --- | 
|  **Value** |  如需詳細資訊，請參閱 [Web 關鍵數值](https://web.dev/vitals/)。 | 

### HTTP 事件
<a name="CloudWatch-RUM-datacollected-HTTP"></a>

HTTP 事件可以包含下列屬性。它將包含 `Response` 欄位或 `Error` 欄位，但不能同時包含。

只有在應用程式監控啟用 HTTP 遙測時，才會收集這些事件。


| 名稱 | 描述 | 
| --- | --- | 
|  **請求** |  請求欄位包含下列項目： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 
|  **回應** |  回應欄位包含下列項目： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 
|  **錯誤** |  錯誤欄位包含下列項目： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 

### X-Ray 追蹤事件結構描述
<a name="CloudWatch-RUM-datacollected-xraytraceEvent"></a>

只有在應用程式監控啟用 X-Ray 追蹤時，才會收集這些事件。

如需 X-Ray 追蹤事件結構描述的詳細資訊，請參閱 [AWS X-Ray 區段文件](https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html)。

# 單頁應用程式的路由變更時序
<a name="CloudWatch-RUM-route-change-timing"></a>

在傳統的多頁面應用程式中，當使用者請求載入新內容時，使用者實際上是從伺服器請求新的 HTML 網頁。因此，CloudWatch RUM Web 用戶端會使用一般效能 API 指標擷取載入時間。

但是，單頁 Web 應用程式使用 JavaScript 和 Ajax 來更新介面，而無需從伺服器載入新頁面。瀏覽器時序 API 不會記錄單頁更新，而是使用路由變更時序。

CloudWatch RUM 支援監控來自伺服器的完整頁面載入和單頁更新，但差異如下：
+ 對於路由變更時序，沒有瀏覽器提供的指標，例如 `tlsTime`、`timeToFirstByte` 等。
+ 對於路由變更時序，`initiatorType` 欄位將為 `route_change`。

CloudWatch RUM Web 用戶端會監聽可能導致路由變更的使用者互動，且在記錄這類使用者互動時，Web 用戶端會記錄時間戳記。然後，如果下列項目皆為 true，路由變更時序會開始：
+ 瀏覽器歷史記錄 API (瀏覽器下一頁和上一頁按鈕除外) 用於執行路由變更。
+ 路由變更偵測的時間與最近的使用者互動時間戳記之間的差異小於 1000 ms。這可避免資料扭曲。

然後，一旦路由變更時序開始，如果沒有正在進行的 AJAX 請求和 DOM 變動，則該時序即完成。然後，將使用最近完成活動的時間戳記作為完成時間戳記。

如果正在進行的 AJAX 請求或 DOM 變動超過 10 秒 (預設情況下)，路由變更時序將逾時。在此情況下，CloudWatch RUM Web 用戶端將不再記錄此路由變更的時序。

因此，路由變更事件的持續時間計算方式如下：

```
(time of latest completed activity) - (latest user interaction timestamp)
```