Синтаксический анализ Json в приложении flutter занимает слишком много времени

#json #flutter

#json #флаттер

Вопрос:

У меня есть файл json с 40 000 записей ок. Я пытаюсь проанализировать его в своем приложении flutter. я получаю json и успешно конвертирую его в желаемую модель. Но проблема в том, что загрузка занимает слишком много времени. Мой файл json хранится в хранилище Firebase. Есть ли какой-либо другой способ, чтобы он мог быстро загружаться? Я думал о сохранении данных в базе данных реального времени, но я уверен, что и там это быстро даст результаты или нет. Любые предложения были бы очень полезны.

 class CollegeCode {
  final String college_code;
  final String studentcode;
  final String college_Name;
  final String college_Location;

  CollegeCode({this.college_code, this.college_Name, this.college_Location, this.studentcode});

  factory CollegeCode.fromJson(Map<String, dynamic> json) =>
     CollegeCode(
      college_code: json['College Code'] ,
      college_Location: json['Location'],
      college_Name: json['College Name'],
      studentcode: json['Student Code']
    );

}
class GetList{
  GetList({this.data});
  List<CollegeCode> data;

  factory GetList.fromJson(Map<String, dynamic> json) {
    // print(json['CollegesList'].toString());
    if(json != null){

      return GetList(

        data: List<CollegeCode>.from(

            json["CollegesList"].map((x) => CollegeCode.fromJson(x))).toList() ?? [],
      );
    }
    return GetList(data: []);

  }
}

Future <List<CollegeCode>> parsePhotos(String responseBody) async{

    if(responseBody.isNotEmpty) {
      final parsed = await GetList.fromJson(json.decode(responseBody));

      final datalist = parsed.data.toList();
      return datalist;
    }

}



Future<List<CollegeCode>> fetchPhotos(http.Client client) async {
  final response =
  await client.get(url of file in storage bucket');

  // print(response.body);
  return parsePhotos(response.body);
  // return compute(parsePhotos, response.body);
}

  

Я хочу знать, есть ли какая-либо альтернатива тому, чтобы сделать то же самое.

Ответ №1:

Не ожидайте, что 40 000 записей будут обрабатываться мгновенно. Если вы хотите использовать локальную базу данных, пакет sqflite отлично подходит для этой цели, поскольку он даже предоставляет пакеты, в которых большие объемы информации могут быть обработаны за более короткое время, хотя и с затратами памяти.

Кроме того, вы можете проверить, подпадает ли объем обрабатываемой вами информации под эти параметры

Комментарии:

1. я не знаком с пакетом sqflite. я обязательно проверю это. Я хочу знать, есть ли какая-либо замена этому. так что мне не нужно анализировать такое количество записей сразу.

Ответ №2:

Вы уверены, что это декодирование, которое требует времени по сравнению с передачей этого гигантского файла по проводам?

Комментарии:

1. Я не уверен в этом. Я использую future builder для доступа к данным. Я добавил фрагмент, как я и пытаюсь это сделать.

2. В вашем фрагменте нет красных флажков. Итак, что бы я сделал, это напечатал там информацию о времени, чтобы точно определить, какая часть принимает большее участие. Что-то вроде этого: final stopwatch = Stopwatch()..start(); <...expansive operation...>; print('done in ${stopwatch.elapsed}'); . Так что, по крайней мере, вы можете выяснить, убивает ли вас обход сервера или синтаксический анализ json.