1. html5的離線web應用的瀏覽器和伺服器交互的過程要是沒有緩存怎麼辦
html5的離線web應用的瀏覽器和伺服器交互的過程要是沒有緩存就需要每次交互都要實時介面調用,增加網路開銷。
一、離線存儲的作用
1、用戶可離線訪問應用,這對於無法隨時保持聯網狀態的移動終端用戶來說尤其重要
2、用戶訪問本地的緩存文件,通常意味著更快的訪問速度
3、僅僅載入被修改過的資源,避免同一資源對伺服器多次的請求,大大降低了對伺服器的訪問壓力
二、實現離線存儲
1、在html標簽里通過manifest屬性引用一個cache.manifest文件,該文件里聲明了瀏覽器需緩存的所有資源文件,如下所示:
<!DOCTYPE html>
<html lang='cn' manifest='cache.manifest'>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>離線緩存示例頁面</title>
<!-- CSS文件引用 -->
</head>
<body>
<!-- 各種標簽 -->
</body>
<!-- 各種腳本文件 -->
</html>
2、關於cache.manifest的定義
CACHE MANIFEST
# 注釋:需要緩存的文件,無論在線與否,均從緩存里讀取
chched.js
cached.css
# 注釋:不緩存的文件,無論緩存中存在與否,均從新獲取
NETWORK:
uncached.js
uncached.css
# 注釋:獲取不到資源時的備選路徑,如index.html訪問失敗,則返回404頁面
FALLBACK:
index.html 404.html
2. HTML5的離線儲存怎麼使用,以及工作原理
原理:HTML5的離線存儲是基於一個新建的.appcache文件的,通過這個文件上的解析清單離線存儲資源,這些資源就會像cookie一樣被存儲了下來。之後當網路在處於離線狀態下時,瀏覽器會通過被離線存儲的數據進行頁面展示。
方法:
1.在index.html里加上<html manifest="test.manifest">
2.manifest清單格式如下:
CACHE MANIFEST
#上面一句必須
#v1.0.0
#需要緩存的文件
CACHE:
a.js
b.css
#不需要緩存的文件
NETWORK:
*
#無法訪問頁面
FALLBACK:
404.html
3.manifest文件的mime-type必須是 text/cache-manifest類型。
3. html5離線緩存是存儲到哪裡了,我設置離線緩存後為什麼在線也打開的是緩存文件
用frame的方法來解決,搜了一下相關文檔,應該是不可以的。他的思路是並不存儲當前被訪問的頁面,而是用iframe引入一個頁面,在那個頁面中調用manifest文件來達到存儲列表內資源的目的,根據文檔所寫:「. a,b兩個頁面,引入相同資源,但a有使用manifest,而b沒有.
那麼,即使a頁面緩存了資源.b頁面也不會有效.而且b頁面強制更新了資源.
頁面的緩存也不會因為b的更新,而更新.」
4. 如何用html5開發wap版實例
下面列舉HTML5適合移動應用開發的幾大特性:
1.離線緩存為HTML5開發移動應用提供了基礎
HTML5 Web Storage API可以看做是加強版的cookie,不受數據大小限制,有更好的彈性以及架構,可以將數據寫入到本機的ROM中,還可以在關閉瀏覽器後再次打開時恢復數據,以減少網路流量。
同時,這個功能算得上是另一個方向的後台「操作記錄」,而不佔用任何後台資源,減輕設備硬體壓力,增加運行流暢性。
在線app支持邊使用邊下載離線緩存,或者不下載離線緩存;而離線app必須是下載完離線緩存才能使用。
形象點說,cookie就是存了電話和菜單,想吃什麼要叫外賣,等多長時間才能吃到就得看交通情況了;離線緩存就是直接在冰箱里存了食物,想吃就能馬上吃到(當然,想吃最新的食物同樣可以打電話預定)。
設計師要知道,什麼時候讓用戶下載離線緩存(注意在線和離線app的區別)。
2.音頻視頻自由嵌入,多媒體形式更為靈活
原生開發方式對於文字和音視頻混排的多媒體內容處理相對麻煩,需要拆分開文字、圖片、音頻、視頻,解析對應的URL並分別用不同的方式處理。
HTML5在這個方面完全不受限制,可以完全放在一起進行處理。
設計師要知道,如果新聞類、微博類、社交類應用的信息呈現中實現文字與多媒體混排,而不用專門嵌入webview,將是一件多美好的事情,至少現在原生方式實現起來還有困難。
3.地理定位,隨時隨地分享位置
充分發揮移動設備對定位上的優勢,推動LBS應用發展。
可以綜合使用GPS、wifi、手機等方式讓定位更為精準、靈活。
地理位置定位,讓定位和導航不再專屬導航軟體,地圖也不用下載非常大的地圖包,可以通過緩存來解決,到哪兒下哪兒,更靈活。
設計師要知道,現在嵌入LBS功能的應用越來越多,這也是移動設備與台式PC相比最大的優勢之一,HTML5能把這個優勢再度擴大化,好好想想怎麼在你設計的應用里用上吧!
4.Canvas繪圖,提升移動平台的繪圖能力
使用Canvas API可以簡單繪制熱點圖收集用戶體驗資料
支持圖片的移動、旋轉、縮放等常規編輯
Canvas – 2D的繪圖功能支持
Canvas 3D – 3D的繪圖功能支持
SVG – 向量圖支援
設計師要知道,圖片的移動、旋轉、縮放?那都太基礎了,自己畫都是小case,至於怎麼用,好好想想吧!
5.專為移動平台定製的表單元素
瀏覽器中出現的html5表單元素與對應的鍵盤:
類型 用途 鍵盤
Text 正常輸入內容 標准鍵盤
Tel 電話號碼 數字鍵盤
Email 電子郵件地址文本框 帶有@和.的鍵盤
url 網頁的URL 帶有.com和.的鍵盤
Search 用於搜索引擎,比如在站點頂部顯示的搜索框 標准鍵盤
range 特定值范圍內的數值選擇器,典型的顯示方式是滑動條 滑動條或轉盤
只需要簡單的聲明 <input type=」email」> 即可完成對不同樣式鍵盤的調用,簡捷方便。
設計師要知道,用的時候記得告訴研發同事一聲!
5. 怎麼學習html5裡面的離線緩存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
HTML5離線存儲和本地緩存
一.離線存儲
有一個web應用有三個文件index.html,a.js,b.css,現在需要把js和css文件緩存起來
1.在index.html里加上<html manifest="test.manifest">
2.manifest清單格式如下
CACHE MANIFEST
#上面一句必須
#v1.0.0
#需要緩存的文件
CACHE:
a.js
b.css
#不需要緩存的文件
NETWORK:
*
#無法訪問頁面
FALLBACK:
404.html
3.manifest文件的mime-type必須是 text/cache-manifest類型
注意點:
1.對於每個index.html?id=1或index.html?id=2都會分別緩存index.html頁面,可以通過chrome瀏覽器Resources/Application Cache觀察
2.如果想更新緩存內容,只要修改下manifest文件即可,如改版本號v1.0.1
4.離線存儲如果資源有更新,可以通過如下代碼來監聽,但第一次載入還會是原來的版本
window.applicationCache.addEventListener('updateready',function(e){
if(window.applicationCache.status == window.applicationCache.UPDATEREADY){
window.applicationCache.swapCache();
if(confirm("loding new?")){
window.location.reload()
}
}
},false)
二.本地緩存
localStorage.setItem("key","value")
localStorage.getItem("key","value")
localStorage.removeItem("key")
localStorage.clear()
1.本地存儲永不過期,除非自己去清除
2.可以通過chrome瀏覽器Resources/Local Storage來查看
3.不同域下就算key相同取不到的值也不同,如localhost和127.0.0.1
6. 在html5中,設置哪個屬性可以實現離線緩存
什麼是離線緩存
離線緩存,就是將指定的網頁文件(例如css、js)保存到本地,當用戶沒有網路時,依舊可以通過瀏覽器使用這些文件。
為何要用離線緩存
從網站所有者的角度來說,增加離線緩存功能,能夠讓用戶更好的使用網站。
離線緩存的設置步驟
配置manifest文件
通過JS進行緩存的控制
離線緩存流程
7. html5新增了離線緩存機制這說法對嗎
這個不算是 新增吧。
隨著現代瀏覽器的推動,Flash放棄對移動端的支持,HTML5無疑成為當前Web前端炙手可熱的話題。各大游戲開發商、App開發商紛紛投入人力進行研究和技術儲備。相信不久的將來,HTML5會迎來一個快速發展和普及的春天。那麼,HTML5這個新一代的標准,又給我們帶來哪些緩存機制呢?
HTML5 之離線應用Manifest
我們知道,使用傳統的技術,就算是對站點的資源都實施了比較好的緩存策略,但是在斷網的情況下,是無法訪問的,因為入口的HTML頁面我們一般運維的考慮,不會對其進行緩存。HTML5的Cache Mainifest離線應用特性就能夠幫助我們構建離線也能使用的站點,所有的資源都使用瀏覽器本地緩存,當然前提是要求在聯網的情形下使用過一次站點。
如何實現離線訪問特性
實現的步驟非常簡單,主要3個步驟:
1)在伺服器上添加MIME TYPE支,讓伺服器能夠識別manifest後綴的文件
AddType text/cache-manifest manifest
2)創建一個後綴名為.manifest的文件,把需要緩存的文件按格式寫在裡面,並用注釋行標注版本
CACHE MANIFEST
# 直接緩存的文件
CACHE:
Path/to/cache.js
# version:2012-03-20
3)給 <html> 標簽加 manifest 屬性,並引用manifest文件
具體可以參考:HTML5 緩存: cache manifest
<html manifest=」path/to/name-of.manifest」>
離線應用訪問及更新流程
第一次訪問離線應用的入口頁HTML(引用了manifest文件),正常發送請求,獲取manifest文件並在本地緩存,陸續拉取manifest中的需要緩存的文件
再次訪問時,無法在線離線與否,都會直接從緩存中獲取入口頁HTML和其他緩存的文件進行展示。如果此時在線,瀏覽器會發送請求到伺服器請求manifest文件,並與第一次訪問的副本進行比對,如果發現版本不一致,會陸續發送請求重新拉取入口文件HTML和需要緩存的文件並更新本地緩存副本
之後的訪問重復第2步的行為
離線機制的緩存用途
從Manifest的機制來看,即使我們不是為了創建離線應用,也同樣可以使用這種機制用於緩存文件,可以說是給Web緩存提供多一種可以選擇的途徑。
存在的問題:緩存文件更新控制不靈活
就目前HTML5提供的manifest機制來講,一個頁面只能引用一個manifest頁面,而且一旦發現這個manifest改變了,就會把裡面所有定義的緩存文件全部重新拉取一遍,不管實際上有沒有更新,控制比較不靈活。針對這個問題,也有的同學提出了一些建議,比如把需要緩存的文件分模塊切分到不同manifest中,並分開用HTML引用,再使用強大的iframe嵌入到入口頁面,這樣就當某一個模式需要有更新,不會導致其他模塊的文件也重新拉取一遍。
HTML5 之本地存儲localstorage
HTML5給我們提供本地存儲localstorage特性,嚴格來講,其實已經不算傳統Web緩存的范疇。因為它存儲的地方是跟Web緩存分開的,是瀏覽器重新開辟的一個地方。
localstorage的作用
本地存儲localstorage的作用主要使Web頁面能夠通過瀏覽器提供的set/get介面,存儲一些自定義的信息到本地硬碟,並且在單次訪問或以後的訪問過程中隨時獲取或修改。
Localstorage的使用
Localstorage提供了幾個非常易用的Api,setItem/getItem/removeItem/clear,具體的可以參考:Html5 Step by Step(二) 本地存儲
Localstorage的緩存用途
Localstorage設計的本意可能是用來存儲一些用戶操作的個性化設置的文本類型的信息和數據,當我們其實也可能拿來當Web緩存區使用,比如我們可以將Base64格式編碼的圖片信息,存在localstorage中,再次訪問時,直接本地獲取後,使用Css3的Data:image的方式直接展現出來。
存在的問題:大小限制
按照目前標准,目前瀏覽器只給每個獨立的域名提供5m的存儲空間,當存儲超過5m,瀏覽器就會彈出警告框。
可以說,HTML5的Manifest和localstorage是給我們在考慮Web緩存的時候提供了多一種思路,當你開發的應用只面對現代瀏覽器的時候,不妨可以考慮一下
8. HTML5的5種存儲方式詳解
引言
本篇文章主要介紹了前端HTML5幾種存儲方式的總結 ,主要包括本地存儲localstorage,本地存儲sessionstorage,離線緩存(application cache),Web SQL,IndexedDB。有興趣的可以了解一下。
正文開始~
h5之前,存儲主要是用cookies。cookies缺點有在請求頭上帶著數據,大小是4k之內。主Domain污染。
主要應用:購物車、客戶登錄
對於IE瀏覽器有UserData,大小是64k,只有IE瀏覽器支持。
目標
存儲方式:
以鍵值對(Key-Value)的方式存儲,永久存儲,永不失效,除非手動刪除。
大小:
每個域名5M
支持情況:
注意:IE9 localStorage不支持本地文件,需要將項目署到伺服器,才可以支持!
常用的API:
getItem //取記錄
setIten//設置記錄
removeItem//移除記錄
key//取key所對應的值
clear//清除記錄
存儲的內容:
數組,圖片,json,樣式,腳本。。。(只要是能序列化成字元串的內容都可以存儲)
HTML5 的本地存儲 API 中的 localStorage 與 sessionStorage 在使用方法上是相同的,區別在於 sessionStorage 在關閉頁面後即被清空,而 localStorage 則會一直保存。
本地緩存應用所需的文件
使用方法:
①配置manifest文件
頁面上:
Manifest 文件:
manifest 文件是簡單的文本文件,它告知瀏覽器被緩存的內容(以及不緩存的內容)。
manifest 文件可分為三個部分:
①CACHE MANIFEST - 在此標題下列出的文件將在首次下載後進行緩存
②NETWORK - 在此標題下列出的文件需要與伺服器的連接,且不會被緩存
③FALLBACK - 在此標題下列出的文件規定當頁面無法訪問時的回退頁面(比如 404 頁面)
完整demo:
伺服器上: manifest文件需要配置正確的MIME-type,即 "text/cache-manifest"。
如Tomcat:
常用API:
核心是applicationCache對象,有個status屬性,表示應用緩存的當前狀態:
0(UNCACHED) : 無緩存, 即沒有與頁面相關的應用緩存
1(IDLE) : 閑置,即應用緩存未得到更新
2 (CHECKING) : 檢查中,即正在下載描述文件並檢查更新
3 (DOWNLOADING) : 下載中,即應用緩存正在下載描述文件中指定的資源
4 (UPDATEREADY) : 更新完成,所有資源都已下載完畢
5 (IDLE) : 廢棄,即應用緩存的描述文件已經不存在了,因此頁面無法再訪問應用緩存
相關的事件:
表示應用緩存狀態的改變:
checking : 在瀏覽器為應用緩存查找更新時觸發
error : 在檢查更新或下載資源期間發送錯誤時觸發
noupdate : 在檢查描述文件發現文件無變化時觸發
downloading : 在開始下載應用緩存資源時觸發
progress:在文件下載應用緩存的過程中持續不斷地下載地觸發
updateready : 在頁面新的應用緩存下載完畢觸發
cached : 在應用緩存完整可用時觸發
Application Cache的三個優勢:
① 離線瀏覽
② 提升頁面載入速度
③ 降低伺服器壓力
注意事項:
1. 瀏覽器對緩存數據的容量限制可能不太一樣(某些瀏覽器設置的限制是每個站點 5MB)
2. 如果manifest文件,或者內部列舉的某一個文件不能正常下載,整個更新過程將視為失敗,瀏覽器繼續全部使用老的緩存
3. 引用manifest的html必須與manifest文件同源,在同一個域下
4. 瀏覽器會自動緩存引用manifest文件的HTML文件,這就導致如果改了HTML內容,也需要更新版本才能做到更新。
6. FALLBACK中的資源必須和manifest文件同源
7. 更新完版本後,必須刷新一次才會啟動新版本(會出現重刷一次頁面的情況),需要添加監聽版本事件。
8. 站點中的其他頁面即使沒有設置manifest屬性,請求的資源如果在緩存中也從緩存中訪問
9. 當manifest文件發生改變時,資源請求本身也會觸發更新
離線緩存與傳統瀏覽器緩存區別:
1. 離線緩存是針對整個應用,瀏覽器緩存是單個文件
2. 離線緩存斷網了還是可以打開頁面,瀏覽器緩存不行
3. 離線緩存可以主動通知瀏覽器更新資源
關系資料庫,通過SQL語句訪問
Web SQL 資料庫 API 並不是 HTML5 規范的一部分,但是它是一個獨立的規范,引入了一組使用 SQL 操作客戶端資料庫的 APIs。
支持情況:
Web SQL 資料庫可以在最新版的 Safari, Chrome 和 Opera 瀏覽器中工作。
核心方法:
①openDatabase: 這個方法使用現有的資料庫或者新建的資料庫創建一個資料庫對象。
②transaction: 這個方法讓我們能夠控制一個事務,以及基於這種情況執行提交或者回滾。
③executeSql: 這個方法用於執行實際的 SQL 查詢。
打開資料庫:
執行查詢操作:
插入數據:
讀取數據:
由這些操作可以看出,基本上都是用SQL語句進行資料庫的相關操作,如果你會MySQL的話,這個應該比較容易用。
索引資料庫 (IndexedDB) API(作為 HTML5 的一部分)對創建具有豐富本地存儲數據的數據密集型的離線 HTML5 Web 應用程序很有用。同時它還有助於本地緩存數據,使傳統在線 Web 應用程序(比如移動 Web 應用程序)能夠更快地運行和響應。
非同步API:
在IndexedDB大部分操作並不是我們常用的調用方法,返回結果的模式,而是請求——響應的模式,比如打開資料庫的操作
這樣,我們打開資料庫的時候,實質上返回了一個DB對象,而這個對象就在result中。由上圖可以看出,除了result之外。還有幾個重要的屬性就是onerror、onsuccess、onupgradeneeded(我們請求打開的資料庫的版本號和已經存在的資料庫版本號不一致的時候調用)。這就類似於我們的ajax請求那樣。我們發起了這個請求之後並不能確定它什麼時候才請求成功,所以需要在回調中處理一些邏輯。
關閉與刪除:
數據存儲:
indexedDB中沒有表的概念,而是objectStore,一個資料庫中可以包含多個objectStore,objectStore是一個靈活的數據結構,可以存放多種類型數據。也就是說一個objectStore相當於一張表,裡面存儲的每條數據和一個鍵相關聯。
我們可以使用每條記錄中的某個指定欄位作為鍵值(keyPath),也可以使用自動生成的遞增數字作為鍵值(keyGenerator),也可以不指定。選擇鍵的類型不同,objectStore可以存儲的數據結構也有差異。
學習從來不是一個人的事情,要有個相互監督的夥伴,想要學習或交流前端問題的小夥伴可以私信「學習」小明獲取web前端入門資料,一起學習,一起成長!
9. android中怎麼使用html5離線功能
HTML5的離線應用功能可以使得WebApp即使在網路斷開的情況下仍能正常使用這是個非常有用的功能,但如何使Webivew支持HTML5離線應用功能呢,需要的朋友可以參考下
HTML5的離線應用功能可以使得WebApp即使在網路斷開的情況下仍能正常使用,這是個非常有用的功能。近來工作中也要用到HTML5離線應用功能,由於是在Android平台上做,所以自然而然的選擇Webview來解析網頁。但如何使Webivew支持HTML5離線應用功能呢,經過反復摸索和上網查找資料,反復做試驗終於成功了。
首先需配置webview的的一些屬性,假設activity中已經有了一個Webview的實例對象,名為m_webview,然後增加以下代碼:
復制代碼 代碼如下:
WebSettings webseting = m_webview.getSettings();
webseting.setDomStorageEnabled(true);
webseting.setAppCacheMaxSize(1024*1024*8);//設置緩沖大小,我設的是8M
String appCacheDir = this.getApplicationContext().getDir("cache", Context.MODE_PRIVATE).getPath();
webseting.setAppCachePath(appCacheDir);
webseting.setAllowFileAccess(true);
webseting.setAppCacheEnabled(true);
webseting.setCacheMode(WebSettings.LOAD_DEFAULT);
webview可以設置一個WebChromeClient對象,在其onReachedMaxAppCacheSize函數對擴充緩沖做出響應。代碼如下
復制代碼 代碼如下:
m_webview.setWebChromeClient(m_chromeClient);
private WebChromeClient m_chromeClient = new WebChromeClient(){
//擴充緩存的容量
@Override
public void onReachedMaxAppCacheSize(long spaceNeeded,
long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(spaceNeeded * 2);
}
};
其次要修改http伺服器中的配置,使其支持text/cache-manifest,我使用的是apache伺服器,是windows版本的,在apache的conf文件夾中找到mime.types文件,打開後在文件的最後加上
「text/cache-manifest mf manifest」,重啟伺服器即可。這一步很重要,我就是因為伺服器端沒有配置這個,所以失敗了好多次,最後是在附錄鏈接1的回復中找到的線索。
經過以上設置Webview就可以支持HTML5的離線應用了。
附錄鏈接1中說緩沖目錄應該是getApplicationContext().getCacheDir().getAbsolutePath();但我經過試驗後發現設置那個目錄不起作用,可能是Android版本不同吧,我的是Android4.0.3,而他的可能是以前的Android版本吧。
緩沖目錄使用getApplicationContext().getDir("cache", Context.MODE_PRIVATE).getPath()是從附錄鏈接2中找到的線索。
10. html5離線緩存,我要做一個圖片上傳功能,在用戶拍完照後如果網路不好就進行緩存,怎麼做
HTML5的離線web應用允許我們在離線時與網站進行交互。這在提高網站的訪問速度和製作一款web離線應用上(如HTML5游戲)有很大的使用價值。
先來了解一下HTML5應用程序緩存和瀏覽器緩存的區別。
(有些)瀏覽器會主動保存自己的緩存文件以加快網站載入速度。但是要實現瀏覽器緩存必須要滿足一個前提,那就是網路必須要保持連接。如果網路沒有連接,即使瀏覽器啟用了對一個站點的緩存,依然無法打開這個站點。只會收到一條錯誤信息。而使用離線web應用,我們可以主動告訴瀏覽器應該從網站伺服器中獲取或緩存哪些文件,並且在網路離線狀態下依然能夠訪問這個網站。