在查看JQuery延遲承諾的潛在用例時,我遇到了緩存作爲潛在用途之一。這帶來了以下問題:在使用現代瀏覽器和智能客戶端(JQuery,任何現代MVC等)時,我甚至不必擔心自己緩存什麼?我正在使用MEAN堆棧,並且我認爲緩存確實發生在默認情況下。標題中有一個Etag字段,用於確保服務器不會兩次發送相同的信息。第二次,客戶端將得到空響應主體的304代碼。那麼是否有用例需要在前端手動實現緩存?謝謝!使用JQuery推遲承諾進行緩存
1
A
回答
1
Promises的整個概念旨在簡化JavaScript程序員異步計算的處理。我可以想象一個有效的用例,當你用拒絕的承諾提供一些預定義的數據時,但這不是你所說的「緩存」。
如果您有一個延遲對象來處理對異步API的某種請求,則由您來實現靜態數據的緩存層,它可能是您的.then()
函數的一部分。瀏覽器會像您在代碼中那樣向API發送儘可能多的請求,並且服務器將響應相同數量的響應,除非它具有自己的緩存層。
Here is an example使用Memoization緩存來自異步計算的數據。
// *specialized* function for, say, network requests,
// where caching is desired. In this case, we're caching
// promises by the URL they're fetching
var fetch = (function() {
var cache = {};
return function (url) {
cache[url] = cache.hasOwnProperty(url) ? cache[url] : new Promise(
/* request magic goes here */
);
return cache[url];
};
});
TL:DR
你不使用承諾緩存,你實現你自己的緩存層爲您的異步計算(可以使用該記憶化模式)。如果您使用Deferred對象作爲常規回調,則無關緊要。
相關問題
- 1. 使用jQuery推遲承諾
- 2. jQuery:推遲/承諾
- 3. jQuery的推遲和getScript的承諾
- 4. jQuery包裝推遲和承諾
- 5. jQuery推遲/承諾與許多getJSON
- 6. AngularJS推遲的承諾
- 7. 幫助AJAX承諾/推遲
- 8. 在Aurelia中使用承諾進行數據檢索和緩存
- 9. jQuery推遲承諾執行不按順序?
- 10. 如何使用jQuery推遲承諾按順序執行許多任務?
- 11. 函數中的延遲承諾不推遲函數的執行
- 12. 所有jQuery推遲/承諾可能的用途
- 13. angularjs延期承諾不推遲
- 14. 推遲承諾價值不更新/解決/推遲
- 15. 適合使用期貨和承諾進行延遲初始化?
- 16. AngularJS緩存的承諾
- 17. 使用jQuery推遲或承諾等待多個$ .post調用完成
- 18. AngularJS範圍變量不在jQuery中更新承諾/推遲
- 19. 打破Jquery推遲或承諾的功能
- 20. 承諾或推遲多個事件(使用自定義事件)
- 21. 使用承諾到foreach循環內推遲延續
- 22. 延遲承諾鏈
- 23. 使用承諾進行順序處理
- 24. 如何使用TestScheduler承諾和延遲?
- 25. 緩存承諾使用的NodeJS導致未處理的承諾排斥的Node.js
- 26. 推遲/承諾推動違反德米特法律嗎?
- 27. 簡單的承諾隊列:q.all解決之前推遲承諾解決
- 28. 使用pjax進行HTTP緩存(jQuery-pjax)
- 29. Jquery推遲執行
- 30. jQuery推遲的承諾似乎不適用於打開新窗口
你可能會發現這個演示很有趣:http://www.slideshare.net/RayBellis/memoizing-withindexeddb – Alnitak
你並不總是想緩存確切的服務器響應 - 通常你想要緩存部分數據,或者處理的信息。 –