qt - QWebkit QWebSettings缓存和QNetworkManager QNetworkDiskCache有什么区别?

标签 qt caching qwebkit

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

最佳答案

  • 所指的页面缓存是 WebKit 页面缓存 - 请参阅 http://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/ .这个 是一个内存缓存,用于加速 Back/Forward 操作 浏览器。
  • setObjectCacheCapacities 指的是 WebKit 的内存缓存。
  • QNetworkDiskCache,顾名思义,是一种磁盘缓存,Qt 可以将其用作从网络获取资源的替代方法。
  • 离线网络应用/本地存储设置用于 HTML 本地存储和离线网络应用功能。

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

  1. WebKit 的内部内存缓存(页面和对象缓存)
  2. Qt的网络资源磁盘缓存(QNetworkDiskCache)
  3. 用户网络或系统上的任何本地代理缓存
  4. 为页面提供服务的站点使用的多级缓存(例如,从内容分发网络、Squid 缓存提供静态资源)

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

关于qt - QWebkit QWebSettings缓存和QNetworkManager QNetworkDiskCache有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9096887/

相关文章:

c++ - 使用 QGLWidget 作为 QGraphicsView 的视口(viewport)导致黑屏

c# - 不可变类型是否适用于此缓存问题

python - QWebKit linkClicked 信号从不触发

Qt/PyQt : How do I act on QWebView/QWebPage's "Open in New Window" action?

c++ - Qt - 带注释的 JSON

c++ - 将 TreeView 链接到 TableView ? [Qt]

c++ - 将 QGLWidget 添加到 QMainWindow

javascript - 强制 Firefox 在后退按钮上重新加载页面

hibernate - Hibernate 使用的默认缓存?

python - Odoo 版本 8 中带有 qweb 模板的报告