我应该重用现有的 Drupal 字段吗?

已发表: 2022-02-16

有时我们能够给出非常明确的建议:“这样做!” 或“不要那样做!”

这不会是这些博客文章之一。

Drupal 使您能够重用字段。 如果您有“图片”字段,您可以选择在您网站上的每种内容类型上使用相同的字段。 但是,重用字段是否是一个好主意并不总是很清楚。 有时是,有时不是。

下面概述了在重新使用 Drupal 字段之前要考虑的优点和缺点。

关于重用字段的一般建议

每当您转到“结构”,然后转到“内容类型”并单击内容类型的“管理字段”时,您都可以选择“重用现有字段”功能。

重用 Drupal 字段

Drupal.org 文档用于正式建议您不要重用字段:

建议创建新字段,而不是重复使用现有字段,除非您有明确的理由这样做。

然而,该建议近年来变得更加细致入微,Drupal 官方表示这既有优点也有缺点。

Drupal Field UI 文档有一个名为“重用字段”的详细部分:

重用字段有两个主要原因。 首先,重用字段可以节省您定义新字段的时间。 其次,重用字段还允许您按字段跨内容类型一起显示、过滤、分组和排序内容。 例如,贡献视图模块允许您创建列表和目录。 因此,如果您在多个内容类型上使用相同的字段,您可以创建一个包含所有这些内容类型的视图,同时显示该字段、按该字段排序和/或按该字段过滤。 不重用字段的一个主要原因是:不同的权限。 例如,您可能需要不同的用户角色才能对字段具有不同级别的访问权限,具体取决于该字段已添加到的内容类型。 如果您重用一个字段,这可能会很困难。

优点:重用字段可以让你更简单

是的,可以提高速度,但节省的时间非常少。 一个更引人注目的优势是重用字段有时可以使站点管理更简单。 Web Initiative 很好地总结了这一点:

字段的重用还可以降低系统的复杂性。 Drupal 管理员没有创建和维护 10 个不同的字段,而是只维护两个字段及其文档。 数据库管理员只需要提高两个额外表的性能。 KISS 始终是一个很好的原则。

将权限、设置和设计元素应用到一个重复使用的字段而不是 10 个唯一字段肯定会更容易。

优点:某些内容与重复使用的字段配合得很好

再次回到 Drupal Field UI 文档:

重用字段还允许您按字段跨内容类型一起显示、过滤、分组和排序内容。 例如,贡献视图模块允许您创建列表和目录。 因此,如果您在多个内容类型上使用相同的字段,您可以创建一个包含所有这些内容类型的视图,同时显示该字段、按该字段排序和/或按该字段过滤。

Drupal.org 文档的一位评论作者对 Views 提出了相同的观点。 他们指出,视图可以以复杂的方式组合内容。 因此,如果您有多种不同的内容类型,具有不同的日期字段,那么 Views 可以将它们组合成一个视图。 然而,他们也指出 Views 在排序方面并不那么复杂。 因此,如果您有多种不同的内容类型,具有不同的日期字段,那么视图将难以对所有这些不同日期字段的内容进行排序。

缺点:重用字段不灵活

布兰登威廉姆斯在 Twitter 上很好地总结了这一点:

起初这是一个好主意,但给它几个星期,reqs 改变,你最终还是创建了单独的

在很大程度上,如果您选择重复使用的字段,您将限制以后可以轻松对数据进行的更改。 进行更新也更加耗时,因为您需要单独编辑每个字段。

缺点:重复使用的字段使数据更难导出或迁移

当您需要导出数据或需要迁移到新版本的 Drupal 或其他平台时,重用字段可能会成为问题。

每个 Drupal 字段都有自己的数据库表,如下所示。 提取这些数据可能很困难。 功能模块(导出 Drupal 数据的最常用方法)在共享字段上苦苦挣扎了很长时间,尽管当前版本可以更有效地处理它们。

media_1392150946256.png

这个建议类似于我们对使用多站点的想法。 每当您开始在代码库或数据库表之间建立依赖关系时,都会增加站点的复杂性。

优势还是劣势? 表现

Drupal 文档概述了重用字段的一个可能的好处:

重用字段不仅可以让 Drupal 运行得更快,还可以让您的项目更易于维护。

Stack Overflow 上的这个线程对性能进行了非常相关的讨论。 它包括以下评论:

然而,一个真正的问题是您拥有的字段数量。 因为目前在 Drupal 7 中,所有字段的完整字段配置,无论它们是否已加载,都会在每次请求时从缓存中获取。 我见过有 250 多个字段的站点,其中加载和反序列化字段配置需要 13MB 以上的内存。”

因此,通过让我们拥有较少的字段总数,重用字段可能会带来较小的性能改进。

但是,这些小的改进可能会在其他地方丢失。 这再次来自 Web Initiative:

[领域] Drupal 系统的额外复杂性。 创建新字段时,将字段的定义添加到字段类表中,将字段的配置添加到字段实例表中; 同时,在 Drupal 数据库中添加了一个新表来存储字段数据。 数据库表增加了系统的复杂性。 此外,节点的查询会导致表到字段数据的 JOIN 表达式。 多个 JOIN 将影响数据库性能,因为如果配置不当,MySQL 对具有多个表的多个 JOIN 的查询响应很差。

概括

很抱歉,我们没有一个简单的答案来回答这个问题。 这是一个问题,您将受益于阅读该问题并了解利弊。 如果您正在进行真正的站点构建,那么值得在测试环境中构建站点以了解更多关于这些优缺点如何影响您的站点需求的信息。