持續部署單頁應用的7大技巧
【編者按】本文作者為 Parker Selbert,主要介紹高效部署靜態託管應用的7大技巧,助你實現持續、安全且高效的交付流程。本文系國內 ITOM 管理平臺 OneAPM 編譯呈現。
單頁應用不僅能提供非常豐富的使用者體驗,而且為持續開發開闢了一個完全不同於以前的新途徑。將前端應用從伺服器分離,從而簡化團隊職責的劃分,是非常合理的策略。維護一個單獨的前端程式碼庫,允許團隊通過 API ,快速迭代應用特性、改善互動功能。
然而,交付靜態資源的過程並不都是如此順利的。在開始持續部署靜態資源之前,你的團隊必須注意託管和交付中的陷阱。 以下是一些有關高效部署靜態託管應用的技巧,幫助你實現持續、安全,以及最重要的,高效的交付流程。
1. 使用最先進的打包和部署工具
如果你的團隊已經決定單獨部署客戶端和伺服器程式碼,很有可能的是,伺服器並不是使用Node.js語言編寫的,但這並不能阻止你使用 Node.js 和 NPM 來構建和管理應用程式!你可以自由使用最先進的打包和開發工具,而不用管伺服器端採用了什麼框架。
一旦你的構建和測試過程不受伺服器框架限制,也就釋放了交付過程。一旦前端應用通過了整合測試,CI 伺服器就可以構建一個正式版(參見技巧2),直接交付並進行釋出(參見技巧5)。
2. 縮小,壓縮和源對映(Source Maps)是必不可少的
部署一個單頁應用遠不止上傳級聯碼到伺服器這麼簡單。你在為生產環境的 Web 框架部署資源時,一定會精打細算地節省位元組數,部署單頁應用也是如此,需要同等的注意力與投入。這意味著單頁應用必須儘可能縮小,壓縮,幷包含 源對映(source maps)。
任何主流的 JavaScript 構建工具,再加上少量的指令碼,都能幫助你交付出最優化的應用。
3. 優化程式碼和樣式交付
鑑於最近的趨勢是將檢視元件與樣式定義放在一起,這一點可能稍有爭議。但是,你需要權衡樣式和程式碼捆綁後的利弊。
通常,瀏覽器可以並行下載 CSS 和 JS 檔案,降低第一次載入後的繪製時間。如果所有的資源都捆綁在一起,是不可能提升效能的。當所有的樣式和程式碼都捆綁在一個大檔案內,客戶只能盯著空白的螢幕,等待資源下載。
雖然多個檔案會使交付過程稍顯複雜,但檔案縮小後帶來的效能優勢是值得我們這樣做的。
4. 單獨交付資源包
除非你是個極端的純粹主義者,每個打包應用都應該是由庫模組和應用程式碼組成的。通常,你的應用程式碼比庫模組更改得更為頻繁。當你提供巨大的級聯包時,客戶端被迫下載每一次更新,哪怕改動很小。應用程式包通常推送3MB 的資料量,這又需要下載大量的程式碼,而僅僅是因為幾行應用程式碼的更改。
為了避免這個問題,你應該將應用程式分成至少兩個資源包:一個包含級聯庫程式碼,另一個包含應用程式碼。未來如果實現 支援連線並行的HTTP / 2 協議,單個檔案可以並行傳送,這樣的部署就不再必要了。但是現在,資源包的分割將加快使用者獲得每個新發布版本的速度。
5. 善加利用內容分發網路(CDN)
使用內容分發網路釋出靜態應用。只要保留語義快取,CDN 就允許客戶端繼續指向相同的 URL。此外,在釋出新程式碼時,即使缺乏資源指紋,也支援執行主動失效。主動失效會更新每個邊緣伺服器(也就是向客戶端釋出應用的伺服器)上快取的應用版本。
要注意的是,主動失效可能延時,在 Amazon CloudFront 上需要 10分鐘或更多時間。這一不可預知的非同步行為,是釋出版本時需要額外留意的。
6. 連續性面前沒有版本
不要期望使用者會重新載入瀏覽器。假設一些使用者會執行舊版本的應用,並做好準備,處理一些已棄用功能的請求。將版本釋出看作是一個連續的變化,並決定你的釋出週期。
總會某一階段,繼續支援所有舊版本及它們可能包含的各種錯誤,是不切實際的。除非你部署的是一臺自助服務機,更新週期非常不頻繁,你可以放心地假設使用者會每週重新載入一次。
7. 逐步推出功能
使用功能標記逐步推出新功能。Ember 技術就是一個很好的例子,可以將功能和程式碼相繫結,但它是預設禁用的。程式碼在執行時動態產生,但是大多數人並不使用它。一旦通過測試人員或一小部分使用者的測試,你就可以釋出包含這一功能的新版本。
在釋出伺服器端程式碼時,通常也會使用同樣的方法,但是靜態託管單頁應用的風險更高。循序漸進的方法是至關重要的,因為回滾程式碼的速度取決於 CDN 的失效期。這意味著你若是釋出了一個錯誤版本,它至少在生產環境中執行10分鐘以上,而無法立即撤銷。
應用資源和伺服器程式碼若是繫結,部署單頁應用就變得既簡單又穩定。此外,你可以利用原生JavaScript 工具的優勢,而不管應用框架是什麼。核心是,伺服器/瀏覽器的關係是一個簡單的分散式系統。通過在伺服器端單獨部署單頁面應用,你的團隊可以獲得微系統架構帶來的靈活性,專注度以及優先度。
OneAPM Browser Insight 是一個基於真實使用者的 Web 前端效能監控平臺,能幫助大家定位網站效能瓶頸,實現網站加速效果視覺化;支援瀏覽器、微信、App 瀏覽 HTML 和 HTML5 頁面。想閱讀更多技術文章,請訪問 OneAPM 官方技術部落格。
本文轉自 OneAPM 官方部落格
原文地址:http://blog.codeship.com/continuously-deploying-single-page-apps/
相關文章
- 如何實現 Android 應用的持續部署?Android
- 持續整合持續部署持續交付_持續整合與持續部署之間的真正區別
- 持續整合、持續部署、持續交付、持續釋出
- 持續整合、持續交付、持續部署簡介
- 對持續整合、 持續交付、持續部署和持續釋出的介紹
- 談談持續整合,持續交付,持續部署之間的區別
- Jenkins持續部署-Windows環境持續部署探究1JenkinsWindows
- 淺談持續整合(CI)、持續交付(CD)、持續部署(CD)
- Azure Terraform(八)利用Azure DevOps 實現Infra資源和.NET CORE Web 應用程式的持續整合、持續部署ORMdevWeb
- Xcode 技巧 持續更新XCode
- 通過Docker容器執行持續整合/持續部署Docker
- Ccover在hudson持續整合中的應用
- 使用流水線外掛實現持續整合、持續部署
- 以 egg.js 為例的持續整合(CI)、持續部署(CD)JS
- 身份證識別技術的持續應用
- 持續整合及部署利器:GoGo
- 【持續部署】批量部署工具,總結、對比
- nginx + 一個埠 部署多個單頁應用(history模式)Nginx模式
- sql語句小技巧-持續更新SQL
- 加速Java應用開發速度3:單元/整合測試+持續整合Java
- 單頁面應用和多頁面應用
- 使用 Jenkins 建立微服務應用的持續整合Jenkins微服務
- 使用 Github Actions 持續釋出 Flutter 應用GithubFlutter
- 前端專案基於GitLab-CI的持續整合/持續部署(CI/CD)前端Gitlab
- CI/CD 持續整合部署實踐
- 微服務容器部署與持續整合微服務
- 持續整合、持續交付和持續部署有什麼區別?0基礎學習linux技能Linux
- 雲原生應用持續交付入門:基於雲效部署java應用到kubernetes叢集Java
- vue js 部分使用小技巧(持續更新)VueJS
- pixi.js持續渲染頁面JS
- 微信單頁應用的那些事
- 單頁應用的優缺點
- 持續部署微服務的實踐和準則微服務
- 持續部署 Microservices 的實踐和準則ROS
- vonic單頁面應用
- 持續程式碼質量管理-Sonar部署
- SpringBoot+Docker+Git+Jenkins實現簡易的持續整合和持續部署Spring BootDockerGitJenkins
- 前端:你要懂的單頁面應用和多頁面應用前端