fix: アンテナ、クリップ、リストの表示を速くする (#8518)
* アンテナノートを取得するクエリがタイムアウトしないように速くする * テーブル名を直接指定しないようにする * クリップの取得を速くする * リストの取得を速くする
This commit is contained in:
		
							parent
							
								
									6d33b366f8
								
							
						
					
					
						commit
						dd86397e85
					
				
					 3 changed files with 6 additions and 18 deletions
				
			
		| 
						 | 
					@ -57,13 +57,9 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			||||||
		throw new ApiError(meta.errors.noSuchAntenna);
 | 
							throw new ApiError(meta.errors.noSuchAntenna);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const antennaQuery = AntennaNotes.createQueryBuilder('joining')
 | 
					 | 
				
			||||||
		.select('joining.noteId')
 | 
					 | 
				
			||||||
		.where('joining.antennaId = :antennaId', { antennaId: antenna.id });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const query = makePaginationQuery(Notes.createQueryBuilder('note'),
 | 
						const query = makePaginationQuery(Notes.createQueryBuilder('note'),
 | 
				
			||||||
			ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate)
 | 
								ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate)
 | 
				
			||||||
		.andWhere(`note.id IN (${ antennaQuery.getQuery() })`)
 | 
							.innerJoin(AntennaNotes.metadata.targetName, 'antennaNote', 'antennaNote.noteId = note.id')
 | 
				
			||||||
		.innerJoinAndSelect('note.user', 'user')
 | 
							.innerJoinAndSelect('note.user', 'user')
 | 
				
			||||||
		.leftJoinAndSelect('user.avatar', 'avatar')
 | 
							.leftJoinAndSelect('user.avatar', 'avatar')
 | 
				
			||||||
		.leftJoinAndSelect('user.banner', 'banner')
 | 
							.leftJoinAndSelect('user.banner', 'banner')
 | 
				
			||||||
| 
						 | 
					@ -75,7 +71,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			||||||
		.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
							.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
							.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
							.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
				
			||||||
		.setParameters(antennaQuery.getParameters());
 | 
							.andWhere('antennaNote.antennaId = :antennaId', { antennaId: antenna.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	generateVisibilityQuery(query, user);
 | 
						generateVisibilityQuery(query, user);
 | 
				
			||||||
	generateMutedUserQuery(query, user);
 | 
						generateMutedUserQuery(query, user);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,12 +57,8 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			||||||
		throw new ApiError(meta.errors.noSuchClip);
 | 
							throw new ApiError(meta.errors.noSuchClip);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const clipQuery = ClipNotes.createQueryBuilder('joining')
 | 
					 | 
				
			||||||
		.select('joining.noteId')
 | 
					 | 
				
			||||||
		.where('joining.clipId = :clipId', { clipId: clip.id });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
 | 
						const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
 | 
				
			||||||
		.andWhere(`note.id IN (${ clipQuery.getQuery() })`)
 | 
							.innerJoin(ClipNotes.metadata.targetName, 'clipNote', 'clipNote.noteId = note.id')
 | 
				
			||||||
		.innerJoinAndSelect('note.user', 'user')
 | 
							.innerJoinAndSelect('note.user', 'user')
 | 
				
			||||||
		.leftJoinAndSelect('user.avatar', 'avatar')
 | 
							.leftJoinAndSelect('user.avatar', 'avatar')
 | 
				
			||||||
		.leftJoinAndSelect('user.banner', 'banner')
 | 
							.leftJoinAndSelect('user.banner', 'banner')
 | 
				
			||||||
| 
						 | 
					@ -74,7 +70,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			||||||
		.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
							.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
							.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
							.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
				
			||||||
		.setParameters(clipQuery.getParameters());
 | 
							.andWhere('clipNote.clipId = :clipId', { clipId: clip.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (user) {
 | 
						if (user) {
 | 
				
			||||||
		generateVisibilityQuery(query, user);
 | 
							generateVisibilityQuery(query, user);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,12 +63,8 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//#region Construct query
 | 
						//#region Construct query
 | 
				
			||||||
	const listQuery = UserListJoinings.createQueryBuilder('joining')
 | 
					 | 
				
			||||||
		.select('joining.userId')
 | 
					 | 
				
			||||||
		.where('joining.userListId = :userListId', { userListId: list.id });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
 | 
						const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
 | 
				
			||||||
		.andWhere(`note.userId IN (${ listQuery.getQuery() })`)
 | 
							.innerJoin(UserListJoinings.metadata.targetName, 'userListJoining', 'userListJoining.userId = note.userId')
 | 
				
			||||||
		.innerJoinAndSelect('note.user', 'user')
 | 
							.innerJoinAndSelect('note.user', 'user')
 | 
				
			||||||
		.leftJoinAndSelect('user.avatar', 'avatar')
 | 
							.leftJoinAndSelect('user.avatar', 'avatar')
 | 
				
			||||||
		.leftJoinAndSelect('user.banner', 'banner')
 | 
							.leftJoinAndSelect('user.banner', 'banner')
 | 
				
			||||||
| 
						 | 
					@ -80,7 +76,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			||||||
		.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
							.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
							.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
							.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
				
			||||||
		.setParameters(listQuery.getParameters());
 | 
							.andWhere('userListJoining.userListId = :userListId', { userListId: list.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	generateVisibilityQuery(query, user);
 | 
						generateVisibilityQuery(query, user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue