diff --git a/README.md b/README.md index 0a87398..dd44e29 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Performant image component for React Native. Powered by [Nuke](https://github.co ## Benchmarks ->Disclaimer: Benchmark results are based on controlled testing environments and may vary in real-world applications depending on factors such as network conditions, device specifications, image sizes, and concurrent tasks. +> Results may vary in real-world applications depending on factors such as network conditions, device specifications, image sizes, and concurrent tasks. For example, loading 120 images in flatlist. See the code in the example folder: @@ -98,12 +98,6 @@ import TurboImage from 'react-native-turbo-image'; await TurboImage.prefetch([Source]); ``` -### `dispose` - -```ts -await TurboImage.dispose([Source]); -``` - ### `clearMemoryCache` ```ts diff --git a/android/src/main/java/com/turboimage/TurboImageModule.kt b/android/src/main/java/com/turboimage/TurboImageModule.kt index 99b306f..6386c87 100644 --- a/android/src/main/java/com/turboimage/TurboImageModule.kt +++ b/android/src/main/java/com/turboimage/TurboImageModule.kt @@ -59,33 +59,6 @@ class TurboImageModule(private val context: ReactApplicationContext) : } } - @ReactMethod - fun dispose(sources: ReadableArray, promise: Promise) { - val imageRequests = sources.toArrayList().map { source -> - val uri = (source as HashMap<*, *>)["uri"] as String - val headers = source["headers"] as? HashMap<*, *> - - if (headers != null) { - val headersBuilder = Headers.Builder() - headers.map { (key, value) -> - headersBuilder.add(key as String, value as String) - } - ImageRequest.Builder(context) - .headers(headersBuilder.build()) - .data(uri) - .build() - } else { - ImageRequest.Builder(context) - .data(uri) - .build() - } - } - imageRequests.forEach { imageRequest -> - imageLoader?.enqueue(imageRequest)?.dispose() - } - promise.resolve("Success") - } - @ReactMethod fun clearMemoryCache(promise: Promise) { Coil.imageLoader(context).memoryCache?.clear() diff --git a/ios/TurboImageViewManager.swift b/ios/TurboImageViewManager.swift index 696a534..958b147 100644 --- a/ios/TurboImageViewManager.swift +++ b/ios/TurboImageViewManager.swift @@ -3,7 +3,7 @@ import Nuke @objc(TurboImageViewManager) class TurboImageViewManager: RCTViewManager { - private var prefetcher: ImagePrefetcher? + private var prefetchers: [String: ImagePrefetcher] = [:] override func view() -> (TurboImageView) { return TurboImageView() @@ -23,6 +23,7 @@ extension TurboImageViewManager { with cachePolicy: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + let imageRequests: [ImageRequest] = sources.map { guard let uri = $0["uri"] as? String, let url = URL(string: uri) @@ -34,37 +35,22 @@ extension TurboImageViewManager { } return ImageRequest(urlRequest: urlRequest) }.compactMap{ $0 } + + let key = UUID().uuidString + var prefetcher: ImagePrefetcher? if(cachePolicy == "dataCache") { prefetcher = ImagePrefetcher(pipeline: ImagePipeline(configuration: .withDataCache)) } else { prefetcher = ImagePrefetcher() } + prefetchers[key] = prefetcher prefetcher?.startPrefetching(with: imageRequests) prefetcher?.didComplete = { resolve(true) + self.prefetchers[key] = nil } } - @objc - func dispose(_ sources: [Source], - resolve: @escaping RCTPromiseResolveBlock, - reject: @escaping RCTPromiseRejectBlock) { - let imageRequests: [ImageRequest] = sources.map { - guard let uri = $0["uri"] as? String, - let url = URL(string: uri) - else { return nil } - - var urlRequest = URLRequest(url: url) - if let headers = $0["headers"] as? [String: String] { - urlRequest.allHTTPHeaderFields = headers - } - return ImageRequest(urlRequest: urlRequest) - }.compactMap{ $0 } - - prefetcher?.stopPrefetching(with: imageRequests) - resolve("Success") - } - @objc func clearMemoryCache(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {