通過伺服器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 storage
和local 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 ...