Puncte:0

Partajarea de operațiuni grele între mai multe elemente de pagină

drapel cn

Am o pagină cu două elemente separate de pagină. Unul este un formular de selectare a unui tabel care arată o listă extinsă de date de conținut. Celălalt element de pagină este un bloc care arată un rezumat al aceluiași conținut.

Ambele elemente folosesc într-adevăr aceleași date, blocul rezumat trebuie doar să compileze datele din tabel într-o prezentare generală. Reutilizarea datelor este vitală, deoarece interogările bazei de date sunt destul de costisitoare.

Există o modalitate de a construi pagina astfel încât blocurile să poată partaja informații? În prezent, ambele elemente ale paginii rulează aceleași apeluri la baza de date, provocând interogări duplicate și crescând timpul de încărcare a paginii?

drapel cn
O abordare comună este definirea unui serviciu care interogează datele și memorează static rezultatele. Apoi, ambele blocuri folosesc metoda relevantă din serviciul respectiv, dar numai prima utilizare atrage accesul(e) DB. [`drupal_static`](https://api.drupal.org/api/drupal/core%21includes%21bootstrap.inc/function/drupal_static/9.2.x) este foarte util pentru acest lucru
4uk4 avatar
drapel cn
În plus, în mod normal lucrurile pe care le interogați în baza de date pot fi stocate în cache între cereri. Puteți pune rezultatul interogării într-un coș de cache, de exemplu `cache_default`, și îl puteți eticheta astfel încât să fie invalidat atunci când datele se modifică în baza de date.
Rubix05 avatar
drapel cn
Oh wow, nici nu știam că drupal_static era o chestie. Aveam deja funcțiile construite cu un serviciu, așa că am putut să pun drupal_static foarte repede.Mai trebuie să mai fac niște teste, dar până acum pare să fie exact ceea ce aveam nevoie. Mulțumiri!
4uk4 avatar
drapel cn
Dacă aveți deja un serviciu, nu aveți nevoie de drupal_static deoarece proprietățile de clasă ale unui serviciu persistă pe parcursul întregii cereri.
Rainer Feike avatar
drapel in
Pe lângă rezolvarea acelei probleme de performanță cu drupal sau php (să zicem din partea clientului) - ar trebui să o puteți rezolva în DB Backend. Pentru bazele de date moderne care rulează aceeași interogare de mai multe ori, ar trebui să fie extinsă doar prima dată. Mai degrabă, ar trebui să vă concentrați pe cache-ul pe partea clientului, așa cum este menționat în API-ul Drupal Cache https://www.drupal.org/docs/8/api/cache-api/cache-api. Și - implicit - cache-ul Drupal este, de asemenea, stocat în DB - așa că puteți economisi doar timpul de calcul al interogărilor, dar nu și lățimea de bandă... Memorarea în cache nu este niciodată ușoară.
Rainer Feike avatar
drapel in
Dar sunt de acord cu 4k4 et.all. Dacă totul se află în aceeași cerere, utilizați doar o variabilă în domeniul cererii (dar nu este dacă, adică blocul dvs. are alte contexte decât pagina dvs.).

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.