我正在嘗試使用Rails 4和Jquery ui爲城市和郵編自動填充模型。 我有一個大的JSON文件(約500,000行),其中包含一個包含郵編(CP)和城市(CITY)的數組(cp_autocomplete)。自動完成操作在每個ajax調用中解析大型JSON文件(使其更快)
在我當前的模型中,在每個ajax查詢中,自動完成操作讀取JSON文件,解析它,然後搜索郵政編碼或城市,製作9個郵政編碼+城市列表(如果找到)並將列表呈現爲json 。
這可以工作,但它使2秒多的呈現列表。
任何想法使其運行速度更快? - 我怎麼能解析一次json文件,而不是每個ajax查詢? - 我想過緩存解析的json值,然後在1分鐘後刪除它。
這裏是我的自動完成的動作:
def autocomplete
require 'auto_compeletion_cp_city' #a class that has PostalCode and City attributes
postal_file = File.read("#{Rails.root}/public/postal_code_fr.json")
postal_parse = JSON.parse(postal_file)
@list = []
if !(ActionController::Base.helpers.sanitize(params[:Postalcode]).blank?)
search_term = ActionController::Base.helpers.sanitize(params[:Postalcode])
search = /\A#{search_term}/
postal_parse["cp_autocomplete"].each do |f|
if search.match("#{f['CP']}",0) && (@list.length < 9)
selected = AutoCompletionCpCity.new
selected.PostalCode = f['CP']
selected.City = f['CITY']
@list << selected
end
end
else
if !(ActionController::Base.helpers.sanitize(params[:city]).blank?)
search_term = ActionController::Base.helpers.sanitize(params[:city])
search = /\A#{Regexp.escape(search_term)}/i
postal_parse["cp_autocomplete"].each do |f|
if search.match("#{f['CITY']}",0) && (@list.length < 9)
selected = AutoCompletionCpCity.new
selected.PostalCode = f['CP']
selected.City = f['CITY']
@list << selected
end
end
end
end
respond_to do |format|
format.json {
render json: @list
}
end
end
只是想法你有沒有嘗試數據庫解決方案?或者也許像Redis的東西來替換文件?我經常使用這個解決方案與ajax自動完成選擇字段,並選擇2,但我從來沒有嘗試過500,000行的東西。 –
我正在研究Redis解決方案..我會讓你知道它是否更好。 對於數據庫解決方案,你將數據保存爲json數組還是創建一個新的sql數據庫? 我使用sqlite3進行開發 – Dali
假設你有一個rails應用程序,你已經有一個數據庫了?我會製作一個表格(或者一些表格)來保存這個文本文件中的數據。 –