Оптимизация. Замена узлов на Code

В предыдущей главе мы сделали такую схему:

img1.png

Она полностью рабочая, и вы можете ее протестировать через Postman и использовать в своих проектах.

Я предложу еще один вариант ее реализации.

Надежные решения это, как правило, самые простые решения.

Меньше узлов, меньше ошибок, проще поддерживать и развивать.

В текущей логике используется узелSwitch, который перенаправляет поток в зависимости от значения параметра operation.

После узла Switch идут однотипные узлы с кодом, которые отличаются только операцией с числами.

В данном случае можно скомбинировать узел Switch и узлы Code в один узел Code, который будет выполнять проверку операции и выполнять соответствующий код.

Это будет выглядеть так: img2.png

Код в узле Code будет таким:

const body = $input.first().json.body;
const operand1 = body.operand1;
const operand2 = body.operand2;
const operation = body.operation;

let result;

switch (operation) {
  case 'addition':
    result = operand1 + operand2;
    break;
  case 'subtraction':
    result = operand1 - operand2;
    break;
  case 'multiplication':
    result = operand1 * operand2;
    break;
  case 'division':
    result = operand2 !== 0 ? operand1 / operand2 : 'Error: division by zero';
    break;
  case 'power':
    result = operand1 ** operand2;
    break;
  case 'square':
    result = operand1 ** 2;
    break;
  case 'squareRoot':
    result = operand1 >= 0 ? Math.sqrt(operand1) : 'Error: negative number';
    break;
  case 'reminder':
    result = operand2 !== 0 ? operand1 % operand2 : 'Error: division by zero';
    break;
  default:
    result = 'Error: unknown operation';
}

return [{ json: { result } }];

Пояснение кода

В этом коде мы сначала получаем данные из входящего запроса, а затем в зависимости от значения operation выполняем соответствующую арифметическую операцию.

Тут также используется конструкция switch, которая позволяет выполнять разные действия в зависимости от значения переменной operation. Это аналог узла Switch, но в виде кода.

Также для демонстрации я добавил несколько операций и обработку ошибок, например, деление на ноль или извлечение квадратного корня из отрицательного числа.

Преимущества такого подхода

  1. Меньше узлов: Уменьшается количество узлов в схеме, что делает ее более компактной и понятной.
  2. Упрощение логики: Логика обработки операций становится более простой
  3. Легкость в поддержке: Добавление новых операций или изменение существующих становится проще, так как все находится в одном месте.
  4. Улучшение производительности: Меньше узлов означает меньше операций, что может улучшить производительность выполнения сценария.
  5. Универсальность: Один узел Code может обрабатывать все операции, что делает его более универсальным и гибким.
  6. Читаемость: Код становится более читаемым и понятным, так как вся логика сосредоточена в одном месте.

Недостатки

  1. Сложность кода: Код может стать сложнее для понимания, особенно для тех, кто не знаком с JavaScript.
  2. Отсутствие визуализации: Визуальная схема становится менее наглядной, так как все операции объединены в один узел.
  3. Отладка: Отладка кода может быть сложнее, так как ошибки могут возникать в разных местах в зависимости от операции.

Заключение

Этот подход позволяет сделать сценарий более компактным и понятным, а также улучшить его производительность.

Но если вам нужно будет ветвление и специфические действия для каждой операции, то лучше использовать узлы Switch и Code отдельно.

Если каждая операция требует уникальной логики или обработки, то лучше оставить узел Switch и после него вести потоки.

Вы архитектор

Моя задача показать вам разные подходы, а решение вы выберете сами.

Чем больше у вас будет инструментов в арсенале, тем проще будет решать задачи.

Экспериментируйте с кодом, добавьте новые операции или измените существующие.

Это поможет вам лучше понять, как работает n8n и как можно использовать его возможности для решения различных задач.