Как улучшить скорость работы дротика? - PullRequest
0 голосов
/ 15 ноября 2018

Я только начал программировать игру во флаттере, но у меня проблема в том, что метод используется очень медленно, около 6 секунд с 4 игроками. Я хочу улучшить это.

Что я сделал до сих пор:

  • Сделайте все асинхронным и дождитесь его в конце, но я не знаю почему, это не улучшает скорость. По крайней мере, не настолько, чтобы вы могли это почувствовать.

Хорошо было бы, если этот метод работает менее чем за секунду. Но у меня нет идей, как улучшить скорость.

Вот код:

Future nextRound(
  ChatMessageRound chatMessageRound, String gamePlayId, Chat chat) async {
if (chatMessageRound.getWinner().length <= 0)
  throw NoWinnerMarkedException();
var futures = List<Future>();
var gamePlay =
    await _chatRepository.getGamePlayRepository(chat.id).get(gamePlayId);

var winnerIds = ListBuilder<String>(
    gamePlay.winnerIds.toList(growable: true)
      ..addAll(chatMessageRound.getWinner()));
var chatMessageGameRoundIds = ListBuilder<String>(
    gamePlay.chatMessageGameRoundIds.toList(growable: true)
      ..add(chatMessageRound.id));
gamePlay = gamePlay.rebuild((builder) {
  builder.winnerIds = winnerIds;
  builder.chatMessageGameRoundIds = chatMessageGameRoundIds;
});

var newChatMessageRound =
    chatMessageRound.rebuild((builder) => builder.disabled = true);
futures.add(_chatRepository
    .getChatMessagesRepository(chat.id)
    .update(newChatMessageRound));

if (gamePlay.chatMessageGameRoundIds.length >=
    _remoteConfigRepository.gamesToPlayCount()) {
  var player = getPlayer(chat, gamePlay.playerIds);
  var scoreMembers = player.map((member) {
    return ChatMessageScoreUserInfo((builder) {
      builder.name = member.name;
      builder.profilePictureUrl = member.profilePictureDownloadUrl;
      builder.userId = member.userId;
      builder.score = gamePlay.winnerIds
          .where((winnerId) => winnerId == member.userId)
          .length;
    });
  });

  for (var player in scoreMembers) {
    futures.add(Future<dynamic>(() async {
      var user = await getUser(player.userId);
      user = user.rebuild((builder) {
        builder.points = builder.points + player.score;
      });
      await updateUser(user);
    }));
  }

  var chatMessageScore = ChatMessageScore((builder) {
    builder.scorePossible = _remoteConfigRepository.gamesToPlayCount();
    builder.members = ListBuilder(scoreMembers);
  });

  futures.add(_chatRepository
      .getChatMessagesRepository(chat.id)
      .add(chatMessageScore));
} else {
  futures.add(
      startRound(chat, gamePlay.playerIds, previousGamePlay: gamePlay));
}
futures
    .add(_chatRepository.getGamePlayRepository(chat.id).update(gamePlay));
await Future.wait<dynamic>(futures);
}

Моя база данных пожарная. Если вам нужны подробности, напишите комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...