https://www.ruby-toolbox.com/categories/JSON_Parsersによると、Oj を使用してハッシュをシリアル化する際に、非常に高速化されるはずです。最新の gem をインストールし、Gemfile に含め、bundle install を実行し、それが使用されていることを確認できました。Rails 3 アプリでどの JSON レンダラーがアクティブになっているかを知るにはどうすればよいですか? ただし、JSON 応答のレンダリングはまったく高速化されていません。
ライブラリで、Ruby の mysql モジュールを使用してレガシー MySQL データベースにクエリを実行します。文字列を値に変換し、ハッシュの配列を返します。これは問題なく動作し、約 1.5 ~ 2 秒かかります。ここでデータのチャンクが取得されているはずです。
コントローラ
@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
図書館
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
私の問題は、「render :json」部分にあります。約 1.5 MB のデータの場合、これには約 8 ~ 9 秒かかります。より大きなデータセット (3.5 - 4 MB) では、25 または 30 かかることがあります。私は、ビューで jQuery からのプレーンな .get を使用して、ライブラリ内の「人工的な」セパレーターと一緒に文字列を詰め込むことによって、JSON を使用して書きました。 、そしてブラウザのJSで文字列をハッシュに解析します。小さいセットでは 1.4 秒、大きいセットでは 5 秒まで縮みます。
JSON のアプローチは簡潔で理解しやすく、物事が機能するように設計された方法と一致しています。文字列解析のアプローチは汚いハックで、私は好きではありませんが、6 倍高速です。2 つのアプローチを比較して学んだ興味深いことは、ハッキーな文字列を JSON に "シリアル化" することは、テキストを "レンダリング" するのと同じくらい速いということです (実際には何もする必要がないため)。このプロセスの集中的な部分は、実際には hashをシリアル化することですが、これはまさに、「より高速な」JSON ライブラリがより適切に機能することを期待する類のものです。
私は、Oj が私のために何をすべきかを根本的に誤解していますか、それとも何か間違ったことをしているだけですか?