更新进度条时的最佳做法是什么
What is the best practice when updating a progress bar?
我目前正在ASP.NET MVC 4中进行一个项目,并附带了一个需要进度条的模块。我现在的问题是"实现异步进度条的最佳方式是什么?"。
经过一番查找,我发现了以下方法:
- 在C#代码中创建一个startEvent()和getProgress()
- 使用javascript setTimeout()异步调用getProgress()方法
(例如:https://www.devexpress.com/Support/Center/Example/Details/E4244)
我对这个方法的评论是,这会导致代码依赖于您选择的超时。因此,要找到最佳和最具性能的超时需要一些技巧。
现在,在我研究此事之前,我最有可能使用的方法是:
- 在代码隐藏中,创建一个方法handleItem(int index),该方法获取一个索引,并对该索引处的项执行您想要执行的所有操作
- 确定要处理的项目数,并将其传递给javascript
- 在javascript中,启动一个从0循环到amount-1的for循环,对于每个索引,它启动一个对handleItem(i)的ajax调用
- 在ajax调用的完整语句中,您可以使用新的金额更新进度条
我的问题如下:
- 这是否暴露了太多的程序逻辑
- 当每次调用都往返于服务器时,这是否会产生太多开销
- 我不应该使用这种方法还有其他原因吗
提前感谢
Koen Morren
这不是推荐的策略,因为客户端驱动进程。如果连接中断,或者用户关闭浏览器,该过程将停止。
通常,如果您使用直接HTTP,则需要从javascript轮询(也称为pull)。伪代码大致如下:
Call Creates Task ID and sends it to client
Client queries the status of task with given ID
另一种可能性是WebSockets,它允许客户端侦听服务器推送的更改。
有许多选项可以存储给定状态的进度。您可以通过HttpContext
、任务id或某些用户id对进度进行索引,甚至可以将其存储在数据库中,并使用SqlDependency
获取状态更改的通知。
总之,轮询比推送机制具有更多的滞后性。客户端不应该驱动异步进程,但应该通知它们或为它们提供一些关于异步进程状态的机制。
与ASP.NET不同,MVC中几乎没有将数据从服务器推送到客户端的方法,WebSockets或类似SingnalR的api可以为您工作。
ajax方法很好,它为您提供了可靠的机制来更新数据,无论用户转到其他页面还是关闭浏览器,每次启动ajax都会更新UI。因此,javascript中有一个合理的间隔并没有错。
-
这是否暴露了太多的程序逻辑?
代码将只写在类文件中以计算当前%年龄。
2.当每次调用都往返于服务器时,这是否会产生太多开销?
不,ajax是轻量级调用
3.我不应该使用这种方法还有其他原因吗?
这种方法将允许用户自由导航到其他资源,因为ajax将独立工作。
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 在node.js中编写单元测试的最佳方式是什么
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 列出没有 mysql 的元素的最佳方法是什么
- 在AngularJS中使用多个主题的最佳方式是什么
- 存储数据的最佳方式是什么,以便与jquery一起使用
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用JavaScript随机给网页上的每个字母上色的最佳方式是什么
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 将JavaScript检测与MVC4显示模式集成的最佳方式是什么
- addEvent()传奇事件之后的当前最佳实践是什么