Theo https://www.ruby-toolbox.com/categories/JSON_Parsers, tôi nên tăng tốc độ điên khi sử dụng Oj. Tôi đã cài đặt gem mới nhất, bao gồm nó trong Gemfile của tôi, chạy bó cài đặt, và có thể xác nhận rằng nó đang được sử dụng. How can _know_ which JSON renderer is active in my Rails 3 app? Tuy nhiên, hoàn toàn không có sự tăng tốc trong việc hiển thị phản hồi JSON.Không thể nhận được các cải thiện hiệu suất bằng cách sử dụng trình phân tích cú pháp JSON Oj
Trong thư viện, tôi truy vấn cơ sở dữ liệu MySQL cũ với mô-đun mysql của Ruby. Tôi chuyển đổi chuỗi thành giá trị và trả về một mảng băm. Điều này hoạt động tốt và mất khoảng 1,5 đến 2 giây. Nó nên, có một đoạn dữ liệu được lấy ra ở đây.
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
THƯ VIỆN
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
Vấn đề của tôi là với 'render: json' phần. Đối với khoảng 1,5 MB dữ liệu, điều này có thể mất khoảng 8 hoặc 9 giây. Trên các tập dữ liệu lớn hơn (3,5 - 4 MB), nó có thể mất 25 hoặc 30. Tôi đã viết xung quanh bằng cách sử dụng JSON ở tất cả bằng cách tạo chuỗi ký tự cùng với các bộ phân tách "nhân tạo" trong thư viện, bằng cách sử dụng đồng bằng .get từ jQuery trong khung nhìn , và sau đó phân tích chuỗi thành một băm trong JS trong trình duyệt. Tôi xuống đến 1,4 giây trên các bộ nhỏ hơn, và 5 giây trên những cái lớn hơn.
Phương pháp JSON là rõ ràng và dễ hiểu và phù hợp với cách mọi thứ được thiết kế để hoạt động. Cách tiếp cận phân tích cú pháp chuỗi là một hack bẩn, và tôi không thích nó, nhưng đó là SIX TIMES nhanh hơn. Điều hấp dẫn tôi đã học được khi so sánh hai phương pháp tiếp cận là "serializing" chuỗi hacky của tôi với JSON chỉ nhanh như "dựng hình" văn bản (như không có gì để làm, thực sự). Phần chuyên sâu của quá trình này là thực sự serializing một hash, nhưng điều này là chính xác loại điều tôi mong đợi một thư viện JSON "nhanh hơn" để làm tốt hơn.
Tôi có hiểu lầm cơ bản về việc Oj nên làm gì cho tôi hay tôi chỉ làm điều gì đó sai?