Według https://www.ruby-toolbox.com/categories/JSON_Parsers, powinienem uzyskać szalone przyspieszenia podczas serializowania hashe za pomocą Oj. Zainstalowałem najnowszy klejnot, umieściłem go w moim Gemfile, uruchomiłem instalację pakietu i mogę potwierdzić, że się przyzwyczaja. How can _know_ which JSON renderer is active in my Rails 3 app? Jednak nie było absolutnie żadnego przyspieszenia w renderowaniu odpowiedzi JSON.Nie można uzyskać poprawy wydajności przy użyciu parser Oj JSON
W bibliotece odpytuję starszą bazę danych MySQL z modułem mysql Ruby. Konwertuję ciągi znaków na wartości i zwracam tablicę skrótów. To działa dobrze i zajmuje około 1,5 do 2 sekund. Powinien tu być pobrany fragment danych.
KONTROLER
@data = Gina.points(params[:project], params[:test],
session[:username], session[:password])
respond_to do |format|
format.html { render :text => @data }
format.json { render :json => @data } # :text => MultiJson.engine
end
BIBLIOTEKA
dbh = Mysql.real_connect(@@host, u, p)
res = dbh.query("SELECT * FROM #{d}.#{t}")
@data = []
res.each_hash do |row|
obj = {}
row.each_pair do |k, v|
v.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? obj[k] = v : obj[k] = v.to_f
end
@data << obj
end
Mój problem jest z 'render: json' części. Około 1,5 MB danych może zająć około 8 lub 9 sekund. W przypadku większych zestawów danych (3,5 - 4 MB), może to zająć 25 lub 30. Napisałem dookoła używając JSON w ogóle, zacinając ciąg wraz z "sztucznymi" separatorami w bibliotece, używając zwykłego .get z jQuery w widoku , a następnie analizowanie łańcucha w haszowanie w JS w przeglądarce. Zajmuję 1,4 sekundy na mniejszych setach i 5 sekund na większych.
Podejście JSON jest czyste i zrozumiałe i jest zgodne z tym, jak zaprojektowano działania. Podejście oparte na łańcuchach to brudny hack i nie podoba mi się to, ale jest SZEŚĆ razy szybszy. Fascynującą rzeczą, której nauczyłem się przy porównywaniu obu podejść, jest to, że "serializacja" mojego hacky string do JSON jest równie szybka jak "renderowanie" tekstu (jako że naprawdę nic nie trzeba robić). Intensywna część tego procesu jest serializacją hash, ale jest to dokładnie taka rzecz, jakiej oczekiwałbym od "szybszej" biblioteki JSON, żeby zrobić lepiej.
Czy zasadniczo nie rozumiem, co Oj powinien robić dla mnie, czy robię coś złego?