2012-02-01 82 views
3

有捲筒紙屬性(空隙QWebSettings ::的setAttribute(WebAttribute屬性,布爾上)):QWebkit QWebSettings緩存與QNetworkManager QNetworkDiskCache有什麼區別?

QWebSettings::LocalStorageDatabaseEnabled 
QWebSettings::OfflineWebApplicationCacheEnabled 
QWebSettings::OfflineStorageDatabaseEnabled 

也有方法:

void QWebSettings::enablePersistentStorage(const QString &path = QString()) 
void QWebSettings::setMaximumPagesInCache(int pages) 
void QWebSettings::setObjectCacheCapacities(int cacheMinDeadCapacity, int cacheMaxDead, int totalCapacity) 
void QWebSettings::setOfflineStorageDefaultQuota(qint64 maximumSize) 
void QWebSettings::setOfflineStoragePath(const QString &path) 
void QWebSettings::setOfflineWebApplicationCachePath(const QString &path) 
void QWebSettings::setOfflineWebApplicationCacheQuota(qint64 maximumSize) 

而且有QNetworkDiskCache可與QNetworkAccessManager使用:

QNetworkDiskCache *diskCache = new QNetworkDiskCache(this); 
QString location = QDesktopServices::storageLocation(QDesktopServices::CacheLocation); 
diskCache->setCacheDirectory(location); 
networkAccessManager->setCache(diskCache); 

它也是幾個方法:

void setCacheDirectory(const QString &cacheDir) 
void setMaximumCacheSize(qint64 size) 

我該如何正確使用這個令人困惑的API來實現緩存?

+0

什麼樣的緩存:瀏覽器​​或一般網絡I/O? – Neox 2012-02-01 15:34:10

+0

我在寫一個瀏覽器。 – user1180567 2012-02-01 15:54:41

+0

在這種情況下使用QWebSettings。 – Neox 2012-02-01 15:58:19

回答

7
  • 提到的頁面緩存是WebKit頁面緩存 - 請參閱 http://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/。這個 是一個內存緩存,用於加快瀏覽器中的後退/前進操作。
  • setObjectCacheCapacities引用WebKit的內存中緩存。
  • 顧名思義,QNetworkDiskCache就是一個磁盤緩存,Qt可以用它來替代從網絡獲取資源。
  • 離線網絡應用程序/本地存儲設置用於HTML本地存儲和離線網絡應用程序功能。

當加載頁面,也有參與,從最快到最慢一些緩存級別:

  1. WebKit的內部內存緩存(頁面和對象緩存)
  2. Qt的磁盤緩存網絡資源(QNetworkDiskCache)的
  3. 用戶的網絡或系統上的任何本地代理緩存
  4. ,該網站服務於網頁應用(例如,從內容分發服務的靜態資源緩存的多層次網絡,魷魚緩存)

(3)和(4)不在你的控制之下,(1)默認啓用,所以你可能需要做的唯一事情是啓用(2)。