Я реализовал некоторые логики предварительного рендеринга и кэширования 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
})
}
Но я заметил, что когда я впервые отображаю изображение из (предварительно обработанного) кэша в реальном виде, это занимает немного времени. Когда он отображается во второй раз, это происходит намного быстрее, почти мгновенно. Что за кеширование там происходит и как я могу сделать это сам заранее?