我應該重用現有的 Drupal 字段嗎?
已發表: 2022-02-16有時我們能夠給出非常明確的建議:“這樣做!” 或“不要那樣做!”
這不會是這些博客文章之一。
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 數據的最常用方法)在共享字段上苦苦掙扎了很長時間,儘管當前版本可以更有效地處理它們。

這個建議類似於我們對使用多站點的想法。 每當您開始在代碼庫或數據庫表之間建立依賴關係時,都會增加站點的複雜性。
優勢還是劣勢? 表現
Drupal 文檔概述了重用字段的一個可能的好處:
重用字段不僅可以讓 Drupal 運行得更快,還可以讓您的項目更易於維護。
Stack Overflow 上的這個線程對性能進行了非常相關的討論。 它包括以下評論:
然而,一個真正的問題是您擁有的字段數量。 因為目前在 Drupal 7 中,所有字段的完整字段配置,無論它們是否已加載,都會在每次請求時從緩存中獲取。 我見過有 250 多個字段的站點,其中加載和反序列化字段配置需要 13MB 以上的內存。”
因此,通過讓我們擁有較少的字段總數,重用字段可能會帶來較小的性能改進。
但是,這些小的改進可能會在其他地方丟失。 這再次來自 Web Initiative:
[領域] Drupal 系統的額外複雜性。 創建新字段時,將字段的定義添加到字段類表中,將字段的配置添加到字段實例表中; 同時,在 Drupal 數據庫中添加了一個新表來存儲字段數據。 數據庫表增加了系統的複雜性。 此外,節點的查詢會導致表到字段數據的 JOIN 表達式。 多個 JOIN 將影響數據庫性能,因為如果配置不當,MySQL 對具有多個表的多個 JOIN 的查詢響應很差。
概括
很抱歉,我們沒有一個簡單的答案來回答這個問題。 這是一個問題,您將受益於閱讀該問題並了解利弊。 如果您正在進行真正的站點構建,那麼值得在測試環境中構建站點以了解更多關於這些優缺點如何影響您的站點需求的信息。