前端、客戶端主要是負責構建和用戶打交道的界面,也就是 UI(user interface),而構建 UI 須要在不一樣的位置顯示文字、圖片、視頻等等,要分紅不一樣的區塊和頁面,爲了簡化構建 UI 的過程,前端、客戶端都提供了相應的佈局方案,甚至還提供了 DSL 來簡化佈局的描述,好比前端的 html、css,安卓的 xml 都是用來簡化 UI 描述的 DSL。css
基於這些佈局方案,咱們能夠快速構建出應用的界面,可是有的時候這些佈局方案不適用,就須要本身繪製,這時候就要經過 canvas、webgl 的方式來繪製更靈活的 2d、3d 視圖。安卓、ios等也提供了 canvas 的 api。html
繪製界面總體上就分爲這兩種,一種是基於各平臺的佈局方案的,一種是本身繪製,前者經常使用來作應用開發,後者經常使用來作遊戲開發和一些可視化。這兩種構建UI 的方式區別仍是挺大的,應用開發、遊戲(可視化)開發是兩條不一樣的路。前端
基於瀏覽器的 dom 和 css 的佈局方案的,也就是基於 dom 的,可使用一系列 dom api 來操做 dom,而後從新佈局和繪製,經過這種方式來作各類交互。ios
而不基於 dom 的繪製方案,也會維護一套對象體系,好比 stage、sprite 等,而後在修改了對象的屬性以後,從新繪製到 canvas。程序員
繪製時須要各類資源還有數據,而提供這些資源和數據的就是後端,後端經過 http、websocket 等方式來傳輸繪製須要的資源和數據,資源存在靜態服務器,託管在 CDN,數據都存在數據庫裏,根據不一樣的請求參數來進行資源的 CDN 的查找和數據的 CRUD,而後提供給前端。web
隨着應用規模的上升,後端的提供數據的服務器和提供資源的 CDN 都會作分佈式,經過部署在不一樣地區的多臺機器來保證效率和穩定。數據庫
這就是 web 應用運行的基本流程。canvas
從開發到部署運行是有個過程的,這個過程就是軟件工程的生命週期,從一次開發完全部功能的瀑布,到快速迭代的敏捷,從手動執行構建和部署,到徹底自動化的 devops,工程效率是愈來愈高的,這是一個必然的趨勢。後端
做爲 web 應用的開發者,要掌握前端的兩種繪製界面的方式,掌握後端的數據庫和 CRUD 以及提供接口給前端,掌握 CDN 的部署、後端服務的部署,若是應用規模大了之後還要掌握各類中間件和分佈式的技術。此外,還要掌握 devops 的自動化的工具鏈。這些技能掌握以後,就是一個全棧開發者了。api
在完成功能的基礎上,對於比較複雜的場景,須要作代碼的設計,也就是架構,保證隨着迭代代碼複雜度不會失控。相對來講,後端的複雜場景多一些,前端相對較少,因此後端談架構比較多,但前端也有一些複雜場景須要架構設計,好比微前端,好比 vscode 的 ioc、service、多進程劃分等。
從可以完成基本功能的全棧開發,到能處理複雜場景的技術架構,就是web開發程序員的成長路徑了。