1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2025-01-14 14:43:17 +08:00

Smaller performance tweeks to thumbnail reading

#437
This commit is contained in:
Patrik J. Braun 2022-06-27 23:46:17 +02:00
parent c06620a795
commit 849ebbec9e
4 changed files with 58 additions and 43 deletions

View File

@ -16,8 +16,8 @@ import { PersonWithSampleRegion } from '../../../common/entities/PersonDTO';
import {ServerTime} from '../ServerTimingMWs';
export class ThumbnailGeneratorMWs {
private static ThumbnailMap: { [key: number]: number } =
Config.Client.Media.Thumbnail.generateThumbnailMap();
private static ThumbnailMapEntries =
Config.Client.Media.Thumbnail.generateThumbnailMapEntries();
@ServerTime('2.th', 'Thumbnail decoration')
public static async addThumbnailInformation(
@ -34,6 +34,10 @@ export class ThumbnailGeneratorMWs {
if (cw.notModified === true) {
return next();
}
// regenerate in case the list change since startup
ThumbnailGeneratorMWs.ThumbnailMapEntries =
Config.Client.Media.Thumbnail.generateThumbnailMapEntries();
if (cw.directory) {
ThumbnailGeneratorMWs.addThInfoTODir(cw.directory);
}
@ -209,8 +213,6 @@ export class ThumbnailGeneratorMWs {
private static addThInfoTODir(
directory: ParentDirectoryDTO | SubDirectoryDTO
): void {
ThumbnailGeneratorMWs.ThumbnailMap =
Config.Client.Media.Thumbnail.generateThumbnailMap();
if (typeof directory.media !== 'undefined') {
ThumbnailGeneratorMWs.addThInfoToPhotos(directory.media);
}
@ -220,8 +222,8 @@ export class ThumbnailGeneratorMWs {
}
private static addThInfoToPhotos(photos: MediaDTO[]): void {
for (const item of photos) {
this.addThInfoToAPhoto(item);
for (let i = 0; i < photos.length; ++i) {
this.addThInfoToAPhoto(photos[i]);
}
}
@ -232,19 +234,18 @@ export class ThumbnailGeneratorMWs {
photo.directory.name,
photo.name
);
for (const _s of Object.keys(ThumbnailGeneratorMWs.ThumbnailMap)) {
const size = parseInt(_s)
for (let i = 0; i < ThumbnailGeneratorMWs.ThumbnailMapEntries.length; ++i) {
const entry = ThumbnailGeneratorMWs.ThumbnailMapEntries[i];
const thPath = PhotoProcessing.generateConvertedPath(
fullMediaPath,
size
entry.size
);
if (fs.existsSync(thPath) !== true) {
if (typeof photo.missingThumbnails === 'undefined') {
photo.missingThumbnails = 0;
}
// this is a bitwise operation
photo.missingThumbnails +=
ThumbnailGeneratorMWs.ThumbnailMap[size];
photo.missingThumbnails += entry.bit;
}
}
}

View File

@ -121,6 +121,13 @@ export class ClientThumbnailConfig {
});
return m;
}
/**
* Generates a map for bitwise operation from icon and normal thumbnails
*/
generateThumbnailMapEntries(): { size: number, bit: number }[] {
return Object.entries(this.generateThumbnailMap()).map(v => ({size: parseInt(v[0]), bit: v[1]}));
}
}
@SubConfigClass()

View File

@ -164,6 +164,10 @@ export class ContentWrapper {
}
}
if (m.missingThumbnails === 0) {
delete m.missingThumbnails;
}
if (MediaDTOUtils.isPhoto(m)) {
delete (m as VideoDTO).metadata.bitRate;
delete (m as VideoDTO).metadata.duration;

View File

@ -34,6 +34,9 @@ describe('ContentWrapper', () => {
delete (m as PhotoDTO).metadata.faces;
delete (m as PhotoDTO).metadata.positionData;
}
if (m.missingThumbnails === 0) {
delete m.missingThumbnails;
}
}
for (let i = 0; i < content.metaFile.length; ++i) {
delete content.metaFile[i].id;