Drupal: Стоит или нет повторно использовать поля

alexei20/07/2018 - 11:25

Как известно, Drupal позволяет повторно использовать однажды определенное поле. Так, например, если у вас есть поле "Изображение", то вы можете использовать это поле в любом типе содержимого на вашем сайте.

Тем не менее, не всегда понятно, стоит ли еще раз использовать одно и то же поле. И здесь нет однозначного ответа. Иногда стоит, а иногда нет.

В этой статье мы проведем обзор преимуществ и недостатков повторного использования полей в Drupal.

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

Чтобы повторно использовать поле, необходимо выбрать пункт "Структура (Structure)", "Типы контента (Content types)", нажать вкладку "Управление полями (Manage fields)" и воспользоваться полем "Добавить существующее поле (Re-use existing field)".

Повторное использование полей в Drupal

В официальной документации на Drupal.org не рекомендуется повторное использование полей:

Рекомендуется создавать новые поля, а не повторно использовать существующие, если у вас нет ясных оснований для этого.

Однако в последние годы этот совет обзавелся ньюансами, и теперь Drupal официально заявляет, что у этого метода есть как преимущества, так и недостатки.

В документации по пользовательскому интерфейсу управления полями в Drupal есть подробный раздел под названием "Повторное использование полей" где сказано, что для повторного использования полей существуют две основные причины. Первая - экономия времени на определение новых полей. Вторая - повторное использование полей позволяет отображать, фильтровать, группировать и сортировать контент по общему полю, используемому в разных типах контента. Здесь в качестве примера приводится модуль Views, который позволяет создавать списки и таблицы контента. При этом, если вы используете одно и то же поле для нескольких типов контента, то вы можете создать представление в модуле Views, содержащее все эти типы контента вместе, отображающее это поле, отсортированное по этому полю и/или отфильтрованное по этому полю. Но при этом также существует одна значительная причина не использовать повторно поля: разные уровни доступа. Например, для разных уровней доступа к полю могут потребоваться разные роли пользователей в зависимости от типа контента, к которому оно было добавлено. Это будет сложно реализовать, если вы используется поле повторно.

Преимущество: повторное использование полей облегчает вам жизнь

Да, безусловно вы получаете некое ускорение, но экономия времени очень мала. Более убедительным выглядит то преимущество, что повторное использование полей иногда может упростить администрирование сайта. Определенно гораздо проще устанавливать разрешения, настройки и элементы дизайна для одного повторно используемого поля, а не для 10 уникальных полей.

Преимущество: некоторый контент хорошо работает с повторно используемыми полями

В одном из комментариев к документации Drupal.org по отношению к модулю Views указывается, что модуль Views может комбинировать контент самыми изощренными способами. Так, если у вас есть несколько разных типов контента, с разными полями данных, то модуль Views может объединить их в одном представлении. Тем не менее, также указывается, что при сортировке модуль Views не так продвинут. Так, если у вас есть несколько разных типов контента, с разными полями данных, то модуль Views будет пытаться сортировать контент по всем этим разным полям данных.

Недостаток: повторно используемые поля утрачивают гибкость

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

Недостаток: повторно используемые поля усложняют экспорт или миграцию данных

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

Каждое поле Drupal имеет собственную таблицу в базе данных, как показано ниже. Извлечение этих данных может сопровождаться определенными трудностями. Например, хотя последние версии модуля Features (самый распространенный инструмент для экспорта данных Drupal) и научились работать с общими полями более эффективно, тем не менее, долгое время данный модуль испытывал заметные проблемы с обработкой повторно используемых полей.

Таблицы базы данных

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

Преимущество или недостаток? Быстродействие

Документация Drupal приводит одно возможное преимущество повторного использования полей:

Повторное использование полей не только ускоряет работу Drupal, но и упрощает работу над проектом.

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

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

Однако эти небольшие улучшения могут быть потеряны в другом месте. Вот что говорится на другом сайте:

При создании нового поля его определение добавляется в таблицу классов полей, а его конфигурация добавляется в таблицу экземпляров поля; тем временем, в базу данных добавляется новая таблица для хранения данных поля. Таблицы базы данных усложняют работу системы. Кроме того, запросы при работе с нодами будут вызывать выражения JOIN для получения данных полей. Множественные выражения JOIN будут влиять на производительность при работе с базой данных, поскольку MySQL плохо реагирует на запросы с множественными запросами JOIN, если они не настроены должным образом.

Итог

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

Когда в единой системе ломается хотя бы один элемент, то сбоить начинает вся система. И в этом случае может помочь ИТ-аутсорсинг для бизнеса, который можно заказать на сайте https://ivit.pro/it-uslugi/it-autsorsing/. Аутсорсинг поможет сократить расходы, позволит всем элементам структуры работать бесперебойно, провести анализ эффективности системы и многое другое, что обеспечит безупречную работу компании, прибыль которой зависит от компьютеров и их надежного функционирования.