hybird 開發中的快取問題

2021-07-08 21:10:33 字數 3345 閱讀 1832

通過伺服器http載入的資源,方便伺服器push的方案,快取由瀏覽器和伺服器共同決定。

放在資源包中的檔案,通過file協議的相對路徑或者絕對路徑載入,應該是永久快取只要不更新包,資源就不會更新。

通過storage 快取資料,通過onstorage更新dom

通過sqlite儲存少量持久快取資源,不要儲存過大的檔案,對於sqlite的儲存,可以使用webworker開啟乙個新的執行緒去儲存資料,在運算元據庫時影響瀏覽器渲染效能。

webworker,多執行緒之間不支援資料共享,需要借助中間環節,比如storage

他們的索引存放在/data/data/package_name/databases下。

他們的檔案存放在/data/data/package_name/cache/***webviewcache***下。資料夾的名字在2.x和4.x上有所不同,但都資料夾名字中都包含webviewcache。

資料快取,dom storage(web storage)

如果需要儲存一些簡單的用key/value對即可解決的資料,dom storage(web storage)是非常完美的方案。根據作用範圍的不同,有session storagelocal storage兩種,分別用於會話級別的儲存(頁面關閉即消失)和本地化儲存(除非主動刪除,否則資料永遠不會過期)。

在android中可以手動開啟dom storage(setdomstorageenabled),設定儲存路徑(setdatabasepath

android中webkit會為dom storage產生兩個檔案my_path/localstorage/http_h5.m.taobao.com_0.localstorage

my_path/localstorage/databases.db

另外,在android中清除快取時,如果需要清除local storage的話,僅僅刪除local storage的本地儲存檔案是不夠的,記憶體裡面有快取資料。如果再次進入頁面,local storage中的快取資料同樣存在。需要殺死程式執行的當前程序再重新啟動才可以。

首先需配置webview的的一些屬性,假設activity中已經有了乙個webview的例項物件,名為m_webview,然後增加以下**:

websettings webseting = m_webview.getsettings();  

webseting.setdomstorageenabled(true);

//設定緩衝大小,我設的是8m

`setallowfileaccess` //是manifest生效

webseting.setallowfileaccess(true);

webseting.setcachemode(websettings.load_default);

m_webview.setwebchromeclient(m_chromeclient);  

private webchromeclient m_chromeclient = new webchromeclient()

};

其次要修改http伺服器中的配置,使其支援text/cache-manifest,我使用的是apach伺服器,是windows版本的,在apache的conf資料夾中找到mime.types檔案,開啟後在檔案的最後加上

「text/cache-manifest              mf  manifest」,
重啟伺服器即可。

經過以上設定webview就可以支援html5的離線應用了。

但我經過試驗後發現設定那個目錄不起作用,可能是android版本不同吧,我的是android4.0.3,而他的可能是以前的android版本吧。

緩衝目錄使用

html5 offline官方文件:

原因:

webview載入服務端的網頁,為了減少訪問壓力,用html5快取技術,本地建了資料庫,在手機瀏覽器裡可以顯示頁面,換成webview就不行了。

解決範例:

public class efan_newsreader extendsactivity 

}

html5 page source code:

here is test info:

mywebview.setwebchromeclient(newwebchromeclient()

}mywebview.setwebchromeclient(newwebchromeclient()

}

一、網頁快取

1、快取構成

/data/data/package_name/cache/

/data/data/package_name/database/webview.db

/data/data/package_name/database/webviewcache.db

2、快取模式

較難理解的是以下兩個模式:

load_default,根據cache-control決定是否從網路上取資料。

load_cache_else_network,只要本地有,無論是否過期,或者no-cache,都使用快取中的資料。

如:m.taobao.com的cache-control為no-cache,在模式load_default下,無論如何都會從網路上取資料,如果沒有網路,就會出現錯誤頁面;在load_cache_else_network模式下,無論是否有網路,只要本地有快取,都使用快取。本地沒有快取時才從網路上獲取。

m.sina.com.cn的cache-control為max-age=60,在兩種模式下都使用本地快取資料。

總結:根據以上兩種模式,建議快取策略為,判斷是否有網路,有的話,使用load_default,無網路時,使用load_cache_else_network。

3、清除快取

clearcache(boolean)。

cachemanager.clear。高版本中需要呼叫隱藏api。

4、控制大小

無系統api支援。

可選方式:定時統計快取大小、按時間順序刪除快取。

二、h5快取

三、參考**

php web開發中的快取

快取的作用 減少記憶體,cpu資源的消耗 快取中需要關注的問題 1 快取命中率 2 快取的更新策略 3 快取單條資料的最大值 4 快取總量的大小html meta標籤控制快取 http控制快取的機制 如果有快取 1 先讀取etag if not match 2 last modified if mo...

如何解決前端開發中的快取問題

現在的大多數瀏覽器都有快取機制,目的是減少客戶端的訪問次數,減輕伺服器的壓力。但是在開發工程中或者是版本更新過程中,快取機制的存在會使得程式版本已經更新,但是效果不能出現的狀況,需要開發人員頻繁的清除快取,並不友好,特此總結以下幾種方式 以谷歌為例 僅供參考,如有雷同,不甚榮幸。1.對於開發者來說,...

snarty中的快取問題

快取 1 提高訪問效率高 使用快取 實現類似頁面靜態化效果 美工和php 檔案合併後的編譯檔案形成靜態頁面 減少了 從資料庫獲取資料資訊,訪問資料庫的次數等 2 快取分類 l 頁面快取 步驟 在主配置檔案中宣告以下內容 開啟快取功能 cache 設定快取檔案所在路徑 設定快取的時間 s 瀏覽web ...