如何在sinatra中使用AJAX加载页面更快

时间:2015-10-14 16:07:10

标签: jquery ajax sinatra

我正在开发一个项目(URL:example),我有一个表格,可以在表格的许多行(20)中加载许多选项(超过6000个)。

表格是这样的:

User    role    permission     machine

在机器栏中有一个这样的表格:

<form action="/example" method="get">
 <select>
   <% session[:var].map(&:to_i).sort.each do |var| %>
     <option><%= var.to_s.force_encoding('UTF-8') %></option>
   <%end%>
 </select>
</form>

问题是当访问URL时,由于var变量加载了所有机器,因此需要加载机器列中的所有数据。 (这个电话的大小是3.2 Mb)。

当用户选择一个选项时,页面会再次加载。但是在这一点上,当用户选择一个选项时,我可以使用AJAX来避免这种刷新。

我的问题是:

是否也可以使用AJAX在输入网址(示例)时加快页面速度,或者有任何表格可以加快此加载过程。

1 个答案:

答案 0 :(得分:0)

我预先填充第一个可见页面的结果(例如,25个结果),然后 对结果进行分页,从而允许刷新但减少每个响应的数据,< em>或使用AJAX在滚动/推送更新按钮时更新结果。大多数数据库ORM库都有一个可以使用的分页插件。

这里没有需要 AJAX。请记住,AJAX只是调用网站API,没有什么特别之处,它仍然只是一堆要求响应的HTTP调用。通过将一些处理推送到客户端,AJAX让您有机会错开其中一些,这是主要的事情。

考虑将您的路线/应用分为提供页面和仅提供数据的路线/应用。您甚至可以通过using the request.xhr? object method组合提供呈现和数据的路由,例如

if request.xhr?
  json {my: data, goes: here}
else
  erb :index, :locals => {my: data, goes: here}
end

{{1}}
  

当用户选择一个选项时,页面再次加载

你绝对可以在这里使用AJAX来避免页面刷新 - 他们已经拥有了数据,为什么要刷新?