Я пытаюсь создать автозаполнение модели для городов и zipcode с использованием Rails 4 и JQuery ui. У меня есть большой файл JSON (около 500 000 строк), содержащий массив (cp_autocomplete), который содержит zipcode (CP) и города (CITY).Действия автозаполнения анализируют большой файл JSON при каждом вызове ajax (сделать это быстрее)
В моей текущей модели на каждый запрос ajax действие автозаполнения считывает JSON-файл, анализирует его, а затем ищет почтовый индекс или город, составляет список из девяти zipcode + городов (если найден) и отображает список как 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, у вас уже есть база данных? Я бы сделал таблицу (или, может быть, пару таблиц) для хранения данных в этом текстовом файле. –