Ich erstelle eine MVC-3-Anwendung (obwohl sie auch für andere Technologien wie zB ASP.NET Forms anwendbar ist) und frage mich nur, ob es machbar ist (Leistung), Bilder aus Code zu liefern, anstatt den direkten virtuellen Weg zu benutzen üblich).
Die Idee ist, dass ich die übliche Methode, Dateien zu liefern, zu verbessern:
Ich weiß, wie es geht, aber ich weiß nicht, ob ich es tun soll.
Hoffe, das macht alles Sinn!
Danke, Dan.
AKTUALISIEREN
OK - lasst uns spezifisch:
Was sind die Auswirkungen auf die Leistung, wenn Sie diese Art von Methode zum Bereitstellen aller Bilder in MVC 3 mit einem Speicherstream verwenden? Hinweis: Die Bild-URL wäre GenericFetchImage / image1 (und nur zur Vereinfachung - alle meine Bilder sind JPEGs).
%Vor%Ich weiß, dass diese Methode funktioniert, weil ich sie verwende, um dynamisch ein Bild basierend auf einem Sitzungswert für ein Captcha-Bild zu generieren. Es ist ziemlich ordentlich - aber ich würde diese Methode für alle Bilder abrufen wollen.
Ich denke, ich frage mich im obigen Beispiel, ob das in Ordnung ist oder ob es mehr Verarbeitung erfordert und wenn ja, wie viel? Würde beispielsweise die Anzahl der Besucher mit 1000 multipliziert, wäre dann der Server bei der Lieferung von Bildern prozessbedingt belastet.
Danke!
Eine ähnliche Frage wurde schon früher gestellt ( Kann ein ASP. Net MVC Controller ein Bild zurückgeben? ) und es scheint, dass die Auswirkungen auf die Leistung sehr gering sind, um Bilder aus Aktionen vs direkt zu dienen. Wie die akzeptierte Antwort anmerkt, scheint der Unterschied in der Größenordnung einer Millisekunde zu liegen (in diesem Testfall etwa 13%). Sie könnten den Test lokal erneut ausführen und sehen, was der Unterschied auf Ihrer Hardware ist.
Die beste Antwort auf Ihre Frage wenn Sie verwenden sollten, ist Antwort auf (eine andere) ähnliche Frage (Hervorhebung von mir):
Bedenken Sie Folgendes: Sie müssen eine Caching-Strategie auf dem Server neu implementieren, da IIS das für direkt angeforderte statische Dateien verwaltet. Sie müssen außerdem sicherstellen, dass Sie Ihr clientseitiges Caching mit den richtigen Headern verwalten, die in der Antwort enthalten sind. Letztendlich sollten Sie sich selbst fragen, ob die Neuerfindung einer Methode zur Bereitstellung statischer Dateien von einem Server den Anforderungen Ihrer Anwendung entspricht.
Um die spezifischen Fälle zu beantworten, die Sie mit der Frage angegeben haben:
Sicherheitsüberprüfungen anwenden
Sie können dies bereits mit der Integrierte IIS 7-Pipeline Relevantes Bit aus der Dokumentation:
Zulassen, dass Dienste, die von nativen und verwalteten Modulen bereitgestellt werden, auf alle Anforderungen angewendet werden können, unabhängig vom Handler. Die verwaltete Formularauthentifizierung kann beispielsweise für alle Inhalte verwendet werden, einschließlich ASP-Seiten, CGIs und statische Dateien .
Standardisierte Methode zum Bereitstellen von Dateien basierend auf Routenwerten
Wenn ich die Dokumentation richtig lese, können Sie ein Modul früh genug in die Pipeline einfügen, um eingehende URLs so umzuschreiben, dass sie direkt auf statische Ressourcen verweisen, und IIS kann die Anfrage von dort verarbeiten. (Der Vollständigkeit halber wird auch diese Frage bezüglich der Kartierung von Routen zu Magiern behandelt: Wie route ich Bilder mithilfe des ASP.Net MVC-Routings? )
Ermöglichen Sie ASP.NET-Komponenten die Bereitstellung von Funktionen, die ihnen aufgrund ihrer Platzierung in der Server-Pipeline zuvor nicht zur Verfügung standen. Beispiel: Ein verwaltetes Modul, das Funktionen zum Neuschreiben von Anforderungen bereitstellt, kann die Anforderung vor der Verarbeitung eines Servers neu schreiben , einschließlich der Authentifizierung.
Es gibt auch einige ziemlich starken URL Rewrite-Funktionen dass kommt mit IIS mehr oder weniger aus dem Kasten heraus.
Zurückgeben von modifizierten Bildern (falls gewünscht), z.B. verschiedene Maße (ok, dies würde nur sparsam verwendet werden, also nicht auf die obige Performance-Frage beziehen).
Es sieht aus wie ein Modul, das dies tut bereits für IIS verfügbar. Ich bin mir nicht sicher, ob das unter Bilder aus Code fallen würde oder nicht, ich denke, das könnte es sein.
Führen Sie die Geschäftslogik durch, bevor Sie den Zugriff auf die Ressource zulassen
Wenn Sie Business-Logik Leistung erbringt die Ressourcen zu erzeugen (wie ein Diagramm ) oder, wie Sie ja ein captcha Bild erwähnte dann, Sie haben im Grunde keine andere Wahl, als es auf diese Art und Weise zu tun.
Tags und Links asp.net-mvc asp.net image