我正在使用Sinatra开发Web应用程序,但我遇到了长页面加载时间问题。
应用程序通过并显示大量数据,所以我确定这是原因,但我想知道是否有办法让页面的主要erb布局首先加载然后在加载之后,数据加载在它之上。
我的第一个想法是AJAX,但我不确定如何实现它。
提前致谢。
答案 0 :(得分:2)
你是对的,这可能有所帮助。旧的口头禅“将那些不同的东西改变”,适用于编程的任何部分。
这是返回一些数据的路线:
require 'json'
get "/time-now/?" do
content_type :json
{time: Time.now.to_s}.to_json
end
这里有一些javascript(jQuery ajax)来称呼它:
$.ajax({
accepts: "application/json",
type: "GET",
url: "/time-now",
dataType: "json",
success: function(res, status, xhr) {
return [$("#time").html(res)];
},
error: function(res, status, xhr) {
return [$("#time").addClass("error")];
},
complete: function(res, status, xhr) {
return [$("#button1").show()];
}
});
(jQuery的那一点可能有点不对,只是警告你,这是一个复制'粘贴工作被黑客攻击以适应这个例子)
也许你可以停止从Sinatra路由提供用户页面并使用静态(即预构建)页面,其中有javascript,这些页面可以对Sinatra路由进行AJAX调用。或两种类型的混合物。然后你就开始了一个Web服务数据API。有许多javascript框架可以帮助解决这个问题(例如Ember,Backbone,Angular等等)以及与Sinatra一起使用的大量API构建器,如Grape和Weasel Diesel。