從快取角度入手實現聊天室軟體原始碼的前端效能優化
const { timing } = window.performance// 計算資源傳輸耗時const tcpTimes = (timing.connectEnd - timing.connectStart)/1000// 計算dom渲染耗時const domTimes = (timing.domComplete - timing.domLoading)/1000
// 快取物件的建立應該使用單例模式——全域性只能有一個快取物件。if(!window.mycache){ window.mycache = function(){ window.cache = {}; window.cachArr = []; return function(){ get:function(api){ return new Promise((resolve, reject) => { if(cache[api]){ resolve(cache[api]) }else{ if(localStroage.getItem(api)){ resolve(JSON.parse(localStroage.getItem(api))); }else { this.set(api).then(res=>{ var name = ''; if(res.data.ishot){ if(cacheArr[1].length>4){ name=cacheArr[1].shift(); localStroage.removeItem(name) } localStroage.setItem(api, Json.stringify(res)); cacheArr[1].push(api) }else { if(cacheArr[0].length>3){ name = cahceArr[0].shift(); delete cache[name]; } cache[api] = res; cacheArr[0].push(api); } resolve(res); }) } } }) }, set:function(api){ return axios.get(api); }, remove:function(api){ delete cache(api); } } }}
if(!window.mycache){ window.mycache = function(){ window.cache = {}; window.cacheArr = []; return { get:function ( api ) { var state = 0; var stateHandler = [ function(resolve,reject) { resolve(cache[api]); }, function(resolve,reject) { resolve(JSON.parse(localStorage.getItem(api))); }, function(resolve,reject) { this.set(api).then((res) => { var type = 0; var name = cacheArr[type].shift(); if(res.data.ishot){ type == 1; name = cacheArr[type].shift(); if(cacheArr[1].length>4){ localStorage.removeItem(name); } localStorage.setItem(api,JSON.stringify(res)); } else { if(cacheArr[0].length>3){ delete cache[name]; } cache[api] = res; } cacheArr[type].push(api); resolve(res); }) } ] return new Promise((resolve,reject)=>{ if(localStorage.getItem(api)){ state = 1; } if(!cache[api] && !localStorage.getItem(api)){ state = 2; } stateHandler[state].call(this, resolve, reject); }) }, set:function(api){ return axios.get(api); }, remove:function(api){ delete cache(api); } } }}
<template>...</template><script>export default { date() { return { goodInfo: {} } }, mounted: function(){ mycahce.get('/api/'+this.$route.params.goodApi).then(res=>{ this.goodsInfo = res.data }) }}</script>
var ws = new Websocket();ws.onmessage=(data)=> { if(data.api){ mycache.remove(api); }}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2795570/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實現語音社交原始碼介面效能優化,從索引入手原始碼優化索引
- 從前端角度理解快取前端快取
- 前端效能優化之快取技術前端優化快取
- 前端效能優化之HTTP快取策略前端優化HTTP快取
- 前端效能優化 之 瀏覽器快取前端優化瀏覽器快取
- HTTP前端效能優化(壓縮與快取)HTTP前端優化快取
- 聊天室原始碼開發,如何實現前端渲染迴流與重排問題的優化?原始碼前端優化
- 前端效能優化(二)——瀏覽器快取機制前端優化瀏覽器快取
- 從原始碼角度,帶你研究什麼是三級快取原始碼快取
- 實現SpringBoot + Redis快取的原始碼與教程Spring BootRedis快取原始碼
- tp5+ajax+快取實現聊天室快取
- 遊戲陪玩原始碼前端效能優化,開發階段可採取的措施遊戲原始碼前端優化
- 做好陪玩系統原始碼的前端效能優化,提升系統效能原始碼前端優化
- myBatis原始碼解析-二級快取的實現方式MyBatis原始碼快取
- 婚戀app原始碼開發,如何實現介面效能優化?APP原始碼優化
- 聊天室軟體原始碼中封裝一個金額輸入框元件的實現原始碼封裝元件
- 教你編寫 Node.js 中介軟體,實現服務端快取(附demo原始碼)Node.js服務端快取原始碼
- Java面試題 從原始碼角度分析HashSet實現原理?Java面試題原始碼
- 【前端效能優化】vue效能優化前端優化Vue
- mongodb核心原始碼實現及效能優化系列:Mongodb write寫(增、刪、改)模組原始碼實現MongoDB原始碼優化
- Web 效能優化:理解及使用 JavaScript 快取Web優化JavaScript快取
- 相親交友原始碼前端效能優化,通常使用哪些手段?原始碼前端優化
- 【效能優化】quicklink:實現原理與給前端的啟發優化UI前端
- 從原始碼的角度來談一談HashMap的內部實現原理原始碼HashMap
- Lfu快取在Rust中的實現及原始碼解析快取Rust原始碼
- 優化直播app原始碼介面效能,我們可以採取的手段優化APP原始碼
- 如何實現相親交友原始碼的CPU效能優化?解決方案梳理原始碼優化
- 前端效能優化—js程式碼打包前端優化JS
- 優化先從哪裡入手呢?優化
- 從原始碼角度看ContentProvider原始碼IDE
- 【面經】面試官:做過效能優化的工作嗎?你會從哪些方面入手做效能優化呢?面試優化
- 從原始碼的角度再學「Thread」原始碼thread
- 【譯】Web 效能優化:理解及使用 JavaScript 快取Web優化JavaScript快取
- [譯]谷歌Web效能優化系列:HTTP 快取(中英)谷歌Web優化HTTP快取
- 前端效能優化前端優化
- 前端效能優化原理與實踐前端優化
- 2022 前端效能優化最佳實踐前端優化
- Mybatis原始碼分析(七)自定義快取、分頁的實現MyBatis原始碼快取