Der Aufwand für die Instanziierung einer neuen Controllerinstanz ist unbedeutend und bedeutet, dass zwischen zwei völlig unabhängigen Anforderungen kein versehentlich freigegebener Status vorhanden ist. Jede "Einsparung" an Prozessorzeit würde durch das Potenzial, verheerende Bugs zu produzieren, mehr als ausgeglichen.
Denken Sie daran, dass die Controller zum Speichern des anforderungsspezifischen Status dienen. Die Wiederverwendung von Controllern würde erfordern, dass Sie alle @variable
, die Sie jemals festgelegt haben, zu Beginn jeder Aktion zurücksetzen. Sonst könnte etwas wie @is_admin = true
aufgezogen und nie gelöscht werden. Die weniger konstruierten Fehler, die Sie eigentlich einführen würden, wären viel subtiler und würden die Entwicklerzeit verkürzen.
Sie sehen Optimierungen, wo keine sind. Etwas muss den Status beibehalten und zwischen den Anforderungen zurücksetzen, oder Sie haben diesen Alptraum des versehentlich freigegebenen Status. Wenn Sie Controller-Instanzen zwischen Anforderungen persistieren, schieben Sie einfach den Job zum Verwalten/Zurücksetzen des Status auf eine niedrigere Stufe, wobei die Antwort immer noch ist, um eine neue Instanz einer staatsverwaltenden Klasse für jede Anforderung zu instanziieren. Computer sind sehr gut bei der Zuteilung und Freigabe von Ressourcen, so nie sich darum kümmern, bis Sie tatsächlich wissen, dass es ein Flaschenhals ist. In diesem Fall ist die Instanziierung eines neuen Controllers für jede Anforderung leicht die richtige Wahl.
Im Fall von Schienen, @variable = value
verwenden zu können, ist ein großer Gewinn von einem Code-Übersichtlichkeit und Bedienbarkeit Stand-Punkt, und dies mehr oder weniger erfordert jede Instanz eines Controllers Verwerfen, wenn die Anforderung abgeschlossen ist.
Gute Frage, Sie sollten DHH dazu fragen :) Aber ich denke, der wichtigste Punkt ist, absolut eine Umgebung zu einer anderen zu isolieren. Denn sonst muss das System mehr Rechenleistung für die Verteilungslogik ausgeben. imho –
Weil es einfacher ist, über Code nachzudenken, wenn kein Risiko besteht, auf die Daten einer anderen Anfrage zu stampfen. –
Keine Überraschungen, aber es scheint, dass Grails das Gleiche tut. –