CDNキャッシュのオン・オフを切り替えられるように
This commit is contained in:
		
							parent
							
								
									5ad0fe70a1
								
							
						
					
					
						commit
						677e980a1c
					
				|  | @ -5222,6 +5222,14 @@ export interface Locale extends ILocale { | |||
|      * 注意事項を理解した上でオンにします。 | ||||
|      */ | ||||
|     "acknowledgeNotesAndEnable": string; | ||||
|     /** | ||||
|      * リアルタイム更新時のノート取得にCDNキャッシュを併用する | ||||
|      */ | ||||
|     "enableStreamNotesCdnCache": string; | ||||
|     /** | ||||
|      * サーバーでCDNを使用している場合は、この設定をオンにしたうえでCDNの設定を適切に調整するとサーバーへの負荷を軽減できます(上級者向け)。WebSocket通信ではリアルタイム性のある情報のみを送信し、残りの情報はCDNキャッシュから取得して突合します。このため、クライアント側の負荷やデータ通信量に影響が出る可能性があります。 | ||||
|      */ | ||||
|     "enableStreamNotesCdnCacheDescription": string; | ||||
|     "_accountSettings": { | ||||
|         /** | ||||
|          * コンテンツの表示にログインを必須にする | ||||
|  |  | |||
|  | @ -1301,6 +1301,8 @@ lockdown: "ロックダウン" | |||
| pleaseSelectAccount: "アカウントを選択してください" | ||||
| availableRoles: "利用可能なロール" | ||||
| acknowledgeNotesAndEnable: "注意事項を理解した上でオンにします。" | ||||
| enableStreamNotesCdnCache: "リアルタイム更新時のノート取得にCDNキャッシュを併用する" | ||||
| enableStreamNotesCdnCacheDescription: "サーバーでCDNを使用している場合は、この設定をオンにしたうえでCDNの設定を適切に調整するとサーバーへの負荷を軽減できます(上級者向け)。WebSocket通信ではリアルタイム性のある情報のみを送信し、残りの情報はCDNキャッシュから取得して突合します。このため、クライアント側の負荷やデータ通信量に影響が出る可能性があります。" | ||||
| 
 | ||||
| _accountSettings: | ||||
|   requireSigninToViewContents: "コンテンツの表示にログインを必須にする" | ||||
|  |  | |||
|  | @ -0,0 +1,16 @@ | |||
| /* | ||||
|  * SPDX-FileCopyrightText: syuilo and misskey-project | ||||
|  * SPDX-License-Identifier: AGPL-3.0-only | ||||
|  */ | ||||
| 
 | ||||
| export class StreamNotesCdnCache1735377503979 { | ||||
|     name = 'StreamNotesCdnCache1735377503979' | ||||
| 
 | ||||
|     async up(queryRunner) { | ||||
|         await queryRunner.query(`ALTER TABLE "meta" ADD "enableStreamNotesCdnCache" boolean NOT NULL DEFAULT false`); | ||||
|     } | ||||
| 
 | ||||
|     async down(queryRunner) { | ||||
|         await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableStreamNotesCdnCache"`); | ||||
|     } | ||||
| } | ||||
|  | @ -609,6 +609,11 @@ export class MiMeta { | |||
| 	}) | ||||
| 	public enableReactionsBuffering: boolean; | ||||
| 
 | ||||
| 	@Column('boolean', { | ||||
| 		default: false, | ||||
| 	}) | ||||
| 	public enableStreamNotesCdnCache: boolean; | ||||
| 
 | ||||
| 	@Column('integer', { | ||||
| 		default: 0, | ||||
| 	}) | ||||
|  |  | |||
|  | @ -215,6 +215,10 @@ export const packedMetaLiteSchema = { | |||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		enableStreamNotesCdnCache: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		backgroundImageUrl: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
|  |  | |||
|  | @ -396,6 +396,10 @@ export const meta = { | |||
| 				type: 'boolean', | ||||
| 				optional: false, nullable: false, | ||||
| 			}, | ||||
| 			enableStreamNotesCdnCache: { | ||||
| 				type: 'boolean', | ||||
| 				optional: false, nullable: false, | ||||
| 			}, | ||||
| 			notesPerOneAd: { | ||||
| 				type: 'number', | ||||
| 				optional: false, nullable: false, | ||||
|  | @ -652,6 +656,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | |||
| 				perUserHomeTimelineCacheMax: instance.perUserHomeTimelineCacheMax, | ||||
| 				perUserListTimelineCacheMax: instance.perUserListTimelineCacheMax, | ||||
| 				enableReactionsBuffering: instance.enableReactionsBuffering, | ||||
| 				enableStreamNotesCdnCache: instance.enableStreamNotesCdnCache, | ||||
| 				notesPerOneAd: instance.notesPerOneAd, | ||||
| 				summalyProxy: instance.urlPreviewSummaryProxyUrl, | ||||
| 				urlPreviewEnabled: instance.urlPreviewEnabled, | ||||
|  |  | |||
|  | @ -150,6 +150,7 @@ export const paramDef = { | |||
| 		perUserHomeTimelineCacheMax: { type: 'integer' }, | ||||
| 		perUserListTimelineCacheMax: { type: 'integer' }, | ||||
| 		enableReactionsBuffering: { type: 'boolean' }, | ||||
| 		enableStreamNotesCdnCache: { type: 'boolean' }, | ||||
| 		notesPerOneAd: { type: 'integer' }, | ||||
| 		silencedHosts: { | ||||
| 			type: 'array', | ||||
|  | @ -631,6 +632,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | |||
| 				set.enableReactionsBuffering = ps.enableReactionsBuffering; | ||||
| 			} | ||||
| 
 | ||||
| 			if (ps.enableStreamNotesCdnCache !== undefined) { | ||||
| 				set.enableStreamNotesCdnCache = ps.enableStreamNotesCdnCache; | ||||
| 			} | ||||
| 
 | ||||
| 			if (ps.notesPerOneAd !== undefined) { | ||||
| 				set.notesPerOneAd = ps.notesPerOneAd; | ||||
| 			} | ||||
|  |  | |||
|  | @ -661,6 +661,12 @@ export class ClientServerService { | |||
| 		}); | ||||
| 
 | ||||
| 		fastify.get<{ Params: { note: string; } }>('/notes/:note.json', async (request, reply) => { | ||||
| 			// 内部用途なのでCORSを無効化
 | ||||
| 			reply.removeHeader('Access-Control-Allow-Origin'); | ||||
| 
 | ||||
| 			// this.meta.enableStreamNotesCdnCacheにかかわらずレスポンスは返す
 | ||||
| 			// (このプロパティを見ずにminimizeでChannelに繋いだ場合用)
 | ||||
| 
 | ||||
| 			const note = await this.notesRepository.findOneBy({ | ||||
| 				id: request.params.note, | ||||
| 			}); | ||||
|  |  | |||
|  | @ -122,7 +122,7 @@ async function prepend(data: Misskey.entities.Note | Misskey.entities.StreamNote | |||
| let connection: Misskey.ChannelConnection | null = null; | ||||
| let connection2: Misskey.ChannelConnection | null = null; | ||||
| let paginationQuery: Paging | null = null; | ||||
| const minimize = !iAmModerator; | ||||
| const minimize = !iAmModerator && instance.enableStreamNotesCdnCache; | ||||
| 
 | ||||
| const stream = useStream(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,6 +43,13 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| 				</MkSwitch> | ||||
| 			</div> | ||||
| 
 | ||||
| 			<div class="_panel" style="padding: 16px;"> | ||||
| 				<MkSwitch v-model="enableStreamNotesCdnCache" @change="onChange_enableStreamNotesCdnCache"> | ||||
| 					<template #label>{{ i18n.ts.enableStreamNotesCdnCache }}<span class="_beta">{{ i18n.ts.beta }}</span></template> | ||||
| 					<template #caption>{{ i18n.ts.enableStreamNotesCdnCacheDescription }}</template> | ||||
| 				</MkSwitch> | ||||
| 			</div> | ||||
| 
 | ||||
| 			<MkFolder :defaultOpen="true"> | ||||
| 				<template #icon><i class="ti ti-bolt"></i></template> | ||||
| 				<template #label>Misskey® Fan-out Timeline Technology™ (FTT)</template> | ||||
|  | @ -129,6 +136,7 @@ const enableIdenticonGeneration = ref(meta.enableIdenticonGeneration); | |||
| const enableChartsForRemoteUser = ref(meta.enableChartsForRemoteUser); | ||||
| const enableStatsForFederatedInstances = ref(meta.enableStatsForFederatedInstances); | ||||
| const enableChartsForFederatedInstances = ref(meta.enableChartsForFederatedInstances); | ||||
| const enableStreamNotesCdnCache = ref(meta.enableStreamNotesCdnCache); | ||||
| 
 | ||||
| function onChange_enableServerMachineStats(value: boolean) { | ||||
| 	os.apiWithDialog('admin/update-meta', { | ||||
|  | @ -170,6 +178,14 @@ function onChange_enableChartsForFederatedInstances(value: boolean) { | |||
| 	}); | ||||
| } | ||||
| 
 | ||||
| function onChange_enableStreamNotesCdnCache(value: boolean) { | ||||
| 	os.apiWithDialog('admin/update-meta', { | ||||
| 		enableStreamNotesCdnCache: value, | ||||
| 	}).then(() => { | ||||
| 		fetchInstance(true); | ||||
| 	}); | ||||
| } | ||||
| 
 | ||||
| const fttForm = useForm({ | ||||
| 	enableFanoutTimeline: meta.enableFanoutTimeline, | ||||
| 	enableFanoutTimelineDbFallback: meta.enableFanoutTimelineDbFallback, | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -5015,6 +5015,7 @@ export type components = { | |||
|       translatorAvailable: boolean; | ||||
|       mediaProxy: string; | ||||
|       enableUrlPreview: boolean; | ||||
|       enableStreamNotesCdnCache: boolean; | ||||
|       backgroundImageUrl: string | null; | ||||
|       impressumUrl: string | null; | ||||
|       logoImageUrl: string | null; | ||||
|  | @ -5189,6 +5190,7 @@ export type operations = { | |||
|             perUserHomeTimelineCacheMax: number; | ||||
|             perUserListTimelineCacheMax: number; | ||||
|             enableReactionsBuffering: boolean; | ||||
|             enableStreamNotesCdnCache: boolean; | ||||
|             notesPerOneAd: number; | ||||
|             backgroundImageUrl: string | null; | ||||
|             deeplAuthKey: string | null; | ||||
|  | @ -9587,6 +9589,7 @@ export type operations = { | |||
|           perUserHomeTimelineCacheMax?: number; | ||||
|           perUserListTimelineCacheMax?: number; | ||||
|           enableReactionsBuffering?: boolean; | ||||
|           enableStreamNotesCdnCache?: boolean; | ||||
|           notesPerOneAd?: number; | ||||
|           silencedHosts?: string[] | null; | ||||
|           mediaSilencedHosts?: string[] | null; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue