Sobes.tech
Junior — Middle

შეგიძლიათ გაუზიაროთ ტექნიკური გაუმჯობესების მაგალითი პროექტში და აღწეროთ მისი განხორციელება?

sobes.tech AI

პასუხი AI-სგან

ჩემი iOS პროექტის ერთ-ერთში, მე გავაუმჯობესე სურათების ჩატვირთვის სიჩქარე სიის (UITableView) შიგნით, გამოყენებით კეშინგისა და ასინქრონული ჩატვირთვის.

მიღწევა:

  • გამოვიყენე NSCache უკვე ჩატვირთული სურათების შენახვისთვის, რათა თავიდან ავიცილო მათი ხელახლა ჩატვირთვა ქსელიდან.
  • cellForRowAt მეთოდში ვამოწმებდი, არის თუ არა სურათი კეშში; თუ არის, მაშინვე ვაჩვენებდი.
  • თუ არა, დავიწყე ასინქრონული ჩატვირთვა URLSession-ის მეშვეობით, ჩატვირთვის შემდეგ სურათი შევინახე კეშში და განაახლე უჯრა.

კოდის მაგალითი:

let imageCache = NSCache<NSString, UIImage>()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    let urlString = imageURLs[indexPath.row]

    if let cachedImage = imageCache.object(forKey: urlString as NSString) {
        cell.imageView?.image = cachedImage
    } else {
        cell.imageView?.image = nil
        DispatchQueue.global().async {
            if let url = URL(string: urlString),
               let data = try? Data(contentsOf: url),
               let image = UIImage(data: data) {
                self.imageCache.setObject(image, forKey: urlString as NSString)
                DispatchQueue.main.async {
                    if let updateCell = tableView.cellForRow(at: indexPath) {
                        updateCell.imageView?.image = image
                        updateCell.setNeedsLayout()
                    }
                }
            }
        }
    }
    return cell
}

ეს მნიშვნელოვნად შეამცირა ქსელის დატვირთვა და გაუმჯობესდა სლაიდერის სიჩქარე.