Angularjs中的緩存以及緩存清理

来源:https://www.cnblogs.com/shsxt/archive/2018/03/29/8671329.html
-Advertisement-
Play Games

寫在最前面:這篇博文是2篇文章組成,詳細介紹了Angularjs中的緩存以及緩存清理,文章由上海尚學堂轉載過來,歡迎大家閱讀和評論。轉載請註明出處,謝謝! 一個緩存就是一個組件,它可以透明地儲存數據,以便以後可以更快地服務於請求。多次重覆地獲取資源可能會導致數據重覆,消耗時間。因此緩存適用於變化性不 ...


寫在最前面:這篇博文是2篇文章組成,詳細介紹了Angularjs中的緩存以及緩存清理,文章由上海尚學堂轉載過來,歡迎大家閱讀和評論。轉載請註明出處,謝謝!

 

 

一個緩存就是一個組件,它可以透明地儲存數據,以便以後可以更快地服務於請求。多次重覆地獲取資源可能會導致數據重覆,消耗時間。因此緩存適用於變化性不大的一些數據,緩存能夠服務的請求越多,整體系統性能就能提升越多。
 

 1、 $cacheFactory 簡介 

  

$cacheFactory 是一個為所有Angular服務生成緩存對象的服務。在內部, $cacheFactory 會創建一個預設的緩存對象,即使我們並沒有顯示地創建。

要創建一個緩存對象,可以使用 $cacheFactory 通過一個ID創建一個緩存:

var cache = $cacheFactory('myCache');

這個 $cacheFactory 方法可以接受兩個參數:

cacheId (字元串):這個 cacheId 就是創建緩存時的ID名稱。可以通過 get() 方法使用緩存名稱來引用它。

capacity :這個容量描述了在任何給定時間要使用緩存存儲並保存的緩存鍵值對的最大數量。

 

2、 緩存對象

緩存對象自身有下列這些方法可以用來與緩存交互。

info() : info() 方法返回緩存對象的ID、尺寸和選項。

put() : put() 方法允許我們把任意JavaScript對象值形式的鍵(字元串)放進緩存中。cache.put("hello","world");

put() 方法會返回我們放入緩存中的值。

get() : get() 方法讓我們能夠訪問一個鍵對應的緩存值。如果找到了這個鍵,它會返回它的值;如果沒有找到,它會返回 undefined 。cache.get("hello");

remove() : remove() 函數用於在找到一個鍵值對的情況下從緩存中移除它。如果沒有找到,它就會返回 undefined 。cache.remove("hello");

removeAll() : removeAll() 函數用於重置緩存,同時移除所有已緩存的值。

destory() : destory() 方法用於從 $cacheFactory 緩存註冊表中移除指定緩存的所有引用。

 

3、$http中的緩存

  $http()方法允許我們傳遞一個cache參數。當數據不會經常改變的時候,預設的$http緩存會特別有用。其中,預設的$http緩存對象是 var cache = $cacheFactory('$http'); 可以這樣設置它

 

$http({
     method: 'GET',
     url: 'api/user.json',
     cache: true
})

  其中,緩存的鍵值為url, var userCache = cache.get('api/user.json') 


4、自定義緩存

  通過自定義的緩存來讓$http發起請求也很簡單,只需把cache值設為對應緩存對象名稱即可

 

$http({
     method: 'GET',
     url: 'api/user.json',
     cache: myCache
})

 

  或者通過config配置來設置每個$http請求的緩存對象,而不必像上面的例子中,往每一個$http請求中加入配置

app.config(function($httpProvider){
    $httpProvider.defaults.cache = $cacheFactory('myCache',{capacity: 20})

 

  其中,capacity會使用"近期緩存最久未使用演算法",就是說,加如緩存容量為20,現在已經緩存了緩存20個,當第21個想要被緩存的時候,最久最小未被使用的緩存鍵值對會被清除,以便騰出空間容納第21個緩存。


先講到這裡,接下來再看看《【上海前端培訓】Angularjs中的緩存清理》,

一、清除模板緩存

 

[javascript] view plain copy  
  1. .run(function($rootScope, $templateCache) {    
  2.             $rootScope.$on('$routeChangeStart', function(event, next, current) {    
  3.                 if (typeof(current) !== 'undefined'){    
  4.                     $templateCache.remove(current.templateUrl);    
  5.                 }    
  6.             });    
  7.         });   
  8. 上海前端培訓  shsxt.com/html5


二、html添加隨機參數

 

[javascript] view plain copy  
  1. .state("content", {  
  2.                url: "/",  
  3.                views:{  
  4.                    "bodyInfo":{templateUrl: 'tpls/bodyInfo.html?'+ +new Date(),  
  5.                        controller:'bodyInfoCtrl'},  
  6.                    "header":{templateUrl: 'tpls/header.html?'+ +new Date(),  
  7.                        controller:'headerCtrl'  
  8.                    },  
  9.                    "footer":{templateUrl: 'tpls/footer.html?'+ +new Date(),  
  10.                        controller:'footerCtrl'  
  11.                    }  
  12.                }  
  13.             })  
[html] view plain copy  
  1. <link rel="stylesheet" href="stylesheets/main.css?version=1.0.3">  



三、清除route緩存

 

[javascript] view plain copy  
  1. .config(['$stateProvider', '$urlRouterProvider','$locationProvider','$httpProvider',function($stateProvider, $urlRouterProvider,$locationProvider,$httpProvider) {  
  2. //         $urlRouterProvider.when("", "/home");  
  3.             $urlRouterProvider.otherwise('/');  
  4.              if (!$httpProvider.defaults.headers.get) {  
  5.               $httpProvider.defaults.headers.get = {};  
  6.             }  
  7.             $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';  
  8.             $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';  
  9.             $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';  
  10. 上海前端培訓  shsxt.com/html5

對於Angularjs中的緩存介紹,推薦閱讀《【上海前端培訓】Angularjs中的緩存》;如需更多前端技術文章,請點擊 上海前端培訓


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JavaScript介紹: ①、JavaScript是一種解釋性的,基於對象的腳本語言。 ②、JavaScript是一種輕量級的編程語言,可以嵌入到html頁面中,由瀏覽器來解釋執行。 ③、JavaScript是一種基於對象和事件驅動並具有相對安全性的客戶端腳本語言,主要用於創建具有交互性較強的動態 ...
  • JavaScript是一種最初由Netscape的LiveScript發展而來的面向對象的Web腳本語言,被ECMA國際定義為國際化標準——ECMAScript。JavaScript具有使用局限性。在Web方面,其必須與各種DOM技術結合才能發揮作用。因此,一些具有開拓創新精神的開發者們便開發出了各 ...
  • 自製了一個 nodejs 應用的腳手架。 大致就是以上這些,詳細的項目可以去 github 上 clone 下來查看。【傳送門】 另外,因為是在做自己博客站點的時候,突然想起來需要一個腳手架,所以才有了這個衍生項目,博客站點的項目還在開發中,稍微多了一點東西。 大致就是這些,詳細的可以去 githu ...
  • jquery.qrcode.min.js是一款可以生成二維碼的插件,使用前提是先引入jquery,因為jquery.qrcode.min.js依賴jquery。 基本用法 1.引入js 2.構建容器 3.生成二維碼 這樣,一個二維碼就生成了,通過掃二維碼,可以方便的訪問本博客。 拓展講解 (1)qr ...
  • <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> /*標簽名查找,名稱相同,格式相同*/ span{ color: coral; } /*id名查找,名稱不可重覆*/ ...
  • <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> /*固定在頁面某一位置*/ #a{ width: 20px; height: 20px; background-co ...
  • 2月,Github上第二受歡迎的項目是Flutter。Flutter的第一個測試版本是作為2018年世界移動通信大會的一部分而開始的。 Flutter是一款移動UI框架,旨在幫助開發人員在iOS和Android上創建高質量的原生界面。Flutter是免費和開源的,就像Android SDK一樣,並且 ...
  • <form.../>中method屬性指定了該表單是以哪種方式提交請求,有兩種方式:GET請求方式和POST請求方式,預設是GET請求方式。兩種方式的區別:get方式的請求是在瀏覽器地址欄中輸入訪問地址所發送的請求,即他是通過地址欄傳輸的。在地址欄中可以看到請求參數名和值。且get參數有長度限制,傳 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...