相親原始碼開發,從程式碼級別減少資料請求次數的實現
為了更好提升
相親原始碼的效能,我們需要對各種資源內容進行不同方面的優化。對使用者而言,優化可以讓相親原始碼的響應速度加快,載入更加迅速,可以帶來更好的使用體驗。
對於服務商而言,相親原始碼前端優化能夠減少頁面請求數量,寬頻所佔頻寬,有效的節省資源。今天我們就一起來了解一下為了減少相親原始碼中頁面資料請求次數如何進行程式碼級別優化。
程式碼級別:減少資料請求次數
優化思路
如何減少資料請求數量?我們可以通過請求佇列的方式,對邏輯進行優化。
經過優化,相親原始碼獲取資料的邏輯變成了如下的樣子:
1、當單元格傳送請求時,請求先新增ID,並通過ID快取callback方法,然後進入請求佇列,佇列管理器定時或者根據佇列中請求數量多少像服務端傳送請求包。
2、相親原始碼服務端接收到請求包後批量處理,處理後封裝新的返回包
3、前端接受到返回包後根據請求的唯一ID,呼叫對應的callback方法執行,完成單元格的請求。
使用此方法進行優化,優點是顯而易見的:
1、實現簡單,相親原始碼程式碼改動小,原本的ajax請求改為佇列呼叫即可,請求後的callbak無需修改。服務端新增一個新介面拆分請求即可。
2、根據實際場景設定請求頻率或者一次請求中資料的數量,兼顧更新頻率和相應次數。
應用例項
下面程式碼是GETNUMBERFROMSERVER的實現,該函式負責呼叫伺服器的getData介面,傳遞引數,獲取顯示內容並展示在單元格。為了確保非同步更新單元格的使用者體驗,這個函式源自SpreadJS的非同步函式。
1. var GetNumberFromServer = function () { 2. }; 3. GetNumberFromServer.prototype = new GC.Spread.CalcEngine.Functions.AsyncFunction("GETNUMBERFROMSERVER", 1, 2); 4. GetNumberFromServer.prototype.evaluate = function (context, arg1, arg2) { 5. fetch("/spread/getData?data="+arg1) 6. .then(function(response) { 7. return response.text(); 8. }) 9. .then(function(text) { 10. context.setAsyncResult(text); 11. }); 12. }; 13. GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction("GETNUMBERFROMSERVER", new GetNumberFromServer()); 14.
為了減少請求,我們首先需要使用一個快取物件存放請求資料,定時呼叫介面處理。
1. let callStack = {}; //收集請求資料 2. let callingStack = {}; //快取正在請求中的資料資訊 3. let callStackCount = 0; //請求數量,當作請求ID,用於區分請求內容 4. let timingId = 0; //用於判斷當前是否有定時器等待請求中
然後,我們定義新的佇列化請求方法,代替在函式中直接呼叫API介面。
1. 2. // data 請求資料 3. // context 非同步函式context, 網路請求結束後回撥時使用 4. // callback 回撥函式 5. function stackCall(data, context, callback){ 6. let id = callStackCount++; 7. callStack[id] = {}; 8. callStack[id].data = data; 9. callStack[id].context = context; 10. callStack[id].callback = callback; 11. 12. if(timingId === 0){ // 同時只有一個定時器 13. timingId = setTimeout(function(){ 14. callingStack = callStack; 15. callStack = {}; 16. 17. let newData = "" //合併請求資料,根據實際業務情況整理 18. for(let cId in callingStack){ 19. newData += (cId + "," + callingStack[cId].data + ";"); 20. } 21. 22. // 傳送請求,這裡模擬資料,傳送什麼返回什麼 23. fetch("/spread/getData?data=" + newData) 24. .then(function(response) { 25. return response.text(); 26. }) 27. .then(function(text) { 28. let resData = newData.split(";"); 29. let spread = designer.getWorkbook(); 30. spread.suspendPaint(); //暫定頁面繪製 31. 32. //解析返回的資料 33. for(let resId in resData){ 34. if(resData[resId]){ 35. let ress = resData[resId].split(","); 36. // 根據Id,獲取函式的context,呼叫callback回撥 37. callingStack[ress[0]].callback.call(null, callingStack[ress[0]].context, ress[1]) 38. } 39. } 40. spread.resumePaint(); //重啟統一繪製 41. timingId = 0; 42. }); 43. }, 1000) 44. } 45. }
經過這次優化,當相親原始碼頁面有大量非同步請求時,這些請求會放到佇列中,定時統一處理,一次重新整理。
此外,我們還可以使用SpreadJS的doNotRecalculateAfterLoad匯入選項,在首次載入時不計算,改用json中原始值;以及calcOnDemand開啟按需計算。進一步優化頁面初始化的速度和體驗。
1. json.calcOnDemand = true; 2. spread.fromJSON(json, { doNotRecalculateAfterLoad: true });
總結
以上便是“如何從相親原始碼的程式碼級別減少資料請求次數?”的全部內容,在相親原始碼的開發過程中滿足使用者的不同需求,提升使用者的使用體驗才能開發的關鍵,希望以上內容對大家有幫助。
本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2795784/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 相親交友原始碼開發,前端如何實現水印功能?原始碼前端
- 優雅地減少redux請求樣板程式碼Redux
- 相親交友原始碼中,音訊AAC解碼的實現程式碼原始碼音訊
- 相親交友原始碼開發,前端API如何請求快取?原始碼前端API快取
- 使用Egret外掛壓縮程式碼包體積,減少請求數量的實戰教程
- 前端巧用localStorage做“快取”,減少HTTP請求次數前端快取HTTP
- 相親交友原始碼實現程式內快取,提升高併發能力!原始碼快取
- 陪玩系統原始碼開發,不懂資料庫隔離級別的請進原始碼資料庫
- 在相親原始碼開發中,如何實現圓角及特殊圓角的使用?原始碼
- 相親交友原始碼實現相親直播間,移動終端的優化方案原始碼優化
- 如何開發陪玩系統原始碼的列表頁面,相關實現程式碼原始碼
- face 31減少http請求HTTP
- 相親原始碼開發,使用了哪些設計模式來優化業務程式碼?原始碼設計模式優化
- 相親交友原始碼開發中,Redis的三種限流方式原始碼Redis
- 原始碼分析Gateway請求轉發原始碼Gateway
- 23行程式碼實現一個帶併發數限制的fetch請求函式行程函式
- 各路大神 求群控 原始碼 二次開發?原始碼
- 原始碼級別的廣播與監聽實現原始碼
- 如何實現相親交友原始碼的CPU效能優化?解決方案梳理原始碼優化
- 如何在相親交友原始碼中實現正方形驗證碼輸入框?原始碼
- 控制請求併發數量:p-limit 原始碼解讀MIT原始碼
- 在相親原始碼的多人音視訊聊天中插入現場直播的實現方式原始碼
- 相親交友原始碼開發中會用到的幾種日期處理方法原始碼
- 不到50行程式碼實現一個能對請求併發數做限制的通用RequestDecorator行程
- 『 效率工具 』Spring Boot版的輕量級程式碼生成器,減少70%以上的開發任務Spring Boot
- 從 1 秒到 10 毫秒!在 APISIX 中減少 Prometheus 請求阻塞APIPrometheus
- 從微信小程式開發者工具原始碼看實現原理(二)- - 小程式技術實現微信小程式原始碼
- 相親原始碼的效能為何這麼重要,該怎樣實現優化?原始碼優化
- 搭建相親交友原始碼 ,API 介面統一格式返回的實現原始碼API
- 相親原始碼中移動支付的實現,沒有想象中那麼難原始碼
- 直播程式原始碼實現直播業務時必不可少的方面原始碼
- Sentinel原始碼解析之一次請求走進Sentinel原始碼
- TOMCAT 請求資料編碼亂碼 問題Tomcat
- 相親原始碼前端開發知識點,每天進步一點點原始碼前端
- Laravel 請求類原始碼分析Laravel原始碼
- 原始碼分析Retrofit請求流程原始碼
- axios原始碼分析——取消請求iOS原始碼
- axios原始碼分析——請求流程iOS原始碼