Performanceprobleme mit Date und Calendar bzw. Fullcallendar
am 28.05.2011 - 08:26 Uhr in
Performanceprobleme mit Date und Calendar bzw. Fullcallendar
Hallo,
ich habe eine Website, auf der ich einen Veranstaltungskalendar bereitstelle.
Drupal 7 mit folgenden Modulen setze ich ein:
- Drupal Core 7.2
Module
- Views 7.x-3.x-dev
- cTools 7.x-1.x-dev
- Date 7.x-2.0-alpha3
- FullCalendar 7.x-2.x-dev
Das Problem ist, daß das Anzeigen der Wochenansicht ca. 15 s bis 20 s dauert.
Die Ursache scheint daran zu liegen, daß dem Kalendar einfach zu viele Termine zur Anzeige bereitgestellt werden:
Es gibt ca. 50 wöchentliche Veranstaltungen, für die ich als Wiederholfrequenz das ganze Jahr 2011 angegeben habe. Hinzu kommen noch etliche einmalige Termine. Insgesamt handelt es sich um ca. 50 * 52 + 50 = 2650 Termine.
Zur Verdeutlichung hier der Link auf die Website bzw. den Kalendar:
http://www.tanz-community24.de/
http://www.tanz-community24.de/kalendar
Um das Performanceproblem zu lösen, scheint es keinen anderen Weg zu geben, um die Anzahl der Termine, die der Calendar verarbeiten muß, zu reduzieren.Ich habe mir mehrere Lösungsalternativen überlegt, allerdings scheint keine richtig zu funktionieren.
Ich würde gerne wissen wie Ihr das machen würdet.
Alternative A) Filter einsetzen
Im Endeffekt bezieht der Kalendar seine Daten aus einer View.
Als einfachste Möglichkeit habe ich mir überlegt, nur die Termine für die aktuelle und die Folgewoche heraus zu filtern, so daß der Kalendar nur ca. 100 Termine verarbeiten muß.
Das Problem ist nur, daß der Filter anscheinend nicht wie gewünscht funktioniert. Zumindest ist der Kalendar genauso langsam wie ohne Filter.
Alternative B) Nur Termine für den aktuellen Monat generieren.
Mit Views Bulk Operations nur Termine für den aktuellen Monat generieren.
http://drupal.org/project/views_bulk_operations
Hier gibt es nur das Problem, daß dieses Modul für Drupal 7 noch in seinem sehr frühen Stadium ist und eine Änderungsfunktion für Datumsfelder noch nicht unterstützt.
Alternative C) ???
Was sind Eure Erfahrungen? Könnt Ihr mir Ratschläge geben, wie ich das Performanceproblem lösen kann, ohne die Funktionalität der Website verändern zu müssen?
Vielen Dank für Eure Hilfe
Der Gummibär
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi ... also bei mir klappen
am 28.05.2011 - 09:51 Uhr
Hi ... also bei mir klappen Deine Wochenansichten zügig und normal. Der Seitanaufbau ist flott.
Hat sich das Problem bereits gelöst? Was mir noch einfällt ... in VIEWS 2 konnte man Ansichten cachen lassen. Das steigerte die Performance der Ansicht enorm. Ich habe noch gar nicht nachgesehen, wo sich das bei VIEWS 3 versteckt ...
Leider nein
am 11.06.2011 - 16:51 Uhr
Das Problem habe ich leider noch nicht lösen können.
Im Moment besteht der Workaround darin, daß ich mir pro Event nur ca. 10 wiederkehrende Termine generieren lassen.
Nach 10 Wochen muß ich allerdings die Termine per Hand erneut generieren :-(
Die Ansichten zu cachen, scheitert daran, daß der Kalendar nach einer unbestimmten Zeit aus dem Tritt kommt,
und dann nur noch die reine HTML Liste angezeigt wird.
Ansonsten finde ich es interessant, daß es anscheinend nicht stört, wenn der initiale Aufbau des Kalendars ca 15 Sekunden dauert.
(Nachher geht das Navigieren ja wesentlich schneller ..)
Vielen Dank für Deine Mühe
Date Repeat Dates mittels Rules Actions generieren
am 16.06.2011 - 21:44 Uhr
Im Moment arbeite ich an einer weiteren Lösung, welche mir sehr erfolgversprechend erscheint.
Mittels des Rules API will ich mir z.B. Jede Woche die Anzahl der Date Repeat Dates neu generieren lassen.
Dadurch hoffe ich, da Gesamtanzahl der Termine niedrig halten zu können,
Meine Aktion sieht bisher wie folgt aus:
<?PHP
$startDate = new DateObject(strtotime('-14 days'));
$endDate = new DateObject(strtotime('+14 days'));
$STIME="18:00:00";
$ETIME="23:55:00";
// Replace Until date in existing RRule (not time)
$oldRRule = $node->field_test_daterepeat[$node->language][0]['rrule'];
if( isset($oldRRule ) ) {
$suchmuster = '/UNTIL=(\d+)T(\d+)Z/i';
$ersetzung = 'UNTIL='.$endDate->format('Ymd').'T${2}Z';
$rrule = preg_replace($suchmuster, $ersetzung, $oldRRule);
drupal_set_message("Old RRULE: " . $oldRRule );
drupal_set_message("New RRULE: " . $rrule );
} // if
else {
drupal_set_message("Kein RRULE gefunden." );
return;
}
//use the date module to figure what the stamps are for all of the repeats relative to this adjusted date
$dates = date_repeat_calc($rrule, $startDate->format('Y-m-d\T').$STIME, $endDate->format('Y-m-d\T').$ETIME );
$logMessage = "Neues Zeitfenster: " . $startDate->format('Y-m-d') . " bis " . $endDate->format('Y-m-d');
drupal_set_message($logMessage);
$value = array();
foreach ($dates as $delta => $date) {
$date_start = new DateObject($date);
$value[$delta] = array(
'value' => $date_start->format("Y-m-d\TH:i:s"),
'value2' => $date_start->format("Y-m-d\TH:i:s"),
'timezone' => $startDate->getTimezone(),
'rrule' => $rrule,
);
drupal_set_message( $delta . '=>' . $value[$delta]['value']);
}
$node->field_test_daterepeat[$node->language] = $value;
$node->revision = 1; // Create new revision
$node->log = "Automatisch generiert: ".$logMessage; // Log message
// Save updated node
if($node = node_submit($node)) { // Prepare node for saving
node_save($node);
drupal_set_message("Node with nid " . $node->nid . " updated!");
}
return array('node' => $node);
?>
[OT] Nervige PopUp[/OT]
am 17.06.2011 - 08:21 Uhr
Bei mir hat der Kalender auch recht schnell geladen, jedenfalls keine 15s. Allerdings werde ich die Seite nicht nur nicht mehr besuchen, weil es nicht wirklich mein Thema ist, sondern auch weil beim Klick auf einen Termin der verlinkte Beitrag in einem Neuen Fenster geöffnet wird. Das ist für mich ein absolutes No-Go. zur not akzepiere ich noch einen neuen Tab (Registerkarte), aber auch da nur wenn ich nicht ohne die Internet-Seite nicht leben kann. Sorry
Lädt super schnell
am 17.06.2011 - 09:28 Uhr
Hallo,
habe nun den Kalender aufgerufen und bin hin und her gesprungen. Der Kalender lädt schnell und zuverlässig. Kann Dein Problem nicht reproduzieren.
r4s6 schrieb weil beim Klick
am 17.06.2011 - 19:45 Uhr
weil beim Klick auf einen Termin der verlinkte Beitrag in einem Neuen Fenster geöffnet wird.
Tja, scheint leider ein Verhalten von FullCalendar zu sein, was man aber nicht so einfach anders konfigurieren kann....
Aber gut zu wissen. Mir ist es nicht aufgefallen, weil ich das Öffnen neuer Fenster im Browser generell blockiert habe.
Danke.
Der Gummibär schrieb r4s6
am 29.08.2011 - 16:35 Uhr
weil beim Klick auf einen Termin der verlinkte Beitrag in einem Neuen Fenster geöffnet wird.
Tja, scheint leider ein Verhalten von FullCalendar zu sein, was man aber nicht so einfach anders konfigurieren kann....
Aber gut zu wissen. Mir ist es nicht aufgefallen, weil ich das Öffnen neuer Fenster im Browser generell blockiert habe.
Danke.
Doch, das kann man bei den Format-Einstellungen mit einem Häkchen ändern ;)