最佳化指南

本指南會針對安全性、效能與耗用量這幾個方面,提供幾種最佳化 Google Maps API 用量的策略。

安全性

詳閱安全性最佳做法

API 金鑰是以專案為主的憑證,應將其視為使用者 ID 和密碼,採取同等的安全防範措施。請詳閱 API 安全性最佳做法,避免因不小心誤用金鑰而不當耗用配額,導致帳戶產生非預期的費用。

使用 API 金鑰存取 Maps API

我們建議以 API 金鑰做為存取 Google Maps API 時的驗證方式。儘管目前仍支援使用用戶端 ID,但 API 金鑰能提供更精細的安全控管機制,且可搭配特定網址、IP 位址和 Mobile SDK (Android 和 iOS) 使用。如要瞭解如何建立及保護 API 金鑰,請前往各個 API 或 SDK 的「使用 API 金鑰」頁面 (例如,針對 Maps JavaScript API,請前往其使用 API 金鑰頁面)。

效能

採用指數輪詢策略來處理錯誤

如果您的應用程式在短時間內嘗試呼叫 API 的次數過多,導致發生錯誤 (例如每秒查詢次數錯誤),不妨採用指數輪詢,以便系統處理要求。

指數輪詢最適合用於 500 層級錯誤。詳情請參閱處理 HTTP 傳回狀態碼

具體來說,請調整查詢速度。在程式碼中新增每次查詢的間隔等候時間 (S 秒);如果還是發生每秒查詢次數錯誤,請將等候時間延長一倍,再傳送下一個查詢。繼續調整等候時間,直到查詢未傳回錯誤為止。

隨需傳送使用者互動要求

內含使用者互動的 API 要求應隨需傳送;也就是說,等候使用者執行特定動作 (例如「on-click」) 來啟動 API 要求後,才根據結果載入地圖、設定目的地或顯示適當資訊。採用隨需模式可避免對 API 發出不必要的要求,從而降低 API 用量。

避免在地圖移動時顯示重疊內容

在使用者可能會移動地圖的時候,請避免透過 Draw() 方法在地圖上顯示自訂疊加層內容。這是因為使用者每次移動地圖,系統就會重新整理;這時如果在該地圖上疊加內容,可能會產生動作延遲或視覺效果不流暢的情況。因此,請務必只在使用者已停止平移或縮放時,才新增或移除地圖上的疊加層內容。

避免以 Draw 方法進行大量作業

一般而言,建議盡量避免在 Draw() 方法中使用需要大量效能的非繪圖操作。舉例來說,請避免在 Draw() 方法程式碼中:

  • 進行會傳回大量內容的查詢。
  • 針對顯示中的資料執行大量變更。
  • 操控許多文件物件模型 (DOM) 元素。

這些作業會降低效能,並在地圖算繪時造成延遲或視覺效果不流暢。

針對標記使用光柵圖片

新增標記時,可使用光柵圖片 (例如 .PNG 或 .JPG 格式的圖片) 在地圖上標示位置。請避免使用可擴充向量圖形 (SVG) 格式的圖片,因為在重新繪製地圖時算繪這種格式的圖片可能會導致延遲。

對標記進行最佳化處理

您可進行最佳化處理來將多個標記算繪為單一靜態元素,藉此提升效能;這個做法在需要使用大量標記時相當實用。根據預設,Maps JavaScript API 會決定是否對標記進行最佳化處理;若有大量標記,Maps JavaScript API 會嘗試在算繪標記時進行最佳化。不過,並不是所有的標記都能最佳化;在某些情況下,Maps JavaScript API 可能需要以不經最佳化處理的方式算繪標記。若您使用 GIF 動畫或 PNG 圖片,或是每一個標記都必須算繪成個別 DOM 元素,請停用最佳化算繪。

建立叢集以管理標記顯示方式

為協助您管理在地圖上用來標示位置的標記,請使用 Marker Clusterer 程式庫建立標記叢集。Marker Clusterer 程式庫提供下列選項:

  • 格線大小 - 指定叢集中標記群組的數量。
  • 最大縮放等級 - 指定顯示叢集時適用的最大縮放等級。
  • 圖片路徑 - 要當做標記圖示使用的圖形圖片所在路徑。

耗用量

如要規劃預算及控管費用,建議執行下列操作:

  • 設定預算快訊,方便掌握支出累計至設定金額的情況。請注意,設定預算並不會限制 API 用量,只會讓您在費用金額接近指定門檻時收到提醒。
  • 限制每日 API 用量,控管可計費 API 的費用。只要設定「每日要求數」上限,即可限制費用。您可以根據想要支出的金額,利用簡單的公式來算出每日上限:(每月支出/單價)/30 = 每日要求上限 (單一 API)。由於您導入的功能可能會使用多個可計費 API,因此請視需要調整上述公式。我們每月會提供 $200 美元的 Google Maps API 抵免額,計算時請將這項因素考慮在內。
  • 使用多項專案來區隔、追蹤用量,並排出優先次序。舉例來說,假設您會定期使用 Google Maps Platform API 進行測試,這種情況下,如果獨立設置一個測試專案,就能利用該專案本身的配額與 API 金鑰盡情測試,完全不必擔心費用意外超支。

管理地圖介面集的耗用量

由於使用者通常一次只會與一張地圖互動,因此每頁只使用一張地圖有助提升地圖顯示效果。您可以讓應用程式根據客戶的互動方式與需求,操控地圖以顯示不同的資料集。

使用靜態圖片

使用動態圖像 (動態地圖和動態街景服務) 的要求,費用會高於使用靜態地圖和靜態街景服務的要求。如果您認為使用者不會出現與地圖或街景服務互動 (縮放或平移) 的情況,不妨使用靜態版本的 API。

此外,靜態地圖和靜態街景服務也很適合用來提供縮圖,也就是非常小的地圖和相片。這些項目的費率較低,且只有在使用者互動時 (點擊時) 才導向動態版本,提供完整的 Google 地圖體驗。

使用 Maps Embed API

您可以使用 Maps Embed API 加入內含單一標記或動態地圖的地圖,這項功能完全免費。如果只需要單一標記且不用自訂地圖,就可以在應用程式中使用 Maps Embed API。使用路線模式、檢視模式或搜尋模式的 Maps Embed API 要求,則需要付費 (詳情請參閱價目表)。

針對行動應用程式採用行動地圖 SDK

如要在行動應用程式中顯示地圖,請使用 Maps SDK for Android 或 Maps SDK for iOS。如果規定排除使用 Mobile SDK,則採用 Maps Static API 或 Maps JavaScript API。

管理路徑介面集的耗用量

限制 Directions API 路線控點

如果可以,請將使用者的單一查詢項目限制在 10 個路線控點以內。針對內含超過 10 個路線控點的要求,系統將以較高的費率計費。

使用 Directions API 最佳化功能規劃最佳路線

使用路線控點最佳化引數的要求,會以較高的費率計費;詳情請參閱最佳化路線控點

最佳化引數會分類路線控點,確保提供最佳路線。舉例來說,比起隨機排序的路徑 (A-D-B-C-E),經過最佳化的 A 到 E 路徑 A-B-C-D-E),能讓使用者獲得較好的體驗。

在 Directions API 和 Distance Matrix API 中使用即時車流量模型

採用即時車流量模型的 Directions API 和 Distance Matrix API 要求會以較高的費率計費;只要將出發時間設為 now 即可啟用。

如果要求省略車流量模型,則系統將單純依據實際因素 (道路、距離和速度限制) 來計算結果。

在 GPS 資料不精確時使用「行經的路徑」和「最近的道路」

Maps Roads API 功能 (「行經的路徑」及「最近的道路」) 現已歸入進階層級,費率也比較高。GPS 資料無法精準定位時可採用這些功能,Roads API 可協助判斷正確的道路。另一個 Roads API 功能「速限」則只提供給資產追蹤客戶使用。

每隔 5 到 15 分鐘對設有速限的地區進行取樣

為盡量減少對 Maps Roads API 速限服務的呼叫量,請將資產位置的取樣時間間隔設為 5 到 15 分鐘;確切的值則取決於資產的移動速度。針對未移動的資產,只要一個位置樣本就夠了,不需要多次呼叫。

建議您在累積到一定的資料量後,才呼叫速限服務;不要每收到一次行動資產的位置就呼叫 API。這樣有助於減少整體延遲時間。

管理地點介面集的耗用量

最佳化 Place Autocomplete 導入方式

善用 Place Autocomplete,發揮最大成本效益:

  • 使用 JavaScriptAndroidiOS Autcomplete 小工具中的欄位遮罩,只傳回您需要的地點資料欄位

  • 根據您的使用情形選取合適的計費方式。視導入方式是否使用 Autcomplete 工作階段而定,系統會向您收取「Autocomplete - Per Request」或「Autocomplete - Per Session」SKU 的費用。

想瞭解如何根據用途選擇合適的方案,請參閱 Place Autocomplete 費用最佳化最佳做法一文中的相關資訊及指引。

在 Place Details 和 Place Search 要求中傳回特定欄位資料

您可以自訂 Place Details 和 Place Search 要求,傳回用在應用程式的特定欄位資料。這些欄位可區分為「基本」、「聯絡」和「氣氛」類別。如果要求中沒有指定任何欄位,您會收到所有欄位資料。

Place Details 要求是依據您需要的資料類型和資料量計費,要求如果沒有指定任何欄位,就會以全額計費。詳情請參閱 Place DetailsPlace Search

使用 Geocoding API 降低費用成本

假如您的應用程式會處理由使用者輸入的地址,有時因為對方填寫不完整、拼字錯誤或格式有誤,系統就會難以確定地址。這時您可以使用 Place Autocomplete 協助產生明確地址,再使用地點 ID 取得地點位置。

如果您已有確切或幾近確切的地址,則可不必使用 Place Autocomplete,改用 Geocoding API 可以減少費用。詳情請參閱地理編碼地址最佳做法

Google 地圖平台配額的運作方式

每位客戶可發出的 API 呼叫次數皆設有限制,所有 API 皆然。上述配額設定是以每分鐘為基準。當您達到 API 的每分鐘呼叫配額後,下一分鐘才能再發出呼叫。

只有成功和導致伺服器錯誤的要求才會計入配額。未通過驗證的要求不會占用配額。

除了每分鐘的配額限制外,有些 Maps API 也設有每秒配額限制。這種以秒計算的配額限制無法保證一分鐘內全程保持一致用量,也無法阻止您用完該分鐘的配額;但可防止您在每分鐘開始的第一兩秒內,一口氣用完所有配額,並能避免因為用量突然暴增而造成服務中斷。為了因應上述配額限制的差異,請平均分配 QPS 的 QPM 用量,藉此規劃配額使用量和需求。

設有每秒配額限制的 GMP API 為 Directions API、Distance Matrix API、Elevation API、Geocoding API、Places API 和 Roads API。

請根據您的要求總數,預估任何 GMP API 產品的費用