QWebkit QWebSettings 缓存和 QNetworkManager QNetworkDiskCache 有啥区别?

Posted

技术标签:

【中文标题】QWebkit QWebSettings 缓存和 QNetworkManager QNetworkDiskCache 有啥区别?【英文标题】:What is the difference between QWebkit QWebSettings cache and QNetworkManager QNetworkDiskCache?QWebkit QWebSettings 缓存和 QNetworkManager QNetworkDiskCache 有什么区别? 【发布时间】:2012-02-01 13:52:14 【问题描述】:

有web属性(void QWebSettings::setAttribute(WebAttribute attribute, bool on)):

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)

还有可以与 QNetworkAccessManager 一起使用的 QNetworkDiskCache:

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 正确实现缓存?

【问题讨论】:

什么样的缓存:浏览器​​或一般网络 I/O? 在这种情况下使用 QWebSettings。 【参考方案1】: 所指的页面缓存是 WebKit 页面缓存 - 请参阅 http://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/。这 是一个内存缓存,用于加速 浏览器。 setObjectCacheCapacities 指的是 WebKit 的内存缓存。 QNetworkDiskCache 顾名思义,是一种磁盘缓存,Qt 可以将其用作从网络获取资源的替代方案。 离线网络应用/本地存储设置适用于 html 本地存储和离线网络应用功能。

在加载页面时,涉及到多个级别的缓存,从最快到最慢:

    WebKit 的内部内存缓存(页面和对象缓存) Qt的网络资源磁盘缓存(QNetworkDiskCache) 用户网络或系统上的任何本地代理缓存 为页面提供服务的网站使用的多级缓存(例如,提供来自内容交付网络的静态资源、Squid 缓存)

(3) 和 (4) 不在您的控制范围内,(1) 默认启用,因此您唯一可能需要做的就是启用 (2)。

【讨论】:

以上是关于QWebkit QWebSettings 缓存和 QNetworkManager QNetworkDiskCache 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Qwebkit 和 flash 播放器,为啥它不能在 windows 中工作

为啥 QWebkit 在 -webkit-scrollbar css 中使用时不解析 file:// 和 qrc://?

使用 QWebKit 的永久 cookie——从哪里获得 QNetworkAccessManager?

如何让 QWebKit 显示图像?

QWebKit 在特定平台上不显示某些图像

没有为架构 x86_64 找到带有 QWebKit 符号的 Qt 项目