CDNキャッシュのオン・オフを切り替えられるように
This commit is contained in:
parent
5ad0fe70a1
commit
677e980a1c
|
@ -5222,6 +5222,14 @@ export interface Locale extends ILocale {
|
||||||
* 注意事項を理解した上でオンにします。
|
* 注意事項を理解した上でオンにします。
|
||||||
*/
|
*/
|
||||||
"acknowledgeNotesAndEnable": string;
|
"acknowledgeNotesAndEnable": string;
|
||||||
|
/**
|
||||||
|
* リアルタイム更新時のノート取得にCDNキャッシュを併用する
|
||||||
|
*/
|
||||||
|
"enableStreamNotesCdnCache": string;
|
||||||
|
/**
|
||||||
|
* サーバーでCDNを使用している場合は、この設定をオンにしたうえでCDNの設定を適切に調整するとサーバーへの負荷を軽減できます(上級者向け)。WebSocket通信ではリアルタイム性のある情報のみを送信し、残りの情報はCDNキャッシュから取得して突合します。このため、クライアント側の負荷やデータ通信量に影響が出る可能性があります。
|
||||||
|
*/
|
||||||
|
"enableStreamNotesCdnCacheDescription": string;
|
||||||
"_accountSettings": {
|
"_accountSettings": {
|
||||||
/**
|
/**
|
||||||
* コンテンツの表示にログインを必須にする
|
* コンテンツの表示にログインを必須にする
|
||||||
|
|
|
@ -1301,6 +1301,8 @@ lockdown: "ロックダウン"
|
||||||
pleaseSelectAccount: "アカウントを選択してください"
|
pleaseSelectAccount: "アカウントを選択してください"
|
||||||
availableRoles: "利用可能なロール"
|
availableRoles: "利用可能なロール"
|
||||||
acknowledgeNotesAndEnable: "注意事項を理解した上でオンにします。"
|
acknowledgeNotesAndEnable: "注意事項を理解した上でオンにします。"
|
||||||
|
enableStreamNotesCdnCache: "リアルタイム更新時のノート取得にCDNキャッシュを併用する"
|
||||||
|
enableStreamNotesCdnCacheDescription: "サーバーでCDNを使用している場合は、この設定をオンにしたうえでCDNの設定を適切に調整するとサーバーへの負荷を軽減できます(上級者向け)。WebSocket通信ではリアルタイム性のある情報のみを送信し、残りの情報はCDNキャッシュから取得して突合します。このため、クライアント側の負荷やデータ通信量に影響が出る可能性があります。"
|
||||||
|
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "コンテンツの表示にログインを必須にする"
|
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;
|
public enableReactionsBuffering: boolean;
|
||||||
|
|
||||||
|
@Column('boolean', {
|
||||||
|
default: false,
|
||||||
|
})
|
||||||
|
public enableStreamNotesCdnCache: boolean;
|
||||||
|
|
||||||
@Column('integer', {
|
@Column('integer', {
|
||||||
default: 0,
|
default: 0,
|
||||||
})
|
})
|
||||||
|
|
|
@ -215,6 +215,10 @@ export const packedMetaLiteSchema = {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
},
|
},
|
||||||
|
enableStreamNotesCdnCache: {
|
||||||
|
type: 'boolean',
|
||||||
|
optional: false, nullable: false,
|
||||||
|
},
|
||||||
backgroundImageUrl: {
|
backgroundImageUrl: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
optional: false, nullable: true,
|
optional: false, nullable: true,
|
||||||
|
|
|
@ -396,6 +396,10 @@ export const meta = {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
},
|
},
|
||||||
|
enableStreamNotesCdnCache: {
|
||||||
|
type: 'boolean',
|
||||||
|
optional: false, nullable: false,
|
||||||
|
},
|
||||||
notesPerOneAd: {
|
notesPerOneAd: {
|
||||||
type: 'number',
|
type: 'number',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
|
@ -652,6 +656,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
perUserHomeTimelineCacheMax: instance.perUserHomeTimelineCacheMax,
|
perUserHomeTimelineCacheMax: instance.perUserHomeTimelineCacheMax,
|
||||||
perUserListTimelineCacheMax: instance.perUserListTimelineCacheMax,
|
perUserListTimelineCacheMax: instance.perUserListTimelineCacheMax,
|
||||||
enableReactionsBuffering: instance.enableReactionsBuffering,
|
enableReactionsBuffering: instance.enableReactionsBuffering,
|
||||||
|
enableStreamNotesCdnCache: instance.enableStreamNotesCdnCache,
|
||||||
notesPerOneAd: instance.notesPerOneAd,
|
notesPerOneAd: instance.notesPerOneAd,
|
||||||
summalyProxy: instance.urlPreviewSummaryProxyUrl,
|
summalyProxy: instance.urlPreviewSummaryProxyUrl,
|
||||||
urlPreviewEnabled: instance.urlPreviewEnabled,
|
urlPreviewEnabled: instance.urlPreviewEnabled,
|
||||||
|
|
|
@ -150,6 +150,7 @@ export const paramDef = {
|
||||||
perUserHomeTimelineCacheMax: { type: 'integer' },
|
perUserHomeTimelineCacheMax: { type: 'integer' },
|
||||||
perUserListTimelineCacheMax: { type: 'integer' },
|
perUserListTimelineCacheMax: { type: 'integer' },
|
||||||
enableReactionsBuffering: { type: 'boolean' },
|
enableReactionsBuffering: { type: 'boolean' },
|
||||||
|
enableStreamNotesCdnCache: { type: 'boolean' },
|
||||||
notesPerOneAd: { type: 'integer' },
|
notesPerOneAd: { type: 'integer' },
|
||||||
silencedHosts: {
|
silencedHosts: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
@ -631,6 +632,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
set.enableReactionsBuffering = ps.enableReactionsBuffering;
|
set.enableReactionsBuffering = ps.enableReactionsBuffering;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ps.enableStreamNotesCdnCache !== undefined) {
|
||||||
|
set.enableStreamNotesCdnCache = ps.enableStreamNotesCdnCache;
|
||||||
|
}
|
||||||
|
|
||||||
if (ps.notesPerOneAd !== undefined) {
|
if (ps.notesPerOneAd !== undefined) {
|
||||||
set.notesPerOneAd = ps.notesPerOneAd;
|
set.notesPerOneAd = ps.notesPerOneAd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -661,6 +661,12 @@ export class ClientServerService {
|
||||||
});
|
});
|
||||||
|
|
||||||
fastify.get<{ Params: { note: string; } }>('/notes/:note.json', async (request, reply) => {
|
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({
|
const note = await this.notesRepository.findOneBy({
|
||||||
id: request.params.note,
|
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 connection: Misskey.ChannelConnection | null = null;
|
||||||
let connection2: Misskey.ChannelConnection | null = null;
|
let connection2: Misskey.ChannelConnection | null = null;
|
||||||
let paginationQuery: Paging | null = null;
|
let paginationQuery: Paging | null = null;
|
||||||
const minimize = !iAmModerator;
|
const minimize = !iAmModerator && instance.enableStreamNotesCdnCache;
|
||||||
|
|
||||||
const stream = useStream();
|
const stream = useStream();
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,13 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</MkSwitch>
|
</MkSwitch>
|
||||||
</div>
|
</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">
|
<MkFolder :defaultOpen="true">
|
||||||
<template #icon><i class="ti ti-bolt"></i></template>
|
<template #icon><i class="ti ti-bolt"></i></template>
|
||||||
<template #label>Misskey® Fan-out Timeline Technology™ (FTT)</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 enableChartsForRemoteUser = ref(meta.enableChartsForRemoteUser);
|
||||||
const enableStatsForFederatedInstances = ref(meta.enableStatsForFederatedInstances);
|
const enableStatsForFederatedInstances = ref(meta.enableStatsForFederatedInstances);
|
||||||
const enableChartsForFederatedInstances = ref(meta.enableChartsForFederatedInstances);
|
const enableChartsForFederatedInstances = ref(meta.enableChartsForFederatedInstances);
|
||||||
|
const enableStreamNotesCdnCache = ref(meta.enableStreamNotesCdnCache);
|
||||||
|
|
||||||
function onChange_enableServerMachineStats(value: boolean) {
|
function onChange_enableServerMachineStats(value: boolean) {
|
||||||
os.apiWithDialog('admin/update-meta', {
|
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({
|
const fttForm = useForm({
|
||||||
enableFanoutTimeline: meta.enableFanoutTimeline,
|
enableFanoutTimeline: meta.enableFanoutTimeline,
|
||||||
enableFanoutTimelineDbFallback: meta.enableFanoutTimelineDbFallback,
|
enableFanoutTimelineDbFallback: meta.enableFanoutTimelineDbFallback,
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -5015,6 +5015,7 @@ export type components = {
|
||||||
translatorAvailable: boolean;
|
translatorAvailable: boolean;
|
||||||
mediaProxy: string;
|
mediaProxy: string;
|
||||||
enableUrlPreview: boolean;
|
enableUrlPreview: boolean;
|
||||||
|
enableStreamNotesCdnCache: boolean;
|
||||||
backgroundImageUrl: string | null;
|
backgroundImageUrl: string | null;
|
||||||
impressumUrl: string | null;
|
impressumUrl: string | null;
|
||||||
logoImageUrl: string | null;
|
logoImageUrl: string | null;
|
||||||
|
@ -5189,6 +5190,7 @@ export type operations = {
|
||||||
perUserHomeTimelineCacheMax: number;
|
perUserHomeTimelineCacheMax: number;
|
||||||
perUserListTimelineCacheMax: number;
|
perUserListTimelineCacheMax: number;
|
||||||
enableReactionsBuffering: boolean;
|
enableReactionsBuffering: boolean;
|
||||||
|
enableStreamNotesCdnCache: boolean;
|
||||||
notesPerOneAd: number;
|
notesPerOneAd: number;
|
||||||
backgroundImageUrl: string | null;
|
backgroundImageUrl: string | null;
|
||||||
deeplAuthKey: string | null;
|
deeplAuthKey: string | null;
|
||||||
|
@ -9587,6 +9589,7 @@ export type operations = {
|
||||||
perUserHomeTimelineCacheMax?: number;
|
perUserHomeTimelineCacheMax?: number;
|
||||||
perUserListTimelineCacheMax?: number;
|
perUserListTimelineCacheMax?: number;
|
||||||
enableReactionsBuffering?: boolean;
|
enableReactionsBuffering?: boolean;
|
||||||
|
enableStreamNotesCdnCache?: boolean;
|
||||||
notesPerOneAd?: number;
|
notesPerOneAd?: number;
|
||||||
silencedHosts?: string[] | null;
|
silencedHosts?: string[] | null;
|
||||||
mediaSilencedHosts?: string[] | null;
|
mediaSilencedHosts?: string[] | null;
|
||||||
|
|
Loading…
Reference in New Issue