!201 generateKey方法减少sparkMD5和stringify操作

Merge pull request !201 from zgf/3.x
This commit is contained in:
Madi 2024-04-18 10:31:35 +00:00 committed by Gitee
commit f07c401dc2
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 37 additions and 28 deletions

View File

@ -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)
}
}

View File

@ -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 {