Скорость загрузки медленных изображений с Kingfisher, в чем моя проблема? - PullRequest
1 голос
/ 21 апреля 2020

У меня есть таблица, в которой загружаются фотографии меню ресторанов в диапазоне от 200 килобайт до 2 МБ с использованием модуля kingFisher.

Downloaded Pictures

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MealCell", for: indexPath) as! MealTableViewCell
    let defaultImage = UIImage(named: "DefaultMeal")
    cell.mealImageView.kf.setImage(with: url, placeholder: defaultImage, options: [.transition(.fade(0.3))])

    bla bla bla...

    return cell
}

I Я не использую предварительную выборку, и я не думаю, что моя проблема связана с предварительной выборкой.

Моя главная проблема заключается в том, что при входе в меню ресторана размером около 800 Кб процесс загрузки начинается очень медленно .

enter image description here

И при очень быстрой прокрутке приходится ждать 1-2 минуты для загрузки всех моих фотографий, по сравнению со скоростью загрузки на мой сервер и моя домашняя скорость загрузки довольно далека.

Я начал искать везде одну и ту же проблему, но не нашел ни одной.

Я использовал этот код для увеличения времени ожидания загрузчика, и он работал для изображения, которые вообще перестают загружаться.

    KingfisherManager.shared.downloader.downloadTimeout = 600

А также, когда я открываю вкладку сети отладчика Xcode, я понимаю, что мое приложение зависит только от одного TCP-соединения и, как показано на рисунке ниже, оно ОНЛ y использует 73 КБ / с для этих больших изображений.

Network Debugger

Я также пытался это сделать, но проблема все еще заключается в том, что загрузка все еще зависит только от одного подключения .

KingfisherManager.shared.downloader.sessionConfiguration.httpMaximumConnectionsPerHost = 8

Что именно я делаю не так, есть ли способ загрузить его быстрее.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 апреля 2020

Изображение продолжает загружаться после прокрутки мимо него. Вы хотите отменить этот запрос, так как ячейка больше не видна. Я бы порекомендовал вам отменить загрузку в методе prepareForReuse ячейки с помощью cancelDownloadTask. Настройка отображения изображения из одной ячейки в другой при повторном использовании ячейки. Пожалуйста, дайте мне знать, если это поможет.

override func prepareForReuse() {
    super.prepareForReuse()

    icon.kf.cancelDownloadTask()
    icon.image = nil
}
...