2013-02-26 20 views
6

Używam widoków .json.erb zamiast wywoływania metody to_json.Jak zminimalizować wyjście JSON w Railsach?

Znalazłem kilka porad dotyczących minima wydajności JSON. Jedni opowiadają o skompresowaniu całego wyjścia aplikacji WWW, inni zalecają użycie after filter lub before render, ale nie wyjaśniają, jak zmniejszać spacje i tabulatory między elementami JSON i skąd wziąć dane wejściowe JSON i gdzie umieścić wynik minified. Trzecie podpowiedź ściśle mówi o zminimalizowaniu JavaScript.

Odpowiedz

4

Najprostszym sposobem jest sprawienie, aby Ruby przeanalizowała całą odpowiedź i wypluła ją ponownie, używając after_filter. Wypróbuj następujący kod w app/controllers/application_controller.rb.

class ApplicationController < ActionController::Base 
    after_filter :minify_json 

    private 

    def minify_json 
    response.body = JSON.parse(response.body).to_json if request.format.json? 
    end 
end 

Jeśli zdecydujesz, że chcesz JSON upiększony zamiast minified, można użyć tego kodu:

class ApplicationController < ActionController::Base 
    after_filter :beautify_json 

    private 

    def beautify_json 
    response.body = JSON.pretty_generate(JSON.parse(response.body)) if request.format.json? 
    end 
end 

Albo, można pozwolić wnioskodawca określić za pomocą parametru:

class ApplicationController < ActionController::Base 
    after_filter :format_json 

    private 

    def format_json 
    if request.format.json? 
     json = JSON.parse(response.body) 
     response.body = params[:pretty] ? JSON.pretty_generate(json) : json.to_json 
    end 
    end 
end