交互和目标保存冻结应用程序

Interactions and objectives saving freezes application

在我的 Flash 应用程序中,我使用 pipwerks scorm 包装器来保存不同的 scorm 值。现在,当我开始保存交互和目标时,需要花费大量时间(5-6 秒)才能保存。这些数组并不大(每个 7 个元素),为什么保存它需要这么长时间?我有本地 LMS 服务器,所以这里网络不是问题。

我该如何改进它?

编辑:刚刚添加了一些日志,似乎没有 "heavy" 个元素 - 所有这些都需要相同的时间来保存。

不是你,是他们。

您很可能成为 SCORM 运行时实施不当的牺牲品 API。通常发生的情况是您通过与 LMS 运行时 API 通信的内容 "wrapper" 发送 get/set 值命令。 LMS 不是缓存学生尝试,而是长途往返服务器以 [​​=48=] 返回数据和设置数据。这可能相当于 1-12 秒的实际延迟,这会导致 mac 出现沙漏或沙滩球。这几乎就像是拒绝服务攻击。

目标和交互需要制作几组单独的数据,以便 "spam" 的消息触发此延迟。如果 LMS 使用缓存尝试,他们只会在 Commit 调用中往返服务器。十分之九的机会,这在他们的系统上长期以来一直是错误的。并且需要大量重写来修复它。我将放弃列出我在其中体验过的所有平台,因为其中许多平台收取订阅费,企业公司付费使用他们的服务。不幸的是,这只是一个糟糕的设计。 他们的系统正在对他们的服务器进行同步调用,也就是阻塞调用。 250 毫秒 DNS 延迟 x 12 次调用 = 糟糕的用户体验。

有人告诉我 "Don't make that many SCORM calls." 和 "Can you stop it from doing this"。由于这个原因,我实际上已经取消了 LMS ;)。很大一部分 SCO 在野外不使用目标和交互,因此许多这些更大的延迟问题都没有得到检查。

如果您成为这种延迟的受害者,我的书签将突出显示 https://cybercussion.com/bookmarklets/SCORM。在查看 SCO 时使用它,因为它会对 API 进行一系列状态调用并为您计算实际延迟。我见过每次通话长达 400 毫秒!

LMS 实施在设计 API 时最终有 3 个选择。

  • 已缓存:加载学生尝试并仅在提交调用时发送数据。
  • 缓存混合:您加载学生尝试并仅在提交时发送更改的数据。
  • 非缓存:您进行服务器往返设置和获取数据。在有限数量的 SCORM 调用中,您会遇到一些延迟。关于此实现,我唯一可以断言的优点是,如果断电或网络出现故障,您可能会保留一些少量数据。但是上述选项也可以更定期地调用 commit 来在一定程度上解决这个问题。

我会在 scorm.com 进行抽烟测试。开发一个可重复的流程,以获取对您遇到此问题的平台的支持。即使您的编辑声明它是本地的,我在上面突出显示的阻塞调用也会导致这种延迟。

GL

扩展 Mark 的回答,我同意 LMS 听起来像是通过同步 xm​​lhttprequest(也称为 XHR 或 AJAX)而不是异步进行处理。在此处了解有关同步与异步的更多信息:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests

使用同步 XHR 时,页面将不会处理任何 JavaScript,直到 XHR 请求完成。如果服务器速度慢,这可能需要几秒钟。如果你在彼此靠近的地方重复通话,它们加起来会相当可观。可以想象,在几页的跨度内处理少量活动可能需要一分钟。从用户的角度来看,课程感觉很糟糕。

同意 Mark 的观点,即在 SCORM Cloud 中进行测试是确保您的课程正常运行的好方法,并且速度慢的原因在于您的本地 LMS,而不是课程本身。

如果您想改善本地测试环境,并且正在使用本地 LMS,请在 LMS 的 JavaScript 代码库中查找 xmlhttprequest 或 AJAX,看看您是否可以设置为异步。