mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
Improve cache
This commit is contained in:
@@ -42,6 +42,9 @@ class NetworkCacheManager implements Interceptor {
|
|||||||
static const _maxCacheSize = 10 * 1024 * 1024;
|
static const _maxCacheSize = 10 * 1024 * 1024;
|
||||||
|
|
||||||
void setCache(NetworkCache cache) {
|
void setCache(NetworkCache cache) {
|
||||||
|
if (_cache.containsKey(cache.uri)) {
|
||||||
|
size -= _cache[cache.uri]!.size;
|
||||||
|
}
|
||||||
while (size > _maxCacheSize) {
|
while (size > _maxCacheSize) {
|
||||||
size -= _cache.values.first.size;
|
size -= _cache.values.first.size;
|
||||||
_cache.remove(_cache.keys.first);
|
_cache.remove(_cache.keys.first);
|
||||||
@@ -94,7 +97,7 @@ class NetworkCacheManager implements Interceptor {
|
|||||||
var time = DateTime.now();
|
var time = DateTime.now();
|
||||||
var diff = time.difference(cache.time);
|
var diff = time.difference(cache.time);
|
||||||
if (options.headers['cache-time'] == 'long' &&
|
if (options.headers['cache-time'] == 'long' &&
|
||||||
diff < const Duration(hours: 2)) {
|
diff < const Duration(hours: 6)) {
|
||||||
return handler.resolve(Response(
|
return handler.resolve(Response(
|
||||||
requestOptions: options,
|
requestOptions: options,
|
||||||
data: cache.data,
|
data: cache.data,
|
||||||
@@ -110,7 +113,7 @@ class NetworkCacheManager implements Interceptor {
|
|||||||
..set('venera-cache', 'true'),
|
..set('venera-cache', 'true'),
|
||||||
statusCode: 200,
|
statusCode: 200,
|
||||||
));
|
));
|
||||||
} else if (diff < const Duration(hours: 1)) {
|
} else if (diff < const Duration(hours: 2)) {
|
||||||
var o = options.copyWith(
|
var o = options.copyWith(
|
||||||
method: "HEAD",
|
method: "HEAD",
|
||||||
);
|
);
|
||||||
@@ -132,15 +135,42 @@ class NetworkCacheManager implements Interceptor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool compareHeaders(Map<String, dynamic> a, Map<String, dynamic> b) {
|
static bool compareHeaders(Map<String, dynamic> a, Map<String, dynamic> b) {
|
||||||
a.remove('cache-time');
|
const shouldIgnore = [
|
||||||
a.remove('prevent-parallel');
|
'cache-time',
|
||||||
b.remove('cache-time');
|
'prevent-parallel',
|
||||||
b.remove('prevent-parallel');
|
'date',
|
||||||
|
'x-varnish',
|
||||||
|
'cf-ray',
|
||||||
|
'connection',
|
||||||
|
'vary',
|
||||||
|
'content-encoding',
|
||||||
|
'report-to',
|
||||||
|
'server-timing',
|
||||||
|
'token',
|
||||||
|
'set-cookie',
|
||||||
|
'cf-cache-status',
|
||||||
|
'cf-request-id',
|
||||||
|
'cf-ray',
|
||||||
|
'authorization',
|
||||||
|
];
|
||||||
|
for (var key in shouldIgnore) {
|
||||||
|
a.remove(key);
|
||||||
|
b.remove(key);
|
||||||
|
}
|
||||||
if (a.length != b.length) {
|
if (a.length != b.length) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (var key in a.keys) {
|
for (var key in a.keys) {
|
||||||
if (a[key] != b[key]) {
|
if (a[key] is List && b[key] is List) {
|
||||||
|
if (a[key].length != b[key].length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < a[key].length; i++) {
|
||||||
|
if (a[key][i] != b[key][i]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (a[key] != b[key]) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -161,7 +191,7 @@ class NetworkCacheManager implements Interceptor {
|
|||||||
var cache = NetworkCache(
|
var cache = NetworkCache(
|
||||||
uri: response.requestOptions.uri,
|
uri: response.requestOptions.uri,
|
||||||
requestHeaders: response.requestOptions.headers,
|
requestHeaders: response.requestOptions.headers,
|
||||||
responseHeaders: response.headers.map,
|
responseHeaders: Map.from(response.headers.map),
|
||||||
data: response.data,
|
data: response.data,
|
||||||
time: DateTime.now(),
|
time: DateTime.now(),
|
||||||
size: size,
|
size: size,
|
||||||
|
Reference in New Issue
Block a user