HTML5離線Web應用實戰:五步建立成功

【IT168 技術】HTML5近十年來發展得如火如荼,在HTML 5平臺上,視頻,音頻,圖象,動畫,以及同電腦的交互都被標準化。HTML功能愈來愈豐富,支持圖片上傳拖拽、支持localstorage、支持web sql database、支持文件存儲api等等。它任重而道遠,致力於將Web帶入一個更爲成熟的應用平臺。在全部炫酷特性中,最讓我喜歡的是它具備離線緩存Web應用的功能。javascript

  開發離線Web 應用程序:三大核心功能php

  在開發支持離線的 Web 應用程序時,開發者一般須要使用如下三個方面的功能:css

  1. 離線資源緩存:須要一種方式來指明應用程序離線工做時所需的資源文件。這樣,瀏覽器才能在在線狀態時,把這些文件緩存到本地。此後,當用戶離線訪問應用程序時,這些資源文件會自動加載,從而讓用戶正常使用。HTML5 中,經過 cache manifest 文件指明須要緩存的資源,並支持自動和手動兩種緩存更新方式。html

  2. 在線狀態檢測:開發者須要知道瀏覽器是否在線,這樣纔可以針對在線或離線的狀態,作出對應的處理。在 HTML5 中,提供了兩種檢測當前網絡是否在線的方式。java

  3. 本地數據存儲:離線時,須要可以把數據存儲到本地,以便在線時同步到服務器上。爲了知足不一樣的存儲需求,HTML5 提供了 DOM Storage 和 Web SQL Database 兩種存儲機制。前者提供了易用的 key/value 對存儲方式,然後者提供了基本的關係數據庫存儲功能。css3

  HTML5推出的 「Web Storage」(Web 存儲)APIweb

  爲了彌補cookie容量小存在的缺陷,WebStorage能夠解決輕量級的存儲。HTML5推出的 「Web Storage」(Web 存儲)API,它包括 localStorage 和 sessionStorage,能夠存儲簡單對象(如應用程序狀態),使用本地和會話存儲可以很好地完成,可是對大量的結構化數據進行處理時,須要用到 HTML5 的「Web SQL Database」 API 接口。sql

  在HTML5中網絡存儲按照生命週期分爲2種,一種是基於會話(session),這種存儲週期只是當前會話,當網頁[注1]被關被後,或者被轉到其餘網站後,存儲也就被銷燬;數據庫

  •   sessionStorage.varName = 「生成新變量」;
  •   sessionStorage.varName = 「變量操做」;
  •   delete sessionStorage.varName; //刪除變量

  另一種是本地存儲,當網頁下次被打開的時候,你仍然能夠訪問上次打開該網頁時存儲的數據,好比本地存儲的網站用戶名就可使用這種方式。api

  用法和基於會話的存儲同樣,只是前綴名改爲了localStorage

  •   localStorage.varName = 「生成新變量」;
  •   localStorage.varName = 「變量操做」;
  •   delete localStorage.varName; //刪除變量

  Web Storage

   // use localStorage for persistent storage

  // use sessionStorage for per tab storage

  saveButton.addEventListener('click', function () {

      window.localStorage.setItem('value', area.value);

      window.localStorage.setItem('timestamp', (new Date()).getTime());

  }, false);

  textarea.value = window.localStorage.getItem('value');

  

  離線存儲HTML5 Web SQL Database

  Web SQL Database 提供了基本的關係數據庫功能,支持頁面上的複雜的、交互式的數據存儲。它既能夠用來存儲用戶產生的數據,也能夠做爲從服務器獲取數據的本地高速緩存。例如能夠把電子郵件、日程等數據存儲到數據庫中。Web SQL Database 支持數據庫事務的概念,從而保證了即便多個瀏覽器窗口操做同一數據,也不會產生衝突。

  它還引入了一套使用 SQL 來操縱客戶端數據庫(client-side database)的 API,這些 API 是異步的(asynchronous)。所使用的 SQL 語言爲 SQLite 3.6.19。其中 SQLite 是一款輕型的數據庫,佔用資源很是低,支持 Windows/Linux/Unix 等主流操做系統,同時可以跟不少程序語言相結合,如 C#,PHP,Java,JavaScript 等,比起 Mysql,PostgreSQL 這兩款開源的數據庫管理系統來講,它的處理速度更快。目前iOS和Android平臺支持運行Web SQL Database。

  var db = window.openDatabase("DBName", "1.0", "description", 5*1024*1024); //5MB

  db.transaction(function(tx) {

    tx.executeSql("SELECT * FROM test", [], successCallback, errorCallback);

  });


  Web Workers


  main.js:

  var worker = new Worker('task.js');

  worker.onmessage = function(event) { alert(event.data); };

  worker.postMessage('data');

  task.js:

  self.onmessage = function(event) {

    // Do some work.

    self.postMessage("recv'd: " + event.data);

  };

  

   HTML5 IndexedDB:輕量級NoSQL數據庫

  IndexedDB是HTML5-WebStorage的重要一環,是一種輕量級NoSQL數據庫。

  w3c爲IndexedDB定義了不少接口,其中Database對象被定義爲IDBDataBase。

  瀏覽器對象中,實現了IDBFactory的只有indexedDB這個實例。

  五步建立HTML5離線Web應用

  在HTML5提供的全部炫酷功能裏,建立離線緩存網頁是我最喜歡的一個特性,如下是五步快速建立HTML5離線Web應用的步驟

  1. 第一步:建立一個有效的HTML5文檔,HTML5 doctype比xhtml更易於識記。

  建立一個名爲index.html的文件,這裏學習如何使用CSS3來策劃網站佈局。

  http://www.catswhocode.com/blog/create-an-adaptable-website-layout-with-css3-media-queries

  2. 新增.htaccess支持

  咱們要建立的緩存頁面稱爲manifest文件,假設你所使用的服務器是Apache,咱們在建立文件以前,須要往.htaccess文件新增一個指令。

  打開.htaccess文件,該文件部署在網站的根目錄下,新增如下代碼:

AddType text/cache-manifest .manifest

  該指令能夠確保每個.manifest文件文本高速緩存。若是該文件不存在,整個緩存效果就沒法實現,頁面也不能實現離線緩存。

  3. 建立.manifest文件

  在咱們建立好了.manifest文件後,事情就變得有趣多了。建立好新文件,命名爲offline.manifest,嵌入如下代碼。

CACHE MANIFEST

  #This is a comment

  CACHE

  index.html

  style.css

  image.jpg

  image-med.jpg

  image-small.jpg

  notre-dame.jpg

 

  如今你擁有了一個完美的manifest列表。其實原理很簡單,在聲明CACHE後,你能夠列出本身想要離線緩存的文件。這個對於緩存一個簡單的網頁,已是綽綽有餘了,而HTML5的緩存有其它一些有趣的功能。

CACHE MANIFEST

  #This is a comment

  CACHE

  index.html

  style.css

  NETWORK:

  search.php

  login.php

  FALLBACK:

  /api offline.html

  在這個示例中,manifest文件聲明瞭CACHE,用於緩存index.html和style.css。同時,咱們聲明瞭NETWORK,用於指定不被緩存的文件,好比登陸頁面。

  最後聲明的是FALLBACK,這個聲明容許將用戶轉入一個指定的頁面,好比本例中若是不打算離線查看API資源的話,能夠轉向Off.html頁面。

  4. 將manifest 文件連接到HTML文檔中。

  在manifest文件和主要的html文檔準備好了之後,你惟一還須要作的事情是將manifest文件連接到html文檔中。

  操做方法很簡單,只需在html元算中添加manifest 屬性,代碼以下:

  5. 測試

相關文章
相關標籤/搜索