2012-02-24 12 views
17

Używam Ruby on Rails 3.1 i chciałbym wiedzieć (dla wydajności powodów), czy after_filter czy nie, po tym pliki widoku są renderowane. To znaczy, kiedy użytkownik uzyskuje dostęp do mojego adresu URL aplikacji, powiązany plik widoku, który powinien wyświetlić, jest renderowany przed uruchomieniem after_filter lub przed uruchomieniem pliku widoku?Jak/kiedy działa "after_filter"?

Innymi słowy, rozpoczyna serwera aplikacyjne wysłać świadczonych zobacz dane użytkownika przed uruchomić after_filter lub czeka, aby uruchomić metodę after_filter a dopiero potem wysyła tego widoku danych?

P.S.: Otworzyłem to pytanie, ponieważ chciałbym uruchomić niektóre aktualizacje systemu (note: te aktualizacje nie wpływają na dane wyjściowe widoku i nie są "używane przez"/"konieczne do" widoku w ogóle) bez wpływu na doświadczenie użytkownika końcowego (na przykład: powolne ładowanie stron internetowych mojej aplikacji).

Odpowiedz

11

Należy pamiętać, że żądanie do serwera jest w pełni spójne i działa we własnym wątku.

Jeśli umieścisz kod w numerze after_filter, spowoduje to opóźnienie całego żądania: nie można podsumować, jeśli wątek jest żywy, strona nie zostanie dostarczona.

Dlatego znalazłeś świetne wtyczki, takie jak DelayedJob i Resque, działają one w równoległych procesach i nie mają wpływu na Twoją aplikację.


Aby odpowiedzieć na oryginalne pytanie, after_filter są wyzwalane po pogląd został przetworzony.

Jest to czasami uciążliwe dlatego people created some before_render filters.

5

after_filter prowadzony jest po zawartość została wygenerowana, ale zanim to zostało wysłane do klienta. Możesz to sprawdzić, ponieważ masz dostęp do całkowicie wygenerowanych danych odpowiedzi w metodzie response twojego kontrolera w dowolnym after_filter.

After_filters to nieodpowiednie miejsca, w których można umieścić długo działające zadania, ponieważ z pewnością wpłyną na wrażenia użytkowników. Rozważ zamiast tego użycie after_filter, aby uruchomić długo działające zadanie delayed_job lub resque, aby wykonać pracę w tle.

Powiązane problemy