Webrick und Thin sind sehr langsam beim Bereitstellen von statischen Dateien in Windows. Wie kann ich sie beschleunigen?

8

Ich entwickle gerade eine Web-App und wechsle dafür zwischen Windows- und Mac-Dev-Maschinen.

Mein Problem ist, dass Seiten extrem langsam unter Windows rendern, aber es ist nicht mein Ruby-Code, der langsam ausgeführt wird, sondern dass statische Dateien langsam bedient werden.

Eine typische Seite braucht etwa 200ms um gerendert zu werden und in dev geliefert zu werden (sowohl Mac als auch Windows sind hier ähnlich), aber es enthält ungefähr 50 statische Dateien (in der Produktion sind es nur 5 bis 10, sobald sie verkleinert und kombiniert werden) in dev sind sie noch getrennt).

Diese 50 Dateien benötigen etwa 1,5 Sekunden für die Bereitstellung auf dem Mac, aber etwa <10 Sekunden> für Windows. Was macht es ziemlich gewunden, Dinge zu testen ...

Ich habe sowohl Webrick als auch Thin ausprobiert, sie sind ungefähr gleich.

Hat jemand dieses Problem gefunden und weiß, wie man das verbessert?

Ich habe versucht, das Webrick-Konf zu ": DoNotReverseLookup = & gt; true" zu ändern, wie in dieser Antwort vorgeschlagen aber es hilft nicht.

Jede Hilfe wird sehr geschätzt werden Danke! Daniel

    
Daniel Magliola 28.11.2013, 13:24
quelle

3 Antworten

2

Sie stoßen auf zwei existentielle Probleme, die Ruby-Entwickler lange Zeit geplagt haben:

  • Wirrick ist langsam. Immer. Mach dir nur keine Mühe.
  • Ruby ist unter Windows immer langsamer. Manchmal um Größenordnungen wie du es gefunden hast.

Wenn Sie also darauf bestehen, die Entwicklung unter Windows selbst zu machen (statt nur unter Linux zu entwickeln oder auf einer Linux-VM unter Windows zu entwickeln), müssen wir uns überlegen, wie Sie ein Schwein mit Lippenstift versehen können.

>

Einige Ideen:

  • Stellen Sie sicher, dass Sie die neueste Version von Ruby ausführen.
  • Versuchen Sie, nginx mit Thin zu verteilen, wie in diesem hilfreichen, wenn auch veralteten Tutorial . Dies wird Ihnen helfen, das Multithreading und die Asynchronität von Thin optimal zu nutzen.
  • Verwenden Sie Capistrano, um über dieses ebenfalls veraltete GitHub Projekt zu Windows zu gelangen.

Wenn Sie sich entschieden haben, Rails in einer Umgebung zu entwickeln, für die sie nicht entwickelt wurde, können Sie eine VM in der beschriebenen Weise einrichten hier . Der Autor berichtet von einer erheblichen Beschleunigung.

    
Vidya 08.12.2013 22:38
quelle
1

Verwenden Sie eine Ubuntu-VM in VirtualBox, es ist wahrscheinlich viel näher an Ihrer Deployment-Umgebung als Mac und Windows, was bedeutet, dass es in der Produktion weniger "aber in der Entwicklung" Probleme gab.

Außerdem ersparen Sie sich viel Zeit, sich mit Eigenheiten verschiedener Rubin / Edelsteinsimulationen und verschiedenen Kopfschmerzen aufgrund von nativen Erweiterungen zu beschäftigen.

Sie können:

  1. richten Sie das interne Netzwerk ein, damit Sie den Browser unter Windows verwenden können, um die App zu durchsuchen, die in der VM ausgeführt wird
  2. verwenden Sie etwas wie putty, um Konsolensitzungen zu VM
  3. zu öffnen
  4. Teilen Sie einen Dropbox / Sparkleshare-Ordner mit Ihrer Ubuntu-VM, so dass Sie immer denselben Code zwischen Windows und Mac-Box und Ubuntu VM
  5. haben
  6. und dies ermöglicht Ihnen, Ihren Lieblings-Editor unter Windows / Macos zu verwenden, um Dateien innerhalb der VM zu bearbeiten
  7. Sie können diese VM auch unter Mac verwenden

Ubuntu Installation unter VirtualBox ist schnell, einfach und gut dokumentiert, es ist ziemlich einfach nur ein Assistent. Alternativ können Sie versuchen, ein gutes Landstreicher Rezept zu finden (siehe Ссылка ) oder fragen Sie nach, ob ein Kollege von Ihnen bereit wäre zu teilen seine / ihre vbox.

    
bbozo 04.12.2013 19:51
quelle
0

Ich habe eine Leistungseinbuße bei der Entwicklung (aufgrund der Echtzeit-Kompilierung) bei der Arbeit mit Projekten mit einer großen Anzahl von Assets festgestellt, aber ich war nicht auf Windows.

Ich nehme an, der große Leistungsunterschied kann durch eine ineffiziente Asset-Kompilierung unter Windows verursacht werden.

Ich habe keine Erfahrung mit Windows-Entwicklung, ich habe lange Zeit keine Windows-Maschine benutzt, jedoch habe ich eine merkliche Leistungssteigerung bei der parallelen Verarbeitung von Assets (in Entwicklung) festgestellt, als ich zu Multithread-Servern wechselte. speziell Puma . Beachten Sie, dass der Standard-Rails-Webserver (Webrick) in jedem Fall sehr ineffizient ist.

Wie Konstantin in dieser Antwort erklärt , gibt es derzeit mehrere Möglichkeiten. Sie können sie nach dem Verarbeitungsmodus gruppieren.

Überspringe den gesamten Hintergrundverlauf über Ruby-Threads, Multi-Prozess usw., ich würde dich einladen, Puma in deinem Rechner auszuprobieren und zu sehen, ob es die Last verbessert.

Puma funktioniert besser mit Ruby-Implementierungen, die echtes Multi-Threading bieten, aber zitiert die offizielle Readme

  

Im MRT gibt es eine Global Interpreter Lock (GIL), die sicherstellt, dass immer nur ein Thread gleichzeitig ausgeführt werden kann. Aber wenn Sie eine Menge IO blockieren (wie HTTP-Aufrufe an externe APIs wie Twitter), verbessert Puma immer noch den MRT-Durchsatz, indem es das Blockieren von IO gleichzeitig erlaubt (EventMachine-basierte Server wie Thin deaktivieren diese Fähigkeit und erfordern Sie verwenden spezielle Bibliotheken).   Puma wurde entwickelt, um Rack-Anwendungen eine einfache und leistungsstarke Anfrage / Antwort-Pipeline zu bieten.

    
Simone Carletti 04.12.2013 20:53
quelle