Skip to content

Дедупликация запросов #30

@doochik

Description

@doochik

Надо подумать нужна ли из коробки дедупликация запросов.

Вариант 1:

// Готовый враппер uniqBlockDecorator.js

const de = require('descript');

module.exports = block => {
    const UNIQ_BLOCK_ID = Symbol();

    return de.func({
        block: (args) => {
            const { context } = args;
            if (!context[UNIQ_BLOCK_ID]) {
                context[UNIQ_BLOCK_ID] = de.run(block, args);
            }

            return context[UNIQ_BLOCK_ID];
        },
    });
};

const uniqBlock = uniqBlockDecorator(de.func({
    block: () => {
        // в рамках одного de.run этот блок исполнится ровно один раз,
        // все последующие вызовы будут возвращать результат из памяти
    },
});

Вариант 2:
Сделать по умолчанию все блоки с дедупликаций и opt out через options.dedupe === false

Вариант 3:
inmemory cache, но его надо делать в рамках de.run. Похоже на вариант 1, только через более нативный кеш, и решает вопрос с ключами.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions