1. 程式人生 > >h5+app快取清理外掛。

h5+app快取清理外掛。

用h5開發app的程式設計師朋友一定會遇到app用久了快取堆積的問題。我這邊話不多說直接上程式碼,程式碼註釋清晰,如有不恰當的地方,歡迎提出討論。

/*!
 *黃國燁([email protected]
 *  Date: 2017-10-15
 * 清除快取元件
 */
(function($) {
var _CacheClean = {
/**
* 獲取快取入口,總入口
*/
init: function() {
plus.nativeUI.showWaiting("正在計算快取...");
plus.cache.calculate(function(size) {
//通過URL引數獲取目錄物件或檔案物件
plus.io.resolveLocalFileSystemURL('_doc', function(entry) {
//alert("是否是資料夾物件="+entry.isDirectory);
var dirReader = entry.createReader();
dirReader.readEntries(function(entries) {
//alert('_doc檔案個數='+entries.length);
console.log('+檔案前size=' + size);
_CacheClean.getDirFileSize(entries, entries.length, 0, 0, size);
//size += getDirFileSize(entries,entries.length,0,0,size);
//console.log('+檔案後size='+size);
//for (var k = 0 ; k < entries.length ; k++) {
//var entriyTemp = entries[k];
//if(entriyTemp.isFile){
////獲取檔案的屬性
//entry.getMetadata( function ( metadata ) {
//console.log("metadata: " + k + '=' + JSON.stringify(metadata));
//var sizeNum = metadata.size ;
//size = size + sizeNum ;
//}, function () {
//alert( e.message );
//} );
//}
//
//}
//console.log('呼叫viewCache()==='+size);
//viewCache(size);
}, function(e) {
alert("Read directory  dirReader.readEntries failed: " + e.message);
});
}, function(e) {
mui.alert('plus.io.resolveLocalFileSystemURL-error=' + e.message);
});
});
},
/**
*遞迴獲取某個資料夾的各個檔案大小的總和 byte 
* @param {Object} entries 某個資料夾的檔案總和陣列物件
* @param {Object} len     資料夾的檔案個數
* @param {Object} k       當前是第i個檔案
* @param {Object} size    後面返回的檔案大小
* @param {Object} sizeYuan    後面返回的檔案大小
*/
getDirFileSize: function(entries, len, k, size, sizeYuan) {
len = Number(len);
k = Number(k);
size = Number(size);
sizeYuan = Number(sizeYuan);
var entriyTemp = entries[k];
if(entriyTemp.isFile) {
//獲取檔案的屬性
entriyTemp.getMetadata(function(metadata) {
var sizeNum = metadata.size;
size = size + sizeNum;
console.log(size + "====metadata: " + k + '=' + JSON.stringify(metadata));
if(len <= k + 1) {
console.log('getDirFileSize===' + size);
_CacheClean.viewCache(size + sizeYuan);
return;
} else {
k += 1;
_CacheClean.getDirFileSize(entries, len, k, size, sizeYuan);
}
}, function() {
alert(e.message);
});
} else {
if(len <= k + 1) {
console.log('getDirFileSize-else===' + size);
this.viewCache(size + sizeYuan);
return;
} else {
k += 1;
arguments.callee(entries, len, k, size, sizeYuan);
}
}
},
/**
*頁面上展示快取的大小 
* @param {Object} size 快取大小(byte)
*/
viewCache: function(size) {
var kbCache = Number(size) / 1024;
if(kbCache < 0.01) {
mui.toast('系統暫無快取');
plus.nativeUI.closeWaiting();
return;
}
var mbCache = Number(kbCache) / 1024;
if(kbCache < 20) {
kbCache = kbCache + '';
this.clearCacheAction(kbCache.substring(0, kbCache.indexOf('.') + 6), 'KB');
return;
}
if(mbCache < 2) {
kbCache = kbCache + '';
this.clearCacheAction(kbCache.substring(0, kbCache.indexOf('.') + 2), 'KB');
return;
}
mbCache = mbCache + '';
this.clearCacheAction(mbCache.substring(0, mbCache.indexOf('.') + 2), 'MB');
},
/**
* 清快取動作
* @param {Object} size 快取大小 
* @param {Object} danwei 單位
*/
clearCacheAction: function(size, danwei) {
if(plus.nativeUI) {
plus.nativeUI.closeWaiting();
}
mui.confirm('app現有系統快取' + size + danwei + ',是否立即進行清除?', '提示', btnArray, function(e) {
if(e.index == 0) {
plus.nativeUI.showWaiting("正在清理快取...");
//mui.toast('111')
plus.storage.clear();
plus.cache.clear(function(e) {
console.log('刪除快取成功==,呼叫clearDirCache' + JSON.stringify(e));
_CacheClean.clearDirCache();
});


}
});
},
/**
*清理_doc目錄下的檔案 
*/
clearDirCache: function() {
plus.io.resolveLocalFileSystemURL('_doc', function(entry) {
//alert("是否是資料夾物件="+entry.isDirectory);
var dirReader = entry.createReader();
dirReader.readEntries(function(entries) {
_CacheClean.clearDirCacheAction(entries, entries.length, 0);
}, function(e) {
alert("Read directory  dirReader.readEntries failed: " + e.message);
});
},
function(e) {
mui.alert('plus.io.resolveLocalFileSystemURL-error=' + e.message);
});
},
/**
* 清除_doc快取
* @param {Object} entries doc檔案
* @param {Object} len doc檔案個數
* @param {Object} k 當前第幾個0開始
*/
clearDirCacheAction: function(entries, len, k) {
len = Number(len);
k = Number(k);
var entriyTemp = entries[k];
if(entriyTemp.isFile) {
entriyTemp.remove(function(entry) {
plus.console.log("Remove succeeded");
if(k + 1 >= len) {
_CacheClean.restarApp();
} else {
k += 1;
_CacheClean.clearDirCacheAction(entries, len, k)
}
}, function(e) {
alert(e.message);
if(k + 1 >= len) {
restarApp();
} else {
k += 1;
arguments.callee(entries, len, k)
}
});
} else {
if(k + 1 >= len) {
this.restarApp();
} else {
k += 1;
arguments.callee(entries, len, k)
}
}
},
/**
* 重啟該應用 
*/
restarApp : function(){
if(plus.nativeUI){
plus.nativeUI.closeWaiting();
}
    mui.alert('清除快取成功,請點選“確定”重啟應用',function(){
    plus.nativeUI.showWaiting("正在關閉...");
    window.setTimeout(function(){
    plus.runtime.restart();
    },1000);
    });
}
};
_App.cacleClean = _CacheClean;
console.log('HGY-clen-cache init finished!');
}(mui))

相關推薦

h5+app快取清理外掛

用h5開發app的程式設計師朋友一定會遇到app用久了快取堆積的問題。我這邊話不多說直接上程式碼,程式碼註釋清晰,如有不恰當的地方,歡迎提出討論。 /*!  *黃國燁([email protected])  *  Date: 2017-10-15  * 清除快取

iOS APP快取清理

- (void)viewDidLoad { [super viewDidLoad]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame

Android通過Chrome Inspect調試WebView的H5 App出現空白頁面的解決方法(不需要FQ)

為什麽 5.1 什麽 方法 下載 進行 htm ron 2.0 調試基於WebView的Hybrid App最舒服的工具當然是Chrome自帶的開發者工具,其中有我們熟悉的Dom樹調試,JS調試,Network監視等等功能。 Google提供的調試Android上WebV

HBuilder入門(構建h5+APP

pre 準備 nvi pan doc 打開 事件 build open if(window.plus) { plusReady(); } else { //plusready事件(自帶事件)調

PHP----------支付寶支付的一些註意事項該博客只適用於20180209之後,的app支付寶支付

php src 支付寶支付 分享 bsp image http post 公鑰 1、簽名方式: 2、設置應用公鑰。也就是開發者公鑰。 PHP----------支付寶支付的一些註意事項。該博客只適用於20180209之後,的app支付寶支付。

H5 App設計者需要註意的問題

有著 概念 獲得 加載中 如果 多看 blank ast 決策 我們通常在做H5 APP設計的過程中,遇到很多看似很小,且很容易被忽略的問題,正是這些小問題,一次次的撩撥用戶的耐心,讓用戶對你的APP心生怨念。現在WeX5君嘔血為大家整理出H5 APP設計的21條禁忌

iOS獲取App快取檔案的大小並清除快取

App在處理網路資源時,一般都會做離線快取處理,其中最典型離線快取框架為SDWebImage。 但是,離線快取會佔用一定的儲存空間,所以快取清理功能基本成為資訊、購物、閱讀類app的標配功能。 下面用程式碼來分別介紹快取檔案大小的獲取及清除快取

Maven:生命週期和外掛

Maven的生命週期與外掛相互繫結,用以完成實際的構建任務。具體而言,是生命週期的階段與外掛的目標相互繫結,以完成某個具體的構建任務。例如專案編譯這一任務,他對應了default生命週期的compile這一階段,而maven-compiler-plugin這一外掛的compile目標能夠完成該任務。

手機移動智能養卡代還,APP定制開發

p2p網貸 軟硬件 所有 合作 研發 客戶 監管 網貸平臺 代碼 浙江零零壹億仁信息科技有限公司創立於2015年,註冊資金為1000萬,(前身為臺州零零壹企業管理咨詢有限公司創立於2011年),在移動支付領域異軍突起,短時間就成為移動支付行業領先品牌,公司是一家致力於為金融

springboot之專案叢集生成hash的key導致快取不一致

場景: 叢集專案使用訪問策略使用的隨機,快取使用的redis,自定義key當傳入兩個引數以上時候,使用Arrays.deepHashCode來計算快取的key。 問題: 然後出現在機器1剛訪問過這個介面,redis也有快取,訪問到機器2的時候仍然走service方法,也就是沒有從redi

h5 app 開發版本更新提示

var wgtVer=null; function plusReady(){ // 獲取本地應用資源版本號 plus.runtime.getProperty(plus.runtime.appid,function(inf){ wgtVer=inf.version; }

redis的常用命令、問題和一些快取清理

Q、C盤空間不足 解決方式:多資料夾檢視大小,逐步縮小方位, 最終定位位置: 快取清理目錄:C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Redis [圖片] Q、檢視redis版本和redis埠: 1

Vue + quasar-framework進行Vue混合app開發 ─ Cordova外掛呼叫(二)

開發一個App,怎麼能不呼叫原生的api介面呢,在Quasar中我們可以直接安裝並使用Cordova外掛呼叫原生裝置API,比如獲取裝置資訊,網路資訊,呼叫攝像頭等等。 Cordova外掛只有在deviceready事件被觸發後才可用。 我們不需要擔心太多。 在這個事件被觸發之後,Qua

H5離線快取技術Application Cache

H5離線快取技術Application Cache 1、離線快取技術:是瀏覽器本身的一種機制 HTML5引入Application Cache(應用程式快取)技術,離線儲存可以將站點的一些檔案儲存在本地,在沒有網路的情況下可以訪問到已快取的對應的站點頁面,這些檔案包括html、js、css、img等檔案;

iOS開發 WKWebView快取清理

WKWebView清除快取只能iOS9使用,低於iOS9執行會崩潰哦!所以,為了適配iOS7和iOS8,還是要做版本判斷 if ([[[UIDevice currentDevice]systemVersion]intValue ] >= 9.0) {     &nb

H5+app -- 關於ajax提交問題

lrj 只有一個 class col span 16px out 已久 .com   1、前陣子在做系統的h5+ app為滿足手機端也能進行業務操作,例如:提貨,掃描入庫之類的。所以就要將做接口,從手機端調用後臺系統的方法。   2、例如這樣的請求格式,但是呢,每次請求它都

RetrofitCache 讓 retrofit2+okhttp3+rxjav 配置快取如此簡單

RetrofitCache 專案地址:yale8848/RetrofitCache  簡介:RetrofitCache 讓 retrofit2+okhttp3+rxjav 配置快取如此簡單。通過註解配置,可以針對每一個介面靈活配置快取策略;同時讓每一個介面方便支援資料模擬,可以程式

清除APP快取工具類

這是專案中用到的“ 清除快取”功能的工具類 import android.content.Context; import android.os.Environment; import android.text.TextUtils; import java.io.File; imp

H5快取機制

webstorage機制 一、localStorage 用於永久性的進行本地快取,不會自動清除、沒有過期時間,直至手動清除資料。 儲存方式 ● 以鍵值對的形式進行儲存 , 儲存的方式只能是String型別。獲取的資料也只能是String型別 window.localStorage.setIte

h5利用快取優化效能

轉載出處:http://www.cocoachina.com/webapp/20151217/14718.html 1 H5 快取機制介紹 H5,即 HTML5,是新一代的 HTML 標準,加入很多新的特性。離線儲存(也可稱為快取機制)是其中一個非常重要的特性。H5 引入的離線儲存,這