一,本文分爲兩部分
- 普通項目優化
- vue項目優化
- 防止XSS與XSRF(安全性)
二,普通項目優化:
1、 頁面加載
- dns預解析
- 使用cdn
- 靜態資源的壓縮與合併
- 減小https請求
- 異步加載defer,async
- 服務端渲染ssr
- 多使用內存和緩存
2、 頁面渲染
- css放前面,js放後面
- 減小dom查詢,屢次使用的保存爲變量
- 減小dom操做,統一經過dom片斷操做
- 事件函數的節流和防抖
- 圖片懶加載
- 儘早進行操做,domcontentload與load
3、vue項目優化:
- 代碼層面優化
- webpack層面優化
- web層面優化
1、代碼層面優化
- Object.freeze(data);對於一些查詢類的頁面,調取接口回來後的數據可不進行數據劫持
- v-if和v-for不要在一塊兒使用。v-if的條件經過函數來處理
- v-for中加上key,對於虛擬dom樹查找提升性能
- computed和watch注意區分使用場景。前者是有緩存的。後者是監聽到數據變化後的回調無緩存
- created中發起請求,mounted鉤子中表明頁面dom加載完成能夠進行dom操做。
- 長列表性能優化,只渲染可視區域的列表
- 長表格性能優化,經過canvers來繪製表格
- 合理使用$nextTick去操做dom,適用於更新了數據立刻就要操做dom的場景
- 操做dom不要使用js原生的方式來操做。用vue提供的三種方式來操做 好比,ref、自定義指令el、事件中的話用e.target獲取dom
- 儘可能不要在前端進行大量的數據處理
- 合理使用keep-alive來緩存頁面數據,跳過created,mounted鉤子,他有本身特定的鉤子activted等
- 路由懶加載經過import配合箭頭函數,還有其餘的方式require
- 組件懶加載,異步加載
- 儘可能少用float,能夠用flex佈局
- 頻繁切換的使用v-show,不頻繁的使用v-if
- 不要在模板中寫過多的樣式
- 服務端渲染ssr,優化seo,與首屏白屏問題。
- 經過addEventListenr添加的事件,須要自行銷燬
- 把組件中的css提取成單獨的文件
- 少使用閉包與遞歸,遞歸可作尾遞歸的優化
- 使用字體圖標或者svg來代替傳統的Png等格式的圖片
- 在Js中避免「嵌套循環」和「死循環」
- 儘量的使用事件委託來處理事件的綁定,針對老項目jq
2、webpack層面優化
- 去除無用代碼treeShaking.
- babel編譯es6到es5的時候,會有多餘代碼產生
- 減少app.js的體積,提取公共代碼
- 減小vendor.js的體積,經過按需引入第三方庫,或者有些資源能夠經過script標籤引入
- 代碼切割,有一些組件不必都打包到一塊兒。
- 使用chunck
- 使用SouceMap,來還原線上代碼,更方便的去定位線上問題
- 構建結果,經過可視化插件,進行分析
- webpack對圖片進行壓縮等處理,
- 圖片可使用webp,優雅降級處理
- 編譯優化
- 模板預編譯,使用vue-template-loader,把模板編譯成渲染函數。
3、web層面優化
- 瀏覽器緩存的使用
- 開啓gzip壓縮
- CDN的使用,減小路由轉發的次數,就近訪問資源
- 使用chrome的性能分析工具,查找性能瓶頸
- dns預解析
- 靜態資源的壓縮與合併
- 減小https請求
- 異步加載defer,async
- 靜態資源和服務不要放在同一臺機器上。多個域名去並行加載解析
4、安全性
基本後端來作,防注入等css
@兩種前端
1. XSS跨站請求攻擊,
輸入時,插入一段腳本,來獲取用戶信息的cookievue
2. XSRF跨站請求未僞造,好比支付請求成一個圖片請求,固然如今都沒有這種的webpack
@解決方案:es6
1.XSS 前端替換關鍵字,建議後端也替換,如<>的替換,避免腳本的執行web
2. XSRF增長驗證流程,好比輸入密碼,指紋,短信驗證碼,人臉識別等。chrome