我有一个名为clientes的表,这个表有大约15536条记录,这使得数据加载速度极慢。如何优化日志负载以改进过程?
这是我的索引视图
<h1>Clientes</h1>
<style>
.container {
}
</style>
<table id="clientes" class="display"><!--el id clientes es de datatables referenciado en clientes.coffe y display class es una clase de datatables-->
<thead>
<tr><!--active es para sombrear la fila-->
<th>Clave</th>
<th>Nombre</th>
<th>Nombre Corto</th>
<th>Dirección</th>
<th>Colonia</th>
<th>Credito</th>
<th>DiasCredito</th>
<th>LimiteCredito</th>
<th>Saldo</th>
<th>Ruta</th>
<th>Promociones</th>
<th>Acción</th>
<th></th>
</tr>
</thead>
<tbody id="container_clientes">
<%= render @clientes %><!--carga todos los clientes-->
</tbody>
my partial cliente.html.erb
<tr id="cliente_<%= cliente.id %>">
<td><%=cliente.IdCli%>
</td>
<td><%=cliente.Nombre%></td>
<td><%=cliente.NombreCorto%></td>
<td><%=cliente.Direccion%></td>
<td><%=cliente.Colonia%></td>
<td>
<% if cliente.Credito == true%>
<input type="checkbox" disabled="true" checked="true">
<%else%>
<input type="checkbox" disabled="true" >
<%end%>
</td>
<td><%=cliente.DiasCreedito%></td>
<td><%=cliente.LimiteCredito%></td>
<td>
<% if cliente.detallecob.last != nil%>
<%=cliente.detallecob.last.Saldo%>
<%else%>
<%=cliente.Saldo%>
<%end%>
</td>
<td>
<% if cliente.relclirutas != nil%>
<% cliente.relclirutas.each do |varias| %>
<%=varias.ruta.Ruta%>
<%end%>
<%end%>
</td>
<td>
<% if cliente.relclili != nil%>
<%=cliente.relclili.listapromomast.ListaMaster%>
<%end%>
</td>
<td>
<%= link_to '<i class="fa fa-gift" aria-hidden="true"></i> Activos'.html_safe, activos_cliente_path(cliente), class:"btn btn-primary btn-xs boton" %>
<button type="button" class="btn btn-warning btn-xs" data-toggle="modal" data-target="#myupdatecliente_<%= cliente.id %>">
Editar
</button>
<!--Destroy-->
<% if cliente.Status == true%>
<%= link_to 'Eliminar', cliente, method: :delete, class: "btn btn-danger btn-xs", remote:true %>
<%else%>
<%= link_to 'Habilitar', cliente, method: :delete, class: "btn btn-success btn-xs", remote:true %>
<%end%>
</td>
<td class="no" >
</td>
</tr>
答案 0 :(得分:1)
您可以使用kaminari gem进行数据分页,只需访问下一页就可以获取更多数据。
Cliente.page(1).per(50)
kaminari也会为你做分页链接,只需使用帮助
<%= paginate @cliente %>
您可以在README中找到该用法。
为了更好的用户体验,您应该通过API(AJAX)进行通信,并使用无限滚动等技术。
答案 1 :(得分:1)
你可以卸载你的提取。这意味着,使用javascript和ajax稍微复杂一些的方法。在这个例子中我不会使用分页宝石。
修改您的控制器:
def index
if !params[:page].blank?
respond_to do |f|
f.html {}
f.json { # only for pagination, work around this to make it more complex
offset = 50*params[:page].to_i
@clients = Client.offset(offset).limit(50).select("field1, field2") # appended to any other condition you may have
render :json => @clients.as_json
}
end
else
@clients = Client.limit(50)
end
end
我不会发布更多内容,你可以搞清楚。在文档加载时,添加一个ajax fetch事件:
您可以使用计时器或循环执行此操作。但这是一种在加载第一组行(在此示例中为50)后页面将变为响应的方式,然后,当您工作时,将获取更多行。
答案 2 :(得分:0)
这是一个猜测,因为我不是一个红宝石程序员,但是,让我们看看这个:
<td>
<% if cliente.relclirutas != nil%>
<% cliente.relclirutas.each do |varias| %>
<%=varias.ruta.Ruta%>
<%end%>
<%end%>
</td>
如果这意味着,
if cliente.relclirutas is not null or an empty string
loop through it and display each value of varias.ruta.Ruta
然后你不需要if语句。只需遍历空值或空字符串。这可能会在每条记录上节省几纳秒,其中你有15,000多个。