Dev Depot: Fast Image Cache
Part of any good app’s user experience is fast, smooth scrolling, but this places a significant burden on performance for graphics rich applications, because the traditional method of loading individual images from disk is too slow — especially while scrolling.
The makers of Fast Image Cache (www.github.com/path/FastImageCache) set out to solve this problem by creating an efficient, persistent, and above all fast way to store and retrieve images in iOS apps. It does this by storing images of similar sizes and styles together, persisting image data to disk and returning images to users significantly faster than by traditional methods. Automatically managing cache expiry based on actual usage, Fast Image Cache utilizes a model-based approach for storing and retrieving images that allows image processing on a permodel basis before storing the image into the cache.
“iOS applications, especially those in the social networking space, often have many images to display at once, such as user photos,” a Fast Image Cache spokesperson states. “The intuitive, traditional approach is to request image data from an API, process the original images to create the desired sizes and styles, and [then] store these processed images on the device.”
When an application needs to display these images, they are loaded from disk into memory and displayed in an image view, or otherwise shown on screen. The problem he notes is that the process of going from compressed, on-disk image data to a fully rendered Core Animation layer that the user can actually see is very expensive, overhead-wise.
“As the number of images to be displayed increases, this cost easily adds up to a noticeable degradation in frame rate, and scrollable views further exacerbate the situation because content can change rapidly, requiring fast processing time to maintain a smooth 60FPS [frame rate],” the spokesperson explains. “These costs can easily accumulate and kill perceived application performance. Especially while scrolling, users are presented with an unsatisfying user experience that is not in line with the overall iOS experience.”
Fast Image Cache provides a solution by minimizing (or avoiding entirely) much of the problem, using a variety of techniques, including byte alignment, memory mapping, and using uncompressed image data. At the heart of this system are image tables.
“Image tables are similar to sprite sheets, often used in 2D gaming [and combine] images of the same dimensions into a single file,” the spokesperson added. “This file is opened once and is left open for reading and writing for as long as an application remains in memory.”
Image tables store uncompressed image data in their files to avoid expensive image decompression operations, but this approach has consequences.
“Uncompressed image data requires more disk space, and the difference between compressed and uncompressed file sizes can be significant, especially for image formats [such as] JPEG,” the spokesperson concludes. “For this reason, Fast Image Cache works best with smaller images, although there is no API restriction that enforces this.”
Fast Image Cache is offered under the MIT license, requires iOS 6.0 or greater, and relies on the Core Graphics, Foundation and UIKit frameworks. If you develop iOS apps, and want to speed them up, then visit GitHub and give Fast Image Cache a try.