Ich verwende Homestead + Vagrant + Virtualbox auf einem Mac .
Problem
Obwohl ich viele Threads / Antworten gefunden habe, wie langsame Antwortzeiten (z. B. TTFB) behoben werden können, hat keiner von ihnen funktioniert. Meine Antwortzeiten variieren zwischen 25 und 32 Sekunden, was für die lokale Entwicklung offensichtlich nicht akzeptabel ist.
Lösungsvorschläge
Ich habe viele Lösungsvorschläge von hier aus versucht: https://github.com/laravel/homestead/issues/901
Und habe auch viele Vorschläge aus diesen Threads gelesen und ausprobiert:
- Sehr langsame Reaktionen auf Homestead
- Vagrant Homestead langsam
- Vagrant langsames Laden der Seite nach 60 Sekunden nach der letzten Anforderung
- Beschleunigen Sie die Synchronisierungslatenz zwischen Host und Gast in Vagrant (NFS-Synchronisierungsordner).
Obwohl es akzeptierte Antworten gab, half mir keine.
Xdebug deaktivieren
Ich kann sagen, dass das Deaktivieren von xdebug wie hier erklärt mir geholfen hat, 5 Sekunden zu sparen.
Disc-Größe ändern
Das Ändern der Festplattengröße der VM von dynamisch auf fest, wie hier vorgeschlagen und hier erklärt, hat überhaupt nicht geholfen (das Ergebnis war sogar noch schlechter).
Verwenden von NFS (Synchronisierungsordner) wie hier vorgeschlagen
Auch das Setzen von Homestead / Vagrant auf NFS half nichts.
Versucht (Vagabunddatei):
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options:['nolock,vers=3,udp,noatime,actimeo=1']
end
Auch ausprobiert (homestead.yaml)
folders:
-
map: '/Users/myuser/PhpstormProjects/example.com'
to: /home/vagrant/code
type: "nfs"
options:
mount_options: ['nolock','vers=3','udp','noatime','actimeo=1']
NFS funktionierte in beiden Fällen, änderte jedoch nichts an TTFB beim Laden der Seite.
Natdnshostresolver einstellen: aus
Ich habe auch versucht, natdnshostresolver auszuschalten, wie hier vorgeschlagen. Es hat nichts geändert.
Anpassen des Virtualbox-Images
Natürlich habe ich auch versucht, RAM, CPUs, Grafik usw. zu vergrößern, aber wie Sie sich vorstellen können, hat es nicht geholfen.
Irgendwelche anderen Vorschläge
Ab sofort bin ich auch offen für zB Valet oder andere Empfehlungen / Lösungen, die Sie geben könnten.
Vielen Dank im Voraus!
Update 1
Das Ändern der Datei nginx.conf auf meiner VM (nachdem @emotality eine Optimierung vorgeschlagen hatte) hat ein wenig geholfen. Der Vollständigkeit halber und der Möglichkeit, dass noch ein bisschen mehr optimiert werden könnte, hier der gesamte http-Teil der Datei nginx.conf.
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
keepalive_disable none;
keepalive_requests 200;
keepalive_timeout 300s;
server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Update 2
Inhalt von homestead.yaml:
ip: 192.168.10.14
memory: 4096
cpus: 2
provider: virtualbox
natdnshostresolver: off
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: '/Users/myUser/PhpstormProjects/exampleproject.com'
to: /home/vagrant/code
type: "nfs"
options:
mount_options: ['nolock','vers=3','udp','noatime','actimeo=1']
sites:
-
map: exampleproject.local
to: /home/vagrant/code
databases:
- homestead
features:
-
mariadb: false
-
ohmyzsh: false
-
webdriver: false
name: exampleproject
hostname: exampleproject
Inhalt von Vagrantfile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
require 'json'
require 'yaml'
VAGRANTFILE_API_VERSION ||= "2"
confDir = $confDir ||= File.expand_path("vendor/laravel/homestead", File.dirname(__FILE__))
homesteadYamlPath = File.expand_path("Homestead.yaml", File.dirname(__FILE__))
homesteadJsonPath = File.expand_path("Homestead.json", File.dirname(__FILE__))
afterScriptPath = "after.sh"
customizationScriptPath = "user-customizations.sh"
aliasesPath = "aliases"
require File.expand_path(confDir + '/scripts/homestead.rb')
Vagrant.require_version '>= 2.2.4'
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
if File.exist? aliasesPath then
config.vm.provision "file", source: aliasesPath, destination: "/tmp/bash_aliases"
config.vm.provision "shell" do |s|
s.inline = "awk '{ sub(\"\r$\", \"\"); print }' /tmp/bash_aliases > /home/vagrant/.bash_aliases"
end
end
if File.exist? homesteadYamlPath then
settings = YAML::load(File.read(homesteadYamlPath))
elsif File.exist? homesteadJsonPath then
settings = JSON::parse(File.read(homesteadJsonPath))
else
abort "Homestead settings file not found in " + File.dirname(__FILE__)
end
Homestead.configure(config, settings)
if File.exist? afterScriptPath then
config.vm.provision "shell", path: afterScriptPath, privileged: false, keep_color: true
end
if File.exist? customizationScriptPath then
config.vm.provision "shell", path: customizationScriptPath, privileged: false, keep_color: true
end
if Vagrant.has_plugin?('vagrant-hostsupdater')
config.hostsupdater.aliases = settings['sites'].map { |site| site['map'] }
elsif Vagrant.has_plugin?('vagrant-hostmanager')
config.hostmanager.enabled = true
config.hostmanager.manage_host = true
config.hostmanager.aliases = settings['sites'].map { |site| site['map'] }
end
end
vagrant plugin install vagrant-bindfs
und die Zuordnunghomestead.yaml
nicht in der Vagrant-Datei zu belassen . Ich schlage auch vor, die VM zu zerstören und neu zu starten.==> myproject: Bindfs seems to not be installed on the virtual machine, installing now myproject: Bindfs 1.13.7 is installed ==> myproject: Machine is ready to use bindfs! ==> myproject: Creating bind mounts after synced_folders... myproject: /home/vagrant/code => /home/vagrant/code
. Leider hat es das Problem nicht gelöst.Antworten:
Meine Laravel-Projekte sind ebenfalls langsam, jedoch nur bei Verwendung von Postman, vorausgesetzt, es wird jedes Mal hochgefahren, wenn ich eine Anfrage stelle, die jeder Anfrage etwa 10 bis 15 Sekunden hinzufügt. Meine Lösung bestand darin, die
Keep-Alive
Einstellungen zu optimieren .Angenommen, es wird eine neue Verbindung geöffnet, Handshakes ausgeführt, Ressourcen übertragen, Verbindungen geschlossen und für jede Ressource auf Ihrer Seite wiederholt. Ich könnte mich irren, aber versuche es unten und lass uns sehen. :) :)
Dies ist nur für die lokale Entwicklung gedacht. Ich empfehle dies nicht für die Produktionsumgebung.
Apache
Oben:
Starten Sie dann Apache neu
Nginx
Im
http {}
Block:Starten Sie dann nginx neu
quelle
keepalive_timeout 65;
Ihre vorgeschlagenen Zeilen auskommentiert und hinzugefügt. Ich habe einen leichten Rückgang von ungefähr 3 Sekunden in TTFB festgestellt, aber insgesamt habe ich immer noch 22-23 Sekunden (bester Fall) für das Laden einer einzelnen Seite. Es scheint also bisher ein bisschen geholfen zu haben. Vielleicht gibt es noch andere Verbesserungen in der nginx.conf, die ich vornehmen könnte, weshalb ich meiner Frage den http-Teil der nginx.conf hinzufügen werde. Danke!Vielen Dank an euch alle, aber ich habe eine ziemlich interessante Lösung gefunden oder eher ein Problem, das ich hatte.
Ich habe die lokale Umgebung für eine WordPress-Installation verwendet. Im Ordner wp-content befand sich eine Datei mit dem Namen " object-cache.php ", die Memcached verwendet. Memcached ist in Homestead installiert, scheint aber eine andere Konfiguration zu haben als mein Live-Server.
Dies führt dazu, dass lokale Dateien nicht ordnungsgemäß zwischengespeichert werden, was letztendlich dazu führt, dass der Code für jede Anforderung alle verfügbaren Optionen aus der Datenbank abruft.
Insgesamt war es also ein großes Caching-Problem.
Das Entfernen der Datei object-cache.php ist jetzt meine Lösung (was zu einem TTFB von 1,23 Sekunden führt).
Ich lasse dies hier, falls jemand auf ein ähnliches Problem stößt. Nochmals vielen Dank für all die Hilfe und dachte, ihr habt das getan.
quelle
Ich hatte einmal eine Site, die für die Entwicklung eine Verbindung zu 'localhost' anstelle von '127.0.0.1' auf meinem lokalen Netzwerk herstellte. Diese kleine Tatsache ließ die DNS-Suche ewig dauern, und selbst GraphQL brauchte 3 Sekunden, um zu antworten. Vielleicht ist es etwas Ähnliches an Ihrem Ende.
quelle
Vagrant über VirtualBox auf Catalina (MacMini Ende 2012 (Dual-SSD und 16 MB RAM) nach dem Upgrade) war für mich unglaublich langsam, nicht nur für PHP- oder Javascript-Projekte, obwohl ich hauptsächlich daran gearbeitet habe. Ich habe ein wenig Zeit mit Nachforschungen verbracht und die Lösung, die für mich funktioniert hat, war,
/sbin/nfsd
und hinzuzufügenVirtualBox
zuFull Disk Access
inSettings->Privacy
auf dem Mac, wie unten auf den Link beschrieben. Ich hoffe das wird jemand anderem helfen. In meinem Fall ging TTFB von ungefähr 15 Sekunden auf weniger als 1 zurück. (Das ist ziemlich gut für Vagrant, ha!)https://github.com/hashicorp/vagrant/issues/10961#issuecomment-567430897
quelle
Für diejenigen, die Homestead unter macOS "High Sierra" oder höher ausführen, war die Lösung, die für mich funktionierte, so einfach wie das Ändern einiger Einstellungen in der Datei homestead.rb .
Wo immer Sie in Ihrer homestead.rb- Datei finden,
settings['cpus'] ||= 1
ändern Sie die Einstellungen fürsettings['cpus'] ||= 2
. Sie können auch die Speichergröße erhöhen (ich habe es nicht getan) und den Wert größer als den Standardwert einstellensettings['memory'] ||= 2048
.Bevor ich fast jede im Web gefundene Lösung ausprobiert habe, wurde sichergestellt, dass sie
nfs
festgelegt wurde, Skripte und andere Vorschläge hinzugefügt wurden und keine funktionierte, bis ich die Einstellungen für den CPU- Standardwert auf Einstellungen ['cpus'] || = erhöhte 2Im Terminal dauerte die einfache Ausführung
npm run dev
vonphp artisan
Befehlen oder Befehlen etwa 10 bis 15 Sekunden bis die Eingabeaufforderung frei war, mit anderen Befehlen fortzufahren.Mit den obigen Änderungen, dauert es jetzt nur noch 2 bis 3 Sekunden !
Ich hoffe, dies hilft jedem, der die gleiche langsame Leistung erlebt, insbesondere unter macOS. "High Sierra" oder später. Ich bin auf macOS "Catalina" und alles funktioniert jetzt gut.
quelle