閒談Web前端
原創文章 作者 Jerry
產品C端屬性決定了,前端技術棧的橫向跨度較大,前端應用高可用性要求高。目前開發平臺有IOS、Android、React-native/Weex/Flutter/Cordorwa、Web, 開發語言以Java、javascript、Object-C為主。
如何理解前端,如下圖所示:
這是一個典型的中臺-小前端的模式,Native提供中臺輸出,Web、ReactNative提供業務支援
Web端開發人員,需要關心三個互動,兩個相容性:
-
使用者互動
- 使用者互動是基於人機互動原則、產品架構,而給出的設計原型。
- 使用者互動方案會因結果倒逼而進行調整,例如:
接入第三方web頁面A,期望A作為子流程展現在我們的站點B中,並且B互動過程中 可以與A的流程進行溝通。受限於安全往往作為非法者不允許在B中直接操作A中元素,此時建議將A以彈窗形式展示,處理完A流程直接關閉 在B中繼續下一步流程。這樣即兼顧了美感、流程設計更合理。所以Web開發在弱場景下實現業務需求,需要反饋出問題,給出建議。
-
後臺互動
- Web開發人員,後臺互動過程減少互動次數、明確需要資料,減少冗餘資料返回、優化錯誤處理
-
APP互動
- Web開發需要定義出具體入參、出參,儘量複用已有介面。
-
系統相容性
- C端產品,面向最廣大使用者,系統相容性需要考慮不同廠商瀏覽器相容性、瀏覽器版本相容性、APP平臺相容性。瀏覽器相容性可通過轉譯、墊片獨立解決,平臺相容性依賴APP開發者提供解決方案,web端配合。
-
API版本相容性
- API版本相容性,後臺API、APP API。後臺API暫時不區分版本處理,只需要配合介面優化。APP需要考慮版本碎片化,新增APP介面方案對於舊版本APP如何處理。
-
互動設計是設計人員根據業務需求,結合各端需要和限制而商討出的約束,確定的輸入給出確定的輸出。
-
?介面即文件,好的介面約束,可以降低各端複雜度和協作難度。
技術棧
-
HTML5(簡單介紹比較有用的技術點)
- PostMessage:解決跨域、視窗通訊問題
- LocalStorage/SessingStorage:Web端資料儲存
- Canvas:繪製圖形、HTML轉PDF
- Video/audio: 播放流媒體
- Input: placehoder、輸入型別number/date/text/passwrod、長度min/max、disabeld
- requestAnimationFrame
- WebGL
- IndexDB
- .....
-
Sass/less/Css
-
盒子模型及不同瀏覽器差異
-
移動端適配方案:rem、vm
- rem:通過動態計算螢幕尺寸和設計尺寸的比例,來設定HTML根節點的字型大小,全域性樣式渲染是根據根節點字型適配
- vm:基於視區的百分比
-
樣式模組設計
- 通用性樣式抽取,模組化引入
- 樣式預處理postCss
-
-
Ajax/fetch
- Axios請求庫基於xmlHttpRequest封裝,常用於網路資源請求的場景。
-
抽象出Axios例項,通過配置化方式根據不同的場景,初始化不同的網路請求物件 例如:web實現API server A和 API server B後臺互動,後臺定義了不同的互動規則
const axios = require('axios'); export const axiosA = axios.create('https://server.a.com',{ baseURL:"https://exampleA.api.com" }) export const axioB = axios.create('https://server.a.com',{ baseURL:"https://exampleB.api.com" }) 複製程式碼
-
- fetch介面抽象出了Headers、Request、Response物件。
- Axios請求庫基於xmlHttpRequest封裝,常用於網路資源請求的場景。
-
DOM/BOM API
- DOM增刪改查介面
- DOM事件流,事件捕獲、事件目標、事件冒泡
- BOM瀏覽器互動介面,路徑導航、瀏覽器資訊查詢、base64轉換、螢幕資訊
-
ES6等語法糖
- Object、const/let、解構、Promise、class、async/await
-
React
-
生命週期
- 建立週期 componentWillMount render componentDidMount
- 更新週期
- 銷燬 compoentWillUnmount
-
父子通訊/兄弟通訊
- 父子通訊元件間傳值,資料單向流動,
- 兄弟通訊,通過共同的父元件管理狀態同步資訊
-
狀態管理,全域性狀態管理、元件狀態管理
- 全域性狀態:提示框、路由、許可權管理
- 元件狀態管理:頁面資料、互動效果
-
高階元件設計
-
通用性UI元件設計
-
元件複用性
-
DOM樹更新機制
-
-
React-router
- react-router設計理念
- 元件化設計
- 基於路由的程式碼分割
-
Redux
- Redux設計理念
- 共享資料的管理
- 資料一致性設計
-
Antd/Antd-mobile
- 定製化使用
- 按需載入
-
echart
- 前端資料模型設計,元件設計
-
Babel
- Babel 6/Babel 7
- Presets/Plugins/Transform/Polyfill
-
Eslint
- 程式碼風格校驗 airbnb
- 使用方式 打包器配置使用 IDE編輯器配置使用
-
webpack
- 基礎配置
- 外掛使用
- 定製本地化開發環境
- 打包分析
-
npm/yarn
- npm包開發規範
- yarn使用場景
- nrm
- nvm
- 映象切換
-
git
- git開發流程
- git使用技巧
- 合併程式碼,解決衝突
- git輔助理解
-
Browser Environment
- 瀏覽器安全措施 同源策略 內容安全保護策略
- 瀏覽器工作原理
- 瀏覽器輔助工具
-
CommonJS規範
- 演變歷史
-
HTTP協議 應用層協議,基於TCP/IP通訊協議傳輸資料。HTTP訊息格式:請求行、請求頭部、空行和請求資料四個部分組成。
- cache 用於提高Web效能,首先要理解快取的儲存策略、失效策略、快取對比策略。
- cookie
- CORS
- Session
- HTTP各個版本
- CSP
- HTTP狀態碼
- HTTP Method
- HTTP Headers
-
Nginx
- 反向代理與正向代理
- 前端使用詳解 單頁應用配置路徑匹配規則 使用者請求頭資訊透傳 gizp配置 代理轉發
-
Jekins
-
Jekins整合步驟
-
多環境詳解
-
-
UI框架
- Bootstrap
- jQuery
-
Web框架
- React
- Vue
- Angular
-
第三方庫
- lodash
- moment
- Crypto-js
- xlsx
- codemirror
- medium-editor
- shelljs
- yeoman
-
Webview
- webview基礎概念
- 不同平臺差異
- 系統不同版本差異
- 跨平臺通訊方式
-
Typescript/Flow
- 使用場景 大前端團隊協作、無介面渲染、中臺-小前端模式協作
-
SEO友好
- 搜尋爬蟲
- 社交平臺分享
- 服務端渲染
- 富媒體物件
-
License MIT\BSD,瞭解開源license有助於我們在選取開源框架過程避開版權風險