Preload / Cache NSImage в какао - PullRequest
       37

Preload / Cache NSImage в какао

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

Я реализовал некоторые логики предварительного рендеринга и кэширования c для моего приложения, которые выводят aws страницу PDF как NSImage и затем сохраняют ее в NSCache.

func prerender() {
    DispatchQueue.global(qos: .background).async {
        guard let page = pdfDocument.page(at: i) else { return }
        guard let pdfImage = self.createImage(from: page, mode: .full) else { return }
        pdfImage.cacheMode = .always
        self.cache.setObject(pdfImage, forKey: CacheKey(pageNumber: i))
    }
}

func createImage(from page: PDFPage) -> NSImage? {        
    // Generate data and image
    guard let pageData = page.dataRepresentation else { return nil }
    guard let imageRep = NSPDFImageRep(data: pageData) else { return nil }

    return NSImage(size: imageRep.size, flipped: false, drawingHandler: { (rect) -> Bool in
        guard let ctx = NSGraphicsContext.current?.cgContext else { return false }
        NSColor.white.set()
        ctx.fill(rect)

        imageRep.draw(in: rect)

        return true
    })
}

Но я заметил, что когда я впервые отображаю изображение из (предварительно обработанного) кэша в реальном виде, это занимает немного времени. Когда он отображается во второй раз, это происходит намного быстрее, почти мгновенно. Что за кеширование там происходит и как я могу сделать это сам заранее?

...