從快取角度入手實現聊天室軟體原始碼的前端效能優化
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快取
- 【Mybatis系列】從原始碼角度深度理解Mybatis的快取特性MyBatis原始碼快取
- HTTP前端效能優化(壓縮與快取)HTTP前端優化快取
- 前端效能優化 之 瀏覽器快取前端優化瀏覽器快取
- Android效能優化篇:從程式碼角度進行優化Android優化
- 從JDK原始碼角度看併發鎖的優化JDK原始碼優化
- 聊天室原始碼開發,如何實現前端渲染迴流與重排問題的優化?原始碼前端優化
- 從原始碼角度,帶你研究什麼是三級快取原始碼快取
- 前端效能優化(二)——瀏覽器快取機制前端優化瀏覽器快取
- 從原始碼入手探索koa2應用的實現原始碼
- MySQL 效能優化之快取引數優化MySql優化快取
- 遊戲陪玩原始碼前端效能優化,開發階段可採取的措施遊戲原始碼前端優化
- tp5+ajax+快取實現聊天室快取
- Java面試題 從原始碼角度分析HashSet實現原理?Java面試題原始碼
- 做好陪玩系統原始碼的前端效能優化,提升系統效能原始碼前端優化
- 從案例分析如何優化前端效能優化前端
- 在前端效能優化中應用HTTP快取的三部曲前端優化HTTP快取
- myBatis原始碼解析-二級快取的實現方式MyBatis原始碼快取
- 從OnTrimMemory角度談Android程式碼記憶體優化Android記憶體優化
- mongodb核心原始碼實現及效能優化系列:Mongodb write寫(增、刪、改)模組原始碼實現MongoDB原始碼優化
- 婚戀app原始碼開發,如何實現介面效能優化?APP原始碼優化
- 教你編寫 Node.js 中介軟體,實現服務端快取(附demo原始碼)Node.js服務端快取原始碼
- 聊天室軟體原始碼中封裝一個金額輸入框元件的實現原始碼封裝元件
- 【前端效能優化】vue效能優化前端優化Vue
- Web 效能優化:理解及使用 JavaScript 快取Web優化JavaScript快取
- 從 YYCache 原始碼 Get 到如何設計一個優秀的快取原始碼快取
- 相親交友原始碼前端效能優化,通常使用哪些手段?原始碼前端優化
- MySQL 資料庫效能優化之快取引數優化MySql資料庫優化快取
- 從原始碼的角度來談一談HashMap的內部實現原理原始碼HashMap
- 前端效能優化 —— 前端效能分析前端優化
- 【面經】面試官:做過效能優化的工作嗎?你會從哪些方面入手做效能優化呢?面試優化
- 優化先從哪裡入手呢?優化
- 實現SpringBoot + Redis快取的原始碼與教程Spring BootRedis快取原始碼
- Lfu快取在Rust中的實現及原始碼解析快取Rust原始碼
- Android開發優化之——從程式碼角度進行優化Android優化