我正在使用延迟作业从数据库更新记录。我想在网页上显示延迟作业更新的记录计数。我可以做ajax轮询,可以显示到目前为止更新的记录计数,但我认为ajax轮询不是一种好方法,因为它会增加服务器的开销。
是否有ajax轮询的替代方案
您也可以尝试使用rails中的ActionController::Live
模块。
:
class MyStreamController < ApplicationController
include ActionController::Live
def index
# calculate number of records...
response.headers['Content-Type'] = 'text/event-stream'
response.stream.write "Number of records updated: #{i}"
response.stream.close
end
end
然后在你的Js文件(可能是application.js
),写一个代码指向这个url: /my_stream
来获得更新的值。除此之外,你还可以将它与之前的值进行比较,如果它发生了变化,则替换它,否则忽略它。所有这些都可以用javascript完成,我把它留给你自己去弄清楚。
如何在js文件中获取更新值的示例:
$(function(){
var source = new EventSource('/my_stream');
source.onmessage = function(e){
console.log(e); // this is value you want to update on page
};
});
注意:您需要使用线程服务器,如puma
等来实现它