2012-08-06 6 views
7

Ich hoffe, jemand kann mir mit diesem Drupal 7 Problem helfen. Ich habe festgestellt, dass die Ladezeit sehr langsam ist, wenn ich die Adresse der Website für das "erste Mal" eingegeben habe. Es dauert ungefähr 20 (durchschnittliche) Sekunden, nur um Dateien zu laden und den Inhalt anzuzeigen. Wie es eine Verzögerung hat. Aber nach dieser Zeit ist es sehr schnell und alles ist in Ordnung. Sobald die Seite (n) geladen ist/sind, können wir sie schnell und ohne Verzögerung aktualisieren.Drupal 7 ist zu langsam auf "First Load"

Ich füge ein Bild an, um den Netzwerk-Wasserfall von Chrome zu sehen.

Danke euch allen.

Image: http://i.stack.imgur.com/vuejk.png (werfen Sie einen Blick auf die zweite Reihe)

[UPDATE] Ich bin mit php-apc, aber immer noch das gleiche Problem.

+0

scheint, müssen Sie einige Cache oder CDN verwenden, um langes Warten in der ersten Ansicht zu vermeiden. Ihre Webseite selbst ist sehr lang, zeigt ein Datenbankproblem an, vielleicht –

+0

Verwenden Sie eine externe Datenbank? Es ist möglich, dass die DNS-Resolver nicht funktionieren. – frustratedtech

+0

Siehe http://drupal.stackexchange.com/questions/36147/performance-problem-delay-on-first-request für eine ziemlich definitive Liste dessen, was das Problem verursachen könnte – Clive

Antwort

6

Dies ist (wahrscheinlich) wegen der Drupal Cron-Aufgaben, die alle paar Stunden/Tage (je nach Einstellungen) ausgeführt werden. Drupal führt dann alle in der Warteschlange befindlichen Cron-Jobs aus. Das kann lange dauern.

Werfen Sie einen Blick auf this drupal.stackoverflow Seite.

e: Auch kann diese zwicken helfen, aber ich habe das selbst nicht versucht: http://drupal.org/node/1576686

2

Schalten Sie den Update Manager-Modul auf die Produktion. Wenn Cron läuft, sucht es nach Updates, die Zeit brauchen. Sparen Sie Zeit, indem Sie dieses Modul nur auf Entwicklungsstandorten aktivieren (Dev, Staging usw.). Es besteht keine Notwendigkeit für die Produktion, Zeit damit zu verbringen.

0

Werfen Sie einen Blick auf, was Sie in Ihrer Website Kopf Abschnitt haben. Wenn es dort viele @ import-Anweisungen gibt, dann ist das Problem wahrscheinlich eher im Frontend als im Backend.

Drupal verwendet standardmäßig viele .css- und .js-Dateien. Der Browser kann die angeforderte Seite erst zeichnen, nachdem alle .css- und .js-Dateien von head heruntergeladen wurden.

Das Problem mit @import ist, dass Ihr Browser nur eine einzige CSS-Datei auf einmal herunterladen kann. Es ist ein anderer Fall mit dem Tag. Css-Dateien können in diesem Fall parallel heruntergeladen werden, was schneller bedeutet.

Das zweite Mal, wenn Sie die Website besuchen, werden CSS- und JS-Dateien aus dem Browser-Cache geladen, was erklärt, warum Seiten schneller geladen werden.

Vorgeschlagene Problemumgehung: Wechseln Sie zu Admin/Einstellungen/Leistungsaktivierung css und js Aggregation.

2

Ich weiß, das ist eine alte Frage, aber hier ist meine Lösung. Dies geschieht bei Websites, die nicht viel Datenverkehr generieren, und der Siteanwendungspool auf dem Server wird nach einer bestimmten Zeitspanne automatisch heruntergefahren (ich glaube, der Standardwert beträgt 20 Minuten). Daher muss die erste Person, die nach diesem Zeitraum auf die Website gelangt, warten, bis der Anwendungspool neu gestartet wird, und das kann einige Zeit auf PHP-Sites dauern. Dies gilt auch für Maisjobs. Der Kern-Mais-Job ist so eingestellt, dass er alle "n" -Minits ausführt, aber er kann nur ausgeführt werden, wenn jemand die Site besucht. Also muss die erste Person, die nach dem festgelegten Maisintervall auf die Baustelle kommt, auf den Maiseinsatz warten. Für eine Produktionsstätte sollten Sie daher die Kernmais-Jobs abwählen und manuell ausführen oder einen externen Service nutzen, um Mais zu betreiben (indem Sie die externe URL des Mais passieren). Die beste Lösung ist, einen kostenlosen externen Dienst wie Uptime Robot zu verwenden, um Ihre Website alle 5-10 Minuten zu treffen und so die Verbindung am Leben zu erhalten.

+0

In Bezug auf den Application Pool Shutdown wird dies passieren: Verwenden von ** PHP-FPM ** mit _pm = ondemand_ oder Verwenden von ** PHP-CGI ** mit _FcgidIdleTimeout_ mit einem Wert> 0. –