Оптимизация рабочих процессов Shopify Flow

При создании рабочего процесса важно убедиться, что он выполняется максимально эффективно. В этом документе описаны сценарии, которые могут привести к ограничению выполнения ваших рабочих процессов или исчерпанию лимитов API, а также приведены советы по устранению или обходу этих проблем.

Распространённые проблемы с производительностью

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

Триггеры с высокой частотой срабатывания

Высокочастотные триггеры — это триггеры, основное событие которых происходит часто. Например, триггер «Изменение количества товарных запасов варианта товара» запускается при каждом изменении товарных запасов в магазине. Частота срабатывания триггера действует как множитель для любой проблемы в вашем рабочем процессе. Например, если рабочий процесс извлекает 100 товаров и запускается 1000 раз в минуту, он будет извлекать 100 000 товаров в минуту. Это может вызвать проблемы с производительностью.

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

Использование одного триггера для многих рабочих процессов

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

  • Рабочие процессы могут конфликтовать друг с другом.
  • Рабочие процессы пытаются одновременно извлекать данные и вызывать API, а количество запросов, которые ваш магазин может обработать единовременно, ограничено лимитами Shopify API.

Решение: объедините рабочие процессы, использующие один и тот же триггер, в один рабочий процесс. Это также позволит вам контролировать время выполнения каждого из них, чтобы они не конфликтовали друг с другом. Объединение рабочих процессов особенно полезно, если они не извлекают много данных или извлекаемые ими данные одинаковы. Если рабочие процессы извлекают много различных данных, вы можете обнаружить, что их раздельное использование обеспечивает лучшую производительность.

Использование списков или неверных данных

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

Ещё одна распространённая проблема — случайный выбор неверных данных. Например, для проверки данных о товаре в заказе вы могли выбрать order / publication / products / tags вместо order / line items / product / tags. Первый результат обычно неверен, так как он извлекает все товары для публикации, тогда как предполагалось проверить товары в заказе. Выбор такого большого списка может вызвать проблемы с производительностью, а выбор неверного списка может привести к некорректной работе вашей автоматизации.

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

Метаполя

Извлечение данных отдельного метаполя или метаобъекта не должно вызывать проблем с производительностью. Однако распространённая проблема — это выбор списка metafields и перебор всех метаполей ресурса в цикле. Если поле value содержит большой объём данных, например при использовании HTML-объектов, это может привести к обработке большого объёма данных и, как следствие, к проблемам с производительностью.

Решение: используйте объект metafield вместо metafields.

Чрезмерное использование действий «Получить данные»

Рабочие процессы, использующие действие «Получить данные», такое как «Получить данные заказа», предназначены для возврата не более 100 объектов на один рабочий процесс из действий «Получить данные». Превышение лимита в 100 объектов может вызвать проблемы с производительностью.

Решение: запускайте рабочий процесс чаще, чтобы вашему запросу не требовалось возвращать более 100 результатов. Повторно используйте одно и то же действие «Получить данные» вместо выполнения повторяющихся запросов.

Отсутствие фильтров запроса в действиях «Получить данные»

Действия «Получить данные» вызывают Shopify API. Если запрос отсутствует, API вернёт либо все ресурсы, либо ни одного. Это может вызвать проблемы с производительностью, а также привести к выполнению неверных действий в вашем магазине при использовании возвращённых данных в последующих шагах рабочего процесса.

Решение: всегда включайте фильтры запроса в свои действия «Получить данные».

Неверные фильтры запроса в действиях «Получить данные»

Запросы в действиях «Получить данные» поддерживают ограниченный набор фильтров запроса, определённый синтаксис и определённый набор значений, которые можно использовать в фильтрах. Ввод неверного фильтра, значения фильтра или синтаксиса может привести к тому, что весь запрос будет проигнорирован, что может вызвать проблемы, аналогичные тем, которые возникают при отсутствии фильтра запроса.

Решение: используйте документацию, предоставляемую для действия в Flow, чтобы найти список доступных фильтров запроса. Всегда тестируйте фильтры запроса, чтобы убедиться, что они возвращают ожидаемые данные. Вы можете использовать действие «Записать вывод в журнал» в Flow для просмотра возвращённых данных или напрямую вызывать Shopify Admin API через API-клиент, такой как Postman, или через приложение GraphiQL.

Дополнительные решения распространённых проблем с производительностью

Использование шагов ожидания для задержки извлечения данных

Шаги ожидания позволяют приостановить рабочий процесс на определённое время, но их также можно использовать для оптимизации рабочих процессов. Каждый шаг ожидания эффективно разделяет выполнение вашего рабочего процесса на отдельные этапы. Когда рабочий процесс выполняется, он автоматически извлекает данные, необходимые до первого шага ожидания (и снова извлекает данные после шага ожидания для оставшейся части рабочего процесса).

Если рабочий процесс использует высокочастотный триггер и извлекает большой объём данных, но действие будет выполняться лишь изредка, вы можете разместить любые сложные данные или логику после пары «условие — шаг ожидания». Например:

  1. Триггер: изменение количества товарных запасов варианта товара.
  2. Условие: проверить, находится ли товар в коллекции.
  3. Если истинно, действие: подождать 2 секунды.
  4. Действие: отправить клиенту электронное письмо (с большим объёмом данных).

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

Что не нужно оптимизировать

Использование одних и тех же данных в нескольких действиях

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