Добавил сжатие данных книги в кеше
This commit is contained in:
@@ -3,7 +3,7 @@ import localForage from 'localforage';
|
||||
import * as utils from '../../../share/utils';
|
||||
import BookParser from './BookParser';
|
||||
|
||||
const maxDataSize = 500*1024*1024;//chars, not bytes
|
||||
const maxDataSize = 300*1024*1024;//compressed bytes
|
||||
|
||||
const bmMetaStore = localForage.createInstance({
|
||||
name: 'bmMetaStore'
|
||||
@@ -97,7 +97,8 @@ class BookManager {
|
||||
let toDel = null;
|
||||
for (let key in this.books) {
|
||||
let book = this.books[key];
|
||||
size += (book.length ? book.length : 0);
|
||||
const bookLength = (book.length ? book.length : 0);
|
||||
size += (book.dataCompressedLength ? book.dataCompressedLength : bookLength);
|
||||
|
||||
if (book.addTime < min) {
|
||||
toDel = book;
|
||||
@@ -120,15 +121,29 @@ class BookManager {
|
||||
meta.key = this.keyFromUrl(meta.url);
|
||||
meta.addTime = Date.now();
|
||||
|
||||
const result = await this.parseBook(meta, newBook.data, callback);
|
||||
const cb = (perc) => {
|
||||
const p = Math.round(80*perc/100);
|
||||
callback(p);
|
||||
};
|
||||
|
||||
const result = await this.parseBook(meta, newBook.data, cb);
|
||||
result.dataCompressed = true;
|
||||
|
||||
let data = newBook.data;
|
||||
if (result.dataCompressed) {
|
||||
data = utils.pako.deflate(data, {level: 9});
|
||||
result.dataCompressedLength = data.byteLength;
|
||||
}
|
||||
callback(90);
|
||||
|
||||
this.books[meta.key] = result;
|
||||
this.booksCached[meta.key] = this.metaOnly(result);
|
||||
|
||||
await bmMetaStore.setItem(`bmMeta-${meta.key}`, this.metaOnly(result));
|
||||
await bmDataStore.setItem(`bmData-${meta.key}`, newBook.data);
|
||||
await bmDataStore.setItem(`bmData-${meta.key}`, data);
|
||||
await bmCacheStore.setItem('books', this.booksCached);
|
||||
|
||||
callback(100);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -149,11 +164,25 @@ class BookManager {
|
||||
let result = undefined;
|
||||
if (!meta.key)
|
||||
meta.key = this.keyFromUrl(meta.url);
|
||||
|
||||
result = this.books[meta.key];
|
||||
|
||||
if (result && !result.parsed) {
|
||||
const data = await bmDataStore.getItem(`bmData-${meta.key}`);
|
||||
result = await this.parseBook(result, data, callback);
|
||||
let data = await bmDataStore.getItem(`bmData-${meta.key}`);
|
||||
callback(10);
|
||||
await utils.sleep(10);
|
||||
|
||||
if (result.dataCompressed) {
|
||||
data = utils.pako.inflate(data, {to: 'string'});
|
||||
}
|
||||
callback(20);
|
||||
|
||||
const cb = (perc) => {
|
||||
const p = 20 + Math.round(80*perc/100);
|
||||
callback(p);
|
||||
};
|
||||
|
||||
result = await this.parseBook(result, data, cb);
|
||||
this.books[meta.key] = result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user