Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Memory Size Exhausted: Row Style -> Node oder Fields

Eingetragen von jan.s (44)
am 13.01.2010 - 16:17 Uhr in
  • Allgemeines zu Drupal
  • Drupal 6.x

Hallo zusammen,

ich habe einen eigenen Inhaltstyp erstellt, welcher ca. 90 Felder enthält (meiste Strings mit ca. 10-20 Zeichen Länge). Dann habe ich eine View, welche ca. 200 Nodes selektiert, weiterhin ist jede Node über eine Node Reference mit zwei weiteren Nodes anderen Typs verknüpft. Es werden also ca. 600 Nodes geladen.

Wenn ich die View (Row Style : Node) aufrufe, erhalte ich einen Memory Error (bei ca. 17 Sekunden und 79,99 MB verbrauchtem Speicher). Ich habe etwas herumexperimentiert mit "Items to display", die Grenze liegt ca. bei 35 angezeigten Nodes. Dann klappt noch alles, aber die Seitenerstellung dauert halt um die 15 Sekunden.

Wenn ich den Row Style der View auf Fields setze, dann funktioniert alles. Die Menge der angezeigten Nodes kann ich nicht reduzieren, ich brauche jedoch nicht alle Felder, sondern jeweils nur drei. Daher kann ich auch den Row Style Fields verwenden und baue mir dann halt ein passendes Template.

Meine Fragen:

1. Ist das Problem normal, dass es bei der Menge an Daten so lange dauert oder scheint es noch ein anderes Problem zu geben?

2. Kann man erreichen, dass die Nodes (wie mit node_load() möglich) nicht gecacht werden?

Viele Grüße
Jan

‹ Servicekosten Drupal Updates - Wie macht Ihr es? Probleme mit ImageMagick ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Da ich gerade vor ein paar

Eingetragen von Methos (196)
am 13.01.2010 - 17:22 Uhr

Da ich gerade vor ein paar Tagen auch ein solches Problem hatte mal meine Erfahrung dazu:

Also: es scheint SEHR empfehlenswert bei Views mittels fields nur die Felder auszuwählen die man für die jeweilige View auch wirklich benötigt.
Mir scheint es so zu sein, dass ein node_load() nicht nur die Daten des Nodes läd (das war das was ich erwartet hatte) sondern auch 'mal eben' alle Nodes 'rendert' sprich die jeweilige Seite (oder zumindest große Teile davon) als Code erzeugt. Das verbraucht natürlich u.U. wahnsinnig Arbeitsspeicher, und produziert zu dem auch noch reichlich (womöglich unnötige) Datenbankabfragen.

Daher habe ich nun meine Views (die zum teil noch mittels Panels zusammen auf eine Seite gepackt wurden) mit fields aufzubauen und siehe da, der Speicherverbrauch ging deutlich runter, die Seitenbauzeiten normalisierten sich.

zu deinem 2. was meinst du mit 'nicht gecached'? Das dir nur die Daten des Nodes geliefert werden, aber die Seiten nicht erzeugt werden?
Wenn ja, DAS ist etwas, was mich auch interessieren würde.

  • Anmelden oder Registrieren um Kommentare zu schreiben

jan.s schrieb 1. Ist das

Eingetragen von Alexander Langer (3416)
am 13.01.2010 - 17:40 Uhr
jan.s schrieb

1. Ist das Problem normal, dass es bei der Menge an Daten so lange dauert oder scheint es noch ein anderes Problem zu geben?

2. Kann man erreichen, dass die Nodes (wie mit node_load() möglich) nicht gecacht werden?

zu 1.
Das kann man nicht allgemeingültig beantworten, weil deine Struktur nicht genua bekannt ist und wir nicht wissen wie ausgelastet der Server ist, welche Einstellungen er fährt, etc.

zu 2.
Node_load() cacht mittels eines statischen Arrays. D.h. lediglich innerhalb eines Skriptlaufs (Aufruf einer Seite) wird das Laden desselben Nodes über den Cache bedient (wenn nicht zwischenzeitlich irgendwo geflusht wurde). In der Zeit wo ein einzelner View lädt, sollte sich ein und derselbe Node nicht verändern - normal sollte er auch nicht mehrfach in einem View angezeigt werden.

--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!

webseiter.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Methos schrieb Mir scheint

Eingetragen von Alexander Langer (3416)
am 13.01.2010 - 17:45 Uhr
Methos schrieb

Mir scheint es so zu sein, dass ein node_load() nicht nur die Daten des Nodes läd (das war das was ich erwartet hatte) sondern auch 'mal eben' alle Nodes 'rendert' sprich die jeweilige Seite (oder zumindest große Teile davon) als Code erzeugt. Das verbraucht natürlich u.U. wahnsinnig Arbeitsspeicher, und produziert zu dem auch noch reichlich (womöglich unnötige) Datenbankabfragen.

Dem ist nicht so: http://api.drupal.org/api/function/node_load/6
Denn fürs Rendern ist node_view() zuständig. Aber natürlich muss ein node_load() auch alle hook_nodeapi()-Hooks aller Module durchgehen, um ihnen die Möglichkeit zu geben spezifische Daten an den Node ranzuhängen, wie es eben auch CCK macht.

--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!

webseiter.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Methos schrieb zu deinem 2.

Eingetragen von jan.s (44)
am 13.01.2010 - 17:56 Uhr
Methos schrieb

zu deinem 2. was meinst du mit 'nicht gecached'? Das dir nur die Daten des Nodes geliefert werden, aber die Seiten nicht erzeugt werden?
Wenn ja, DAS ist etwas, was mich auch interessieren würde.

Ja, genau, zum Beispiel. Außerdem gibt es doch bei node_load() mit dem dritten Parameter die Möglichkeit, die Nodes nicht zu cachen.
Nehmen wir mal an, ich lasse mir in der View nur das Field nid ausgeben und damit mache ich dann ein node_load($row->nid) im Template um auf die Node zugreifen zu können. Würde ich das gleiche Problem bekommen und das Script abbrechen? Oder würde hier irgendetwas nicht geladen werden, was die View jedoch geladen hätte? Wenn ja, hätte ich hier Erfolg, wenn der dritte Parameter das Cachen verbietet?

Ich denke trotzdem würde ich in diesem Fall hier nur noch mit den Fields arbeiten, da ich wirklich nur wenige Felder brauche.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die Nodes werden so oder so

Eingetragen von Alexander Langer (3416)
am 13.01.2010 - 18:01 Uhr

Die Nodes werden so oder so geladen. Dabei kommen sie entweder aus dem static array(), oder aber, wenn sie nicht drin sind, wandern sie da rein. Wie du es drehst und wendest kommt dabei derselbe Platzbedarf bei heraus.

--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!

webseiter.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Alexander Langer

Eingetragen von Methos (196)
am 13.01.2010 - 18:20 Uhr
Alexander Langer schrieb
Methos schrieb

Mir scheint es so zu sein, dass ein node_load() nicht nur die Daten des Nodes läd (das war das was ich erwartet hatte) sondern auch 'mal eben' alle Nodes 'rendert' sprich die jeweilige Seite (oder zumindest große Teile davon) als Code erzeugt. Das verbraucht natürlich u.U. wahnsinnig Arbeitsspeicher, und produziert zu dem auch noch reichlich (womöglich unnötige) Datenbankabfragen.

Dem ist nicht so: http://api.drupal.org/api/function/node_load/6
Denn fürs Rendern ist node_view() zuständig. Aber natürlich muss ein node_load() auch alle hook_nodeapi()-Hooks aller Module durchgehen, um ihnen die Möglichkeit zu geben spezifische Daten an den Node ranzuhängen, wie es eben auch CCK macht.

hm, das deckt sich irgendwie nicht mit dem Effekt, den ich beobachtet hab.

Ich habe einen Inhaltstypen, der in seinem Template einen Block einbindet (Werbebanner, seperater Inhaltstyp).
Lade ich (bei eingeschaltetem Devel-Modul) mit node_load in einem View-Template mit node_load() meine Nodes, habe ich massig Datenbankabrufe, die eben diese Werbebanner abrufen. Setze ich das ganze mit fields um, sind diese aufrufe (und einiges anderes, verständlicher weise) verschwunden. Aus diesem Effekt habe ich geschlossen, dass node_load() da irgendwas macht was wohl reichlich unnötig ist. (Die Werbebanner sind NICHT mit einer node-referenz oder ähnliches mit dem Node verknüpft).
Vll. kann diesen Effekt ja mal jemand erklären!?

Nichts desto trotz werde ich bei der Nutzung von fields bleiben, sofern ich nur wenige Bestandteile meines Nodes benötige, das es (zumindest im aktuellen Projekt) deutlich performanter ist.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Views fragt, je nachem was

Eingetragen von Alexander Langer (3416)
am 13.01.2010 - 18:27 Uhr

Views fragt, je nachem was man eingestellt hat, eben nur die unbedingt nötigen Daten aus der Datenbank ab, während node_load() ganz korrekt alle Daten des Nodes lädt.

--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!

webseiter.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

naja .. die werbebanner sind

Eingetragen von Methos (196)
am 14.01.2010 - 17:44 Uhr

naja .. die werbebanner sind aber nur über das template für den Nodetype mit dem node 'verbunden'.
Es wird im Template ein Block ausgegeben, aber es gibt keine Info welcher Node zu welchem Banner gehört oder so etwas.
Es ist einfach nur ein banner mit einem Term verbunden der Ihm sagt dass er eben auf der Node-Seite angezeigt werden soll.

Deswegen erschließt sich mir eben überhaupt nicht, warum die werbebanner bei einem node_load() auftauchen.

Aber was solls. mit der Verwendung von fields isses irgendwie eh besser geworden.. ist also mehr theoretische Neugier.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 3 Tagen
  • Hey danke
    vor 1 Woche 4 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 4 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 2 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 2 Tagen
  • Kannst doch auch alles direkt
    vor 2 Wochen 6 Tagen
  • In der entsprechenden View
    vor 2 Wochen 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 2 Wochen 6 Tagen
  • gelöst
    vor 5 Wochen 3 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 4 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20450

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 27 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association