Laut https://www.ruby-toolbox.com/categories/JSON_Parsers sollte ich bei der Serialisierung von Hashes mit Oj verrückte Beschleunigungen bekommen. Ich habe das neueste Juwel installiert, es in mein Gemfile aufgenommen, installiere das Bundle und kann bestätigen, dass es verwendet wird. How can _know_ which JSON renderer is active in my Rails 3 app? Es gab jedoch keinerlei Beschleunigung beim Rendern der JSON-Antwort.Leistungsverbesserungen können mit dem Oj JSON-Parser nicht erzielt werden
In einer Bibliothek, ich eine alte MySQL-Datenbank mit Rubys mysql-Modul abfragen. Ich konvertiere Zeichenfolgen in Werte und gebe ein Array von Hashes zurück. Dies funktioniert gut und es dauert etwa 1,5 bis 2 Sekunden. Es sollte, da wird ein Stück Daten hier abgerufen werden.
CONTROLLER
@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
BIBLIOTHEK
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
Mein Problem ist mit dem 'Render: json' Teil. Für etwa 1,5 MB Daten kann dies etwa 8 oder 9 Sekunden dauern. Bei größeren Datasets (3.5 - 4 MB) kann es 25 oder 30 dauern. Ich habe JSON überhaupt beschrieben, indem ich eine Zeichenkette mit "künstlichen" Trennzeichen in der Bibliothek blockierte, indem ich eine einfache .get von jQuery in der Ansicht verwendete und dann die Zeichenfolge in einem Hash in JS im Browser analysieren. Ich bin bei den kleineren Sets auf 1,4 Sekunden und bei den größeren auf 5 Sekunden.
Der JSON-Ansatz ist sauber und verständlich und entspricht der Vorgehensweise. Der String-Parsing-Ansatz ist ein schmutziger Hack, und ich mag ihn nicht, aber er ist sechs Mal schneller. Das faszinierende, was ich beim Vergleich der beiden Ansätze gelernt habe, ist, dass das "Serialisieren" meiner Hacky-Zeichenfolge zu JSON genauso schnell ist wie das "Rendern" des Textes (da es nichts zu tun gibt). Der intensive Teil dieses Prozesses ist eigentlich Serialisierung ein Hash, aber das ist genau die Art von Dingen, die ich erwarten würde, eine "schnellere" JSON-Bibliothek besser zu machen.
Bin ich grundsätzlich falsch verstanden, was Oj für mich tun sollte, oder mache ich nur etwas falsch?