← Cloudflare Durable Objects / durable-objects / reference
Состояние в памяти в Durable Object
Состояние в памяти означает, что каждый Durable Object в любой момент времени существует только один активный экземпляр. Все запросы, отправленные этому Durable Object, обрабатываются одним и тем же экземпляром. Вы можете хранить часть состояния в памяти.
Переменные в Durable Object сохраняют состояние до тех пор, пока Durable Object не будет вытеснен из памяти.
Распространённый паттерн заключается в инициализации Durable Object из постоянное хранилище и задать переменные экземпляра при первом обращении. Поскольку последующие обращения направляются к тому же Durable Object, далее можно возвращать уже инициализированные значения без повторных обращений к постоянному хранилищу.
import { DurableObject } from "cloudflare:workers";
export class Counter extends DurableObject {
constructor(ctx, env) {
super(ctx, env);
// `blockConcurrencyWhile()` ensures no requests are delivered until
// initialization completes.
this.ctx.blockConcurrencyWhile(async () => {
let stored = await this.ctx.storage.get("value");
// After initialization, future reads do not need to access storage.
this.value = stored || 0;
});
}
// Handle HTTP requests from clients.
async fetch(request) {
// use this.value rather than storage
}
}Конкретный экземпляр Durable Object может использовать общую глобальную память с другими экземплярами, определёнными в том же коде Worker.
В примере выше использование глобальной переменной value вместо переменной экземпляра this.value будет неверным. Два разных экземпляра Counter будут иметь собственную отдельную память для this.value, но могут совместно использовать память для глобальной переменной value, что приводит к неожиданным результатам. Поэтому лучше избегать глобальных переменных.