!201 generateKey方法减少sparkMD5和stringify操作
Merge pull request !201 from zgf/3.x
This commit is contained in:
commit
f07c401dc2
|
@ -32,6 +32,7 @@ import taskpool from '@ohos.taskpool';
|
|||
import { FileTypeUtil } from './utils/FileTypeUtil';
|
||||
import util from '@ohos.util';
|
||||
import { Tools } from './utils/Tools';
|
||||
import { SparkMD5 } from './3rd_party/sparkmd5/spark-md5';
|
||||
|
||||
export class ImageKnifeDispatcher {
|
||||
// 最大并发
|
||||
|
@ -41,10 +42,43 @@ export class ImageKnifeDispatcher {
|
|||
// 执行中的请求
|
||||
executingJobMap: LightWeightMap<string, List<ImageKnifeRequestWithSource>> = new LightWeightMap();
|
||||
|
||||
private keyCache: util.LRUCache<string,string> = new util.LRUCache(1024)
|
||||
|
||||
showFromMemomry(request: ImageKnifeRequest,imageSrc: string | PixelMap | Resource, requestSource: ImageKnifeRequestSource): boolean {
|
||||
let memoryCache: ImageKnifeData | undefined = ImageKnife.getInstance()
|
||||
.loadFromMemoryCache(Tools.generateKey(imageSrc))
|
||||
if (memoryCache !== undefined) {
|
||||
// 画主图
|
||||
if (request.requestState === ImageKnifeRequestState.PROGRESS) {
|
||||
request.ImageKnifeRequestCallback?.showPixelMap(request.componentVersion, memoryCache.source)
|
||||
|
||||
if (requestSource == ImageKnifeRequestSource.SRC) {
|
||||
request.requestState = ImageKnifeRequestState.COMPLETE
|
||||
} else if (requestSource == ImageKnifeRequestSource.ERROR_HOLDER) {
|
||||
request.requestState = ImageKnifeRequestState.ERROR
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 生成唯一的key
|
||||
generateKey(key: string | PixelMap | Resource): string {
|
||||
let keyCache = typeof key == "string"? key : JSON.stringify(key)
|
||||
let result = this.keyCache.get(keyCache)
|
||||
if(result != undefined) {
|
||||
return result
|
||||
} else {
|
||||
result = SparkMD5.hashBinary(keyCache)
|
||||
this.keyCache.put(keyCache,result)
|
||||
return result
|
||||
}
|
||||
}
|
||||
enqueue(request: ImageKnifeRequest): void {
|
||||
|
||||
//1.内存有的话直接渲染
|
||||
if (request.showFromMemomry(request.ImageKnifeOption.loadSrc, ImageKnifeRequestSource.SRC)) {
|
||||
if (this.showFromMemomry(request,request.ImageKnifeOption.loadSrc, ImageKnifeRequestSource.SRC)) {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -59,7 +93,7 @@ export class ImageKnifeDispatcher {
|
|||
executeJob(request: ImageKnifeRequest): void {
|
||||
// 加载占位符
|
||||
if (request.ImageKnifeOption.placeholderSrc !== undefined) {
|
||||
if (request.showFromMemomry(request.ImageKnifeOption.placeholderSrc, ImageKnifeRequestSource.PLACE_HOLDER) === false) {
|
||||
if (this.showFromMemomry(request,request.ImageKnifeOption.placeholderSrc, ImageKnifeRequestSource.PLACE_HOLDER) === false) {
|
||||
this.getAndShowImage(request, request.ImageKnifeOption.placeholderSrc, ImageKnifeRequestSource.PLACE_HOLDER)
|
||||
}
|
||||
}
|
||||
|
@ -107,7 +141,7 @@ export class ImageKnifeDispatcher {
|
|||
requestList.forEach((requestWithSource: ImageKnifeRequestWithSource) => {
|
||||
if (requestWithSource.source === ImageKnifeRequestSource.SRC && currentRequest.ImageKnifeOption.errorholderSrc !== undefined) {
|
||||
|
||||
if (currentRequest.showFromMemomry(currentRequest.ImageKnifeOption.errorholderSrc, ImageKnifeRequestSource.ERROR_HOLDER) === false) {
|
||||
if (this.showFromMemomry(currentRequest,currentRequest.ImageKnifeOption.errorholderSrc, ImageKnifeRequestSource.ERROR_HOLDER) === false) {
|
||||
this.getAndShowImage(currentRequest, currentRequest.ImageKnifeOption.errorholderSrc, ImageKnifeRequestSource.ERROR_HOLDER)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,31 +44,6 @@ export class ImageKnifeRequest {
|
|||
this.componentVersion = version
|
||||
this.ImageKnifeRequestCallback = ImageKnifeRequestCallback
|
||||
}
|
||||
|
||||
showFromMemomry(imageSrc: string | PixelMap | Resource, requestSource: ImageKnifeRequestSource): boolean {
|
||||
let memoryCache: ImageKnifeData | undefined = ImageKnife.getInstance()
|
||||
.loadFromMemoryCache(Tools.generateKey(this.ImageKnifeOption.loadSrc))
|
||||
if (memoryCache !== undefined) {
|
||||
// 画主图
|
||||
if (this.requestState === ImageKnifeRequestState.PROGRESS) {
|
||||
this.ImageKnifeRequestCallback?.showPixelMap(this.componentVersion, memoryCache.source)
|
||||
|
||||
if (requestSource == ImageKnifeRequestSource.SRC) {
|
||||
this.requestState = ImageKnifeRequestState.COMPLETE
|
||||
} else if (requestSource == ImageKnifeRequestSource.ERROR_HOLDER) {
|
||||
this.requestState = ImageKnifeRequestState.ERROR
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 生成唯一的key
|
||||
generateKey(key: string | PixelMap | Resource): string {
|
||||
// todo 补充变换
|
||||
return SparkMD5.hashBinary(JSON.stringify(key)) as string
|
||||
}
|
||||
}
|
||||
|
||||
export enum ImageKnifeRequestState {
|
||||
|
|
Loading…
Reference in New Issue