Я храню свои данные в localStorage. Поскольку я храню много данных, мне нужно сжать его. Я делаю это с GZip. Все работает, но я узнал, что мое преобразование из списка, результат GZip для Utf8 чрезвычайно медленный. На 500 тыс. Данных это может занять до 5 минут на быстром компьютере.Как преобразовать двоичные данные в строку utf8 после dart2js
Проблема возникает главным образом во время функции загрузки.
Нагрузка:
import 'dart:convert';
import 'package:archive/archive.dart';
import 'package:crypto/crypto.dart';
var base64 = CryptoUtils.base64StringToBytes(window.localStorage[storageName]);
var decompress = new GZipDecoder().decodeBytes(base64);
storage = JSON.decode(new Utf8Decoder().convert(decompress));
Сохранить:
var g = JSON.encode(storage);
List<int> bz2 = new GZipEncoder().encode(new Utf8Encoder().convert(g));
window.localStorage[storageName] = CryptoUtils.bytesToBase64(bz2);
Я делаю что-то не так? Есть ли другой способ преобразования списка в строку в дротике? Кроме того, я сохраняю и загружаю, поэтому нет необходимости в utf8.
Я пробовал Ascii, но это вызывает ошибку для неподдерживаемого символа. У меня есть работающий латинский 1, для которого гораздо более высокая производительность, но я все равно получаю некоторый неподдерживаемый характер.
Какой GZipDecoder вы используете в браузере? –
Я использую GZipDecoder из пакета import: archive/archive.dart '; которая быстрая, проблема с Utf8Decoder. – darkzangel
Я подал http://dartbug.com/22330. Я не уверен, когда у нас будет время изучить его. (Не стесняйтесь напоминать нам время от времени об ошибке, если ничего не происходит). –