在過去一年中,Polymer 團隊花費了許多時間教導開發人員如何建立自己的元素。因此,生態系統快速成長,大部分都仰賴 Polymer 的 Core 和 Paper 元素,以及 Mozilla 團隊所建立的 Brick 元素。
隨著開發人員逐漸熟悉如何打造自己的元素,並開始思考建構應用程式,因此產生了一些問題:
- 您應該如何建構應用程式的 UI?
- 如何轉換不同狀態?
- 哪些策略可以提升成效?
- 請問你該如何提供離線體驗?
在 Chrome 開發人員高峰會中,我試著建立小型聯絡人應用程式,分析了自己的建構流程,藉此回答這些問題。問題如下:
結構
將應用程式拆分為可合併及重複使用的模組化元件,是網頁元件的主要用戶群。Polymer 擁有 Polymer (核心*) 與迴紋紙* 等小型元件,可以從 core-Tool 和 paper-icon-button 等小型元件輕鬆著手...
...並透過構圖的強大功能與任意數量的元素結合,以建立應用程式鷹架。
建立通用鷹架後,您就可以套用自己的 CSS 樣式,將其轉換成品牌特有的體驗。使用元件實現這個目標的好處,在於您可以同時利用相同的應用程式建構基本功能,打造截然不同的體驗。安排好鷹架後,您就可以繼續思考內容。
core-list
是特別適合處理大量內容的元素。
core-list
可以連結至資料來源 (基本上是物件陣列),且陣列中的每個項目都會印出範本例項。在範本中,您可以運用 Polymer 的資料繫結系統,快速進行內容連接作業。
轉場
隨著應用程式的多個部分設計與實作,下一項工作就是思考如何實際瀏覽這些區塊。
雖然這仍是實驗性元素,但 core-animated-pages
提供可插入的動畫系統,可用於在應用程式中轉換不同狀態。
不過,動畫只是遊戲的一半,應用程式必須將這些動畫與路由器結合,才能妥善管理網址。
網頁元件的轉送作業分為命令式和宣告式兩種變種版本。視專案需求而定,將 core-animated-pages
與任一方法結合可能會有效。
命令式路由器 (例如 Flatiron 總監) 可以監聽相符的路徑,然後指示 core-animated-pages
更新所選項目。
如果需要在路線比對後及下一節轉換完成前稍作作業,這項功能就非常實用。
另一方面,宣告式路由器 (例如 app-router) 可將路徑和 core-animated-pages
合併為單一元素,讓兩者的管理變得更加簡潔。
如要更精細的控制,可以查看類似更多轉送的程式庫。該程式庫可透過資料繫結與 core-animated-pages
搭配使用,或許還能為您提供這兩種做法的最佳效果。
效能
隨著應用程式的形狀越來越慢,您必須留意效能瓶頸,尤其是與網路相關的任何狀況,因為這通常是行動網路應用程式最慢的部分。
有條件載入 Web 元件 polyfill 是較簡單的效能成功的關鍵。
如果平台已取得完整支援,沒有理由支付所有費用!在新版 webcomponents.js 存放區的每個版本中,polyfill 也已細分為獨立檔案。當您需要有條件地載入部分 polyfill 時,這個方式就非常實用。
<script>
if ('import' in document.createElement('link')) {
// HTML Imports are supported
} else {
document.write(
'<script src=“bower_components/webcomponentsjs/HTMLImports.min.js"><\/script>'
);
}
</script>
此外,透過 Sense 等工具執行所有 HTML 匯入項目,也會帶來可觀的網路優勢。
Sense 會將匯入內容串連為單一套件,大幅減少應用程式發出的 HTTP 要求數量。
離線
不過,光是建構高效能的應用程式,並不能解決使用者的困境,也就是幾乎沒有網路連線,甚至完全沒有網路連線。換句話說,如果您的應用程式無法離線運作,就不是行動應用程式。現在您可以使用高度對齊的應用程式快取來離線資源,但未來,Service Worker 應該很快就會改善離線開發體驗。
Jake Archibald 最近發布了一流的 Service Worker 模式教戰手冊,不過我會協助你快速上手:
安裝 Service Worker 非常簡單。建立 worker.js
檔案,並在應用程式啟動時註冊該檔案。
請務必在應用程式的根目錄中找到 worker.js
,這樣才能攔截來自應用程式任何路徑的要求。
在工作站的安裝處理常式中,我會快取資源 (包括執行應用程式的資料) 的船載。
如此一來,如果使用者離線存取我的應用程式,就能享有至少一種備用體驗。
繼續!
網頁元件是網路平台的主要功能,而且目前仍在使用中。隨著使用者越來越常使用瀏覽器,我們也要仰賴開發人員社群的協助,找出建構應用程式結構的最佳做法。上述解決方案為我們提供協助,但還有更多值得學習之處。開始打造更優質的應用程式!