介紹
最近開始刷一些書和題,此係列是介紹在讀Web最佳實踐
的一些收穫和體會。
web前端發展現狀
- 存在問題:
- 程式碼組織混亂
- 程式碼格式的問題突出
- 頁面佈局隨意
- 網站整體效能差,沒有意識到應用諸如快取,動態載入,指令碼壓縮,圖片壓縮等提高效能技術
- 推薦做法:
- 壓縮樣式表和指令碼檔案
- 減少HTTP請求次數
- 簡潔和符合W3C標準的HTML和CSS程式碼能減少瀏覽器解析的時間,加快渲染過程
- 頁面請求數量越少,相對頁面的載入速度更快
- 在JS程式碼中選擇效能更好的實現方案,如延遲載入,動態載入等技術;
延遲載入
<script type=”text/javascript” src=”" id=”my”></script> <script type=”text/javascript”> setTimeout(“document.getElementById(‘my').src='include/php100.php'; “,3000);//延時3秒 </script>複製程式碼
- 最後載入
- 引入外部js指令碼檔案時,如果放入html的head中,則頁面載入前該js指令碼就會被載入入頁面,而放入body中,則會按照頁面從上倒下的載入順序來執行javascript的程式碼,所以可以把js外部引入的檔案放到頁面底部,來讓js最後引入,從而加快頁面載入速度
動態載入
<scrīpt src='' id="s1"></scrīpt> <scrīpt language="javascrīpt"> s1.src="test.js" </scrīpt>複製程式碼
前端程式碼重構
- 刪除無用程式碼,精簡程式碼(不起作用的CSS樣式和廢棄的JavaScript函式)
- 前端程式碼規範化,把CSS程式碼放到獨立的檔案中,在JS定義區域性變數,把部分全域性變數改變成區域性變數
- 前端程式碼模組化,引入物件導向的思想來重構JavaScript程式碼,進一步明確公有介面和私有介面
- 提高頁面效能:
- 將部分不影響首頁展示的JS檔案延遲到頁面的載入後載入
- 刪除頁面中初始隱藏的區域,改為通過JS按需動態生成
- 頁面中的部分圖片延遲載入
- 調整CSS和JS檔案引用順序,即CSS在前,JS在後
- 給靜態檔案設定快取,使用CSS Sprite,合併背景圖
- 合併和壓縮釋出後的CSS和JS程式碼模組
- 前端重構最佳實踐
- 重構前一定要預測風險,最好先完善自動化測試程式碼
- 重構的目的和範圍要明確,提高程式碼的可維護性,可讀性和效能
- 最好先易後難,循序漸進。先修改諸如命名,格式等不涉及具體邏輯的內容
- 重構過程中要持續測試,在多個瀏覽器測試,確保重構的部分功能正確。切記大量重構後再進行測試,因為大量重構後基本很難記得重構的邏輯,也可能遺漏部分測試用例
- 效能提升,先進行檢測網站的整體效能並量化,找出效能瓶頸。重構過程中要持續監控效能,並進行對比
前端框架的使用
- 專案需求
- 調查專案是否需要AJAX操作
- 是否需要模組化
- 資料傳輸格式JSON或者XML
- 需要支援的瀏覽器
- 移動還是普通網站
- 需要的UI模組(模態視窗,滑塊控制元件,進度條,提示框,分割框,幻燈顯示,自動填充)
- 專案的特點
- 框架的特點
程式碼質量
- 編寫高質量,標準的HTML(標準校驗工具,ESLint, Flow, JSDoc, ts)
- 明確瀏覽器支援範圍
- Chrome和Safari IE Tester(IE相容測試工具
- 避免瀏覽器相容性的問題
- 先考慮更改方案,使用沒有相容問題的程式碼
- 考慮如何相容的問題
- 相容IE,使用IE特有的條件表示式(hack)
- 讓相容的程式碼獨立,提高程式碼的可維護性
- HTML5新特性
- 新標籤的相容,CSS3的相容,新增的API(使用html5shiv框架)
- CSS3本身不支援,會直接忽略
- 新增加的介面的使用,必須新增條件判斷(Modernizr)
- 多看Can I use
web效能分析
- YSlow,pagespeed
- 基於不同的規則評定網站整體效能評分
- 給出提高網頁效能的建議
- 統計頁面載入的元件
- 頁面的統計資訊檢視
- 相關效能分析工具集:Smush.it
- Chrome開發工具
- Network中可以檢視各資源請求和下載所用的時間
- Timeline可以檢視網頁渲染和互動過程中個步驟所花費的時間,從資源到JS的解析執行,樣式的應用和繪製
- Profiles中可以檢視網頁的CPU及記憶體佔有情況報告
- Audits中提供了各種資源和配置優化的建議和未使用CSS規則的列表
- 加快程式碼和資原始檔傳輸的方式
- CDN分發
- 快取(meta)
- 壓縮程式碼和資原始檔(最優)
- Gzip演算法(壓縮,header可以檢查是否開啟)
- JS壓縮(UglifyJS壓縮和優化,YUI Compressor 僅壓縮,Closure Compiler壓縮和優化)
- CSS(CSS Compressor,YUI Compressor)
- HTML(HtmlCompressor使用時仔細調查和測試,避免壓縮工具和破壞)
- 圖片資源壓縮(TinyPNG,JPEGmini,ImageOptim)
- Airbnb規範: github.com/airbnb/java…
- Eslint規範: eslint.org/docs/rules/
- Beachmark.js效能測試: benchmarkjs.com/docs#toc