2010-10-29 55 views
1

我有一个通过AJAX调用运行的PHP脚本,有时可能需要很长时间(最多30秒)。为了帮助保持访问者的注意力,我展示了一个进程栏,介绍进程的程度,以及列出有关Web应用程序的随机事件等等。开幕和闭幕会议是否会影响效果?

为了更新进度条以显示这个过程在一个%中究竟有多远,脚本向会话写入什么是“过程”的状态,“总量”是它需要做的量,“进度”是说完成了多少。在进行长时间的AJAX调用的同时,另一个单独的AJAX调用会显示一个列出这3个会话变量的页面,以便它可以将其转化为JavaScript中的精确进度条,并且每0.5秒左右重复一次。

的问题是,为了这第二个AJAX调用能够检索会话数据,会话必须关闭。所以在长度脚本中,它打开会话,写入数据,然后关闭它。

有没有造成这样做任何显著的性能损失?是否有更好的选择来显示漫长的AJAX呼叫有多远?

编辑:我应该更仔细地选择我的话。这个过程需要花费30多秒,而且有必要展示一个真正的进度条,而不是重复的gif。改变算法后,现在平均只需要1-5秒,但我猜测在极端情况下可能会达到10秒。它是异步的,页面上还有其他内容,他们必须选择启动该进程。他们可以去其他页面,甚至关闭窗口,稍后再回来查看完成。现在时间跨度明显较低,我想知道如果我试图展示一个“真正”的进度条,或者如果有另一种替代方法,我是否会伤害其快速性能。

回答

0
32分之

很长一段时间的人,等待在网络上任何东西,这听起来像这样在你的界面阻止(我的意思是,用户不能去其他工作,他们必须等待任务去完成)。你需要小心让这个数字变得太大,有可能超时请求

如果你在服务器上做某些事,因为某些原因不能快速完成,我会立即将用户返回给正常的用户界面流程,并有一些更新用户完成的异步手段(“状态”区域等)。例如,许多照片上传网站将以这种方式行事 - 在您的照片正在处理过程中,他们将放置占位符图像,然后在编码和调整大小完成后使用照片刷新用户的用户界面。

+0

它不会阻止用户做任何事情。这是网页应用程序的一部分,如果他们选择运行,而网页上仍有大量其他内容可用。它也被设置好,以便他们可以进入其他页面,如果他们想要的话,回来看看是否完成。它也不再需要30秒,除非有一些极端的情况(绝对不应该),因为我将它切换到更快的算法。尽管如此,我仍然希望让他们更新进度,即使现在只有4-5秒。 – Nick 2010-10-29 20:14:16

0

听起来很复杂,但我们没有理由认为有什么特别昂贵关于关闭会话。在这种情况下,服务器只是简单地指定你的连接的监听器是免费的。当然,如果没有必要,所谓过分的东西通常是一个坏主意。如果您认为这种长时间等待的奇怪行为可能是由于关闭会话而导致的,那么您应该看看在没有任何进度条反馈的情况下运行需要多长时间。时间可以肯定。如果大致相同,我不会过分担心会话关闭,但我会调查是否真的是服务器花费那么多时间。如果速度更快,请记住,这可能是一些因素,不一定会关闭会话。

0

也许你在前端预加载过多?人们不喜欢等待事情发生,特别是如果需要长达30秒。你可能想考虑用异步javacscript延迟加载一些东西。

我更了解这个更关注于会议时间。