Puncte:6

Este o practică proastă să folosești același cârlig de două ori?

drapel jp

Lucrez la un proiect destul de mare și folosesc hook_entity_update() în trei dintre modulele mele. Fac acest lucru pentru a-mi menține proiectul structurat și pentru a avea diferite funcții ale site-ului meu în module diferite.

  • Este înțelept performanța proastă să aveți acest cârlig apelat de mai multe ori de la module diferite?
  • Deoarece acest mod de lucru face ca numărul de module personalizate să crească, numărul de module afectează performanța site-ului sau este doar codul din interior care poate da probleme de performanță?
Puncte:4
drapel cn

Desigur, ar trebui să vă comparați modulele pentru a obține un răspuns exact, dar, în general, avantajele împărțirii codului complex în mai multe module separate de funcție este calea de urmat.

Impactul asupra performanței apelării cârligului este minim; impactul mai mare asupra performanței va fi indiferent de codul pe care îl rulează hook.

Numărul de module nu contează la fel de mult ca codul pe care îl rulează modulele.

Dovezi: Trecând de la Drupal 7 la Drupal 8/9, multe module majore Drupal au trecut de la „minimizarea numărului de module” la „oferirea multor mai multe module specifice funcției care pot fi activate după cum este necesar”:

  • AdvAgg
  • Comerţ
  • Metaetichetă
  • Formular web

TLDR: Codul real pe care îl rulați în hook-uri/module este mult mai important pentru performanță decât faptul că apelați hook-uri de mai multe ori în module.

Cu toate acestea, un lucru de care trebuie să țineți cont este că, dacă vă organizați prost modulele, puteți ajunge să adăugați cod personalizat la același cârlig în mai multe module care ar putea duce la erori, cum ar fi dacă modificați același câmp în hook_entity_update(). Așadar, asigurați-vă că vă organizați codul într-un mod care să clarifice modulele responsabile pentru care funcții.

În calitate de dezvoltator, este cu siguranță mai ușor să mențineți modulele personalizate atunci când sunt separate prin funcție, mai ales în cazul în care ajungeți să fiți nevoit să utilizați unele, dar nu toate, funcțiile/modulele de pe mai multe site-uri.

Joost avatar
drapel jp
Mulțumesc pentru răspunsul amplu, foarte clar și foarte util
Puncte:3
drapel us

Numărul de module instalate poate influența performanța. De aceea, de exemplu, core Drupal păstrează în cache numele hook-urilor implementate.
Având în vedere ceea ce face core Drupal, creșterea numărului de module instalate ar avea un impact mai mic asupra performanței.

Scopul dezvoltatorilor nu ar trebui să fie reducerea numărului de module/sub-module, ci scrierea de module care implementează o caracteristică specifică. În mod clar, dacă implementarea unei caracteristici necesită câteva linii, probabil modulul ar trebui îmbinat cu un alt modul, mai ales dacă acel modul este un sub-modul.

Pentru a face un exemplu, în loc de Nodul și Utilizator module, ar putea exista un singur modul (numit, de exemplu, Conținut de bază). Deoarece acele module sunt în mod normal necesare din profilul de instalare, ar reduce numărul de module instalate. De asemenea, ar putea reduce numărul de cârlige implementate, deoarece (de exemplu) node_user_predelete() ar putea fi îmbinat cu o metodă de clasă sau cu altă funcție.
Oricum, făcând acest lucru, două module cu scopuri diferite ar fi fuzionate împreună; cârligele ar putea fi reduse, dar în unele cazuri codul ar putea avea nevoie să verifice mai întâi că sunt îndeplinite anumite condiții; probabil mai multe servicii ar trebui să fie încărcate leneș, ceea ce înseamnă că ar exista două clase în loc de una (clasa proxy și clasa care implementează serviciul). Aceste clase ar trebui să fie sincronizate între ele: orice modificare a clasei de serviciu trebuie făcută și pe clasa proxy. (Există un script pentru a face asta, dar funcționează numai pe modulele instalate, ceea ce înseamnă că dezvoltatorul ar avea nevoie de un server local care rulează Drupal și nu uita să ruleze scriptul pentru fiecare serviciu încărcat leneș.)

Nu este doar o chestiune de cârlige implementate: în Drupal 9, un modul suficient de complex implementează multe clase, dintre care unele sunt implementări de servicii sau plugin. Chiar și modulele care sunt suficient de simple pentru a avea nevoie doar de o singură rută implementează codul în cel puțin o clasă.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.