使用 Chrome 開發人員工具進行 Canvas 檢查

Paul Lewis

引言

如果您使用 2D 或 WebGL 環境,只要是使用過 <canvas> 元素的人,都知道要偵錯非常困難。使用畫布時,通常需要列出一長串且難以追蹤的通話清單:

function draw() {

  context.clearRect(0, 0, 258, 258);
  context.fillStyle = "#EEEEEE";
  context.beginPath();
  context.arc(129, 129, 127, 0, 6.28, true);
  context.closePath();
  context.fill();

  // … and on and on
}

有時候,您可能會想擷取傳送至畫布結構定義的指示,並逐一逐步完成這些步驟。幸好,Chrome 開發人員工具新增了「畫布檢查」功能,助我們一臂之力!

本文將說明如何使用這項功能開始對畫布工作進行偵錯。這個檢查器支援 2D 和 WebGL 環境,因此無論您使用的是哪一種環境,應該都能立即取得實用的偵錯資訊。

入門課程

如要開始使用,請在 Chrome 中前往「about:flags」,然後開啟「啟用開發人員工具實驗功能」

在 about:flags 中啟用開發人員工具實驗
圖 1 - 啟用 about:flags 中的開發人員工具實驗

接著,前往開發人員工具,並點選右下角的齒輪 銷貨成本圖示。然後前往「實驗」並啟用「畫布檢查」

在開發人員工具的實驗中啟用 Canvas 檢查功能
圖 2 - 在開發人員工具的實驗中啟用 Canvas 檢查功能

你必須關閉再重新開啟開發人員工具,變更才會生效 (可以使用 Alt+ROption+R 做為替代工具)。

開發人員工具重新開啟後,請前往「Profile」(設定檔) 部分,您會看到新的 Canvas Profiler 選項。

首先,您會發現 Canvas Profiler 已停用。找出要偵錯的頁面後,只要按下「Enable」,頁面就會重新載入,準備好擷取 <canvas> 呼叫:

開啟 Canvas 分析器
圖 3 - 開啟 Canvas 分析器

您必須決定要擷取的是單一影格,還是連續影格,而這些影格會與開發人員工具中的時間軸完全相同。

單一影格會擷取呼叫,直到目前影格結束時才停止。另一方面,「連續影格」會擷取所有 <canvas> 元素的所有影格,直到你指示停止為止。應選擇哪種模式,取決於您使用 <canvas> 元素的方式。如果是播放中的動畫,您可能需要擷取單一影格。如果是回應使用者事件的簡短動畫,則可能需要擷取連續影格。

選擇要擷取的影格數
圖 4:選擇要擷取的影格數

設定完成後,即可開始拍攝!

擷取影格

如要擷取內容,只要按下「Start」(開始),然後照常與應用程式互動即可。一段時間後,請返回開發人員工具。如果是連續擷取,請按下「停止」

現在,左側清單中已經有全新的設定檔,完成所有 <canvas> 元素擷取的結構定義呼叫次數。按一下個人資料,您就會看到如下所示的畫面:

開發人員工具中的畫布設定檔。
圖 5 - 開發人員工具中的畫布設定檔

下方窗格中會列出所有可逐步瀏覽的已擷取畫面。當您點選每個影格時,頂端的螢幕截圖就會顯示該影格結尾的 <canvas> 元素狀態。如果您有多個 <canvas> 元素,可以使用螢幕截圖下方的選單,選擇要顯示的元素。

選擇畫布結構定義。
圖 6 - 選擇畫布結構定義

您會在該框架中看到繪製呼叫群組。每個繪製呼叫群組都包含一個繪製呼叫,這會是群組中的最後一次呼叫。繪製呼叫是什麼呢?如果是 2D 結構定義 (例如 clearRect()drawImage()fill()stroke()putImageData() 或任何文字轉譯函式),WebGL 將會是 clear()drawArrays()drawElements()。基本上,這個物件就是會變更目前繪圖緩衝區內容的「任何物件」。(如果你沒有圖像,可以將緩衝區視為一個含有我們操縱像素的點陣圖。)

現在,您必須逐步完成清單。您可以在頁框、繪製通話群組或呼叫層級進行這項操作。無論選擇瀏覽清單的方式為何 (而且螢幕截圖下方有一個按鈕可以幫助您快速瀏覽),您都能查看當下的背景資訊,進而快速找出並修正錯誤。

導覽按鈕,方便使用清單跳躍方式。
圖 7 - 瀏覽按鈕方便進行清單躍點

辨別差異

另一個實用功能是可以查看兩次呼叫之間發生哪些屬性和變數的變化。

如要確認,您只要按一下側欄按鈕 (側欄圖示。),即可開啟新的檢視畫面。逐步繪製繪製呼叫時,您會看到已更新的屬性。將滑鼠遊標懸停在緩衝區或陣列上,即可查看其內容。

辨別差異

勇敢傳達心聲!

因此,現在你已瞭解如何在 Chrome 開發人員工具中對畫布工作進行偵錯了。如果您對 Canvas 分析器工具有意見,請回報錯誤,或將問題發布到 Chrome 開發人員工具群組。如果在檢查 <canvas> 時發現任何錯誤,或是想查看其他建議,請告訴我們。這完全取決於開發人員的使用情形和 Chrome 工具所提供的意見回饋。