3

我在我的项目中使用acts-as-taggable-on gem。但是,加载所有标签大约需要 80 秒。

我在 run_controller 中添加了急切加载,但它不起作用。这是一段代码:

def index
  @runs = Measurement.includes(:tags).order( "run_name DESC" ).group( :run_name )#.descending #.order_by( :run => 'desc' )
  respond_to do |format|
    format.html # index.html.erb
    format.json  { render :json => @runs }
  end
end

我正在使用acts-as-taggable-on 支持的tag_list 来显示标签。因此,在 Measurements 上使用预先加载对性能没有影响。以下两个是stackflow中的相关问题: 1.acts_as_taggable_on :如何优化查询? 2. 使用acts_as_taggable_on优化查询

我查看了日志文件,发现最耗时的部分是加载标签,比如

ActsAsTaggableOn::Tag Load (69.9ms) SELECT tags.* FROM tagsINNER JOIN taggingsON tagsid= taggingstag_id在哪里taggingstaggable_id= 223866 和taggingstaggable_type= '测量' AND (taggings.context = 'tags' AND taggings.tagger_id 为空)

ActsAsTaggableOn::Tag Load (70.2ms) SELECT tags.* FROM tagsINNER JOIN taggingsON tagsid= taggingstag_id在哪里taggingstaggable_id= 223854 和taggingstaggable_type= '测量' AND (taggings.context = 'tags'

它有数千个查询来加载标签,每个查询花费大约 0.07 秒。以下代码用于显示标签。

= form_for (run), :remote => true, :method => :put,  :html => { :class => "myform"} do |f|
  =f.text_field :tag_list, :class => "tags"

有什么帮助吗?谢谢。

4

2 回答 2

3

我今天才遇到这个。您可以通过关联进行预加载tags,只要您不使用该tag_list方法即可。

这里这里提到

于 2016-05-26T21:54:44.960 回答
0

已考虑切换到https://github.com/tmiyamon/acts-as-taggable-array-on。您将需要使用 postgres 作为您的数据库。

看看这个http://adamnengland.wordpress.com/2014/02/19/benchmarks-acts-as-taggable-on-vs-postgresql-arrays

于 2014-07-23T21:41:02.823 回答