Captivate - LMS - SCORM проблемы со связью - PullRequest
5 голосов
/ 29 января 2010

Я разрабатываю LMS, совместимую с SCORM, и у меня возникли проблемы с Captivate сгенерированным содержимым.

По сути, поведение таково: если вы видите SCO (увлекать сгенерированный контент) с, например, 15 слайдами и 1 вопросом на каждом слайде быстро, моя lms не отслеживает все 15 вопросов, только первые 3 или 4. Если Вы долго ждете в конце, или если вы делаете медленный контент, он работает нормально.

После долгих поисков в Google, отладки и трассировки, наконец, я обнаружил две основные проблемы:

1) Captivate - связь по SCORM API является асинхронной (аналогична связи через flash - javascript). Таким образом, когда пользователь видит контент быстро, вызовы функций становятся все более и более разрозненными, и в конце, возможно, пользователь отвечает на вопрос 15, а контент отправляет информацию вопроса 4. Я не могу изменить интерфейс Flash или JS-Flash, потому что это предусмотрено Captivate.

Есть способ сделать эту синхронизацию ?? Я имею в виду, чтобы заставить вспышку подождать?

2) Функции работают дольше при каждом вызове, например, setValue занимает 7 миллисекунд в первый раз и 200 в последний раз.

Чтобы понять эту проблему, вот небольшая предыстория: Захватывающее содержимое (все содержимое действительно, но более привлекательное) многократно вызывает определенную функцию, функцию SetValue, одну из функций API-интерфейса SCORM. Эта функция принимает два параметра (fieldName, value): первый - это имя поля, которое нужно установить, а второй - новое значение. В моей реализации эта функция сначала проверяет значение с помощью регулярного выражения, а затем устанавливает значение в объекте.

Хорошо, я могу добавить гораздо больше информации, но я не знаю, что действительно важно, я не надеюсь, что вы исправите мой код, не увидев его, но у меня нет идей, и мне нужны новые мнения, идеи, указания .... может быть, кто-то задаст правильный вопрос ... help:)

Спасибо

Ответы [ 4 ]

7 голосов
/ 18 августа 2010

При публикации для SCORM Captivate не использует методы синхронной связи. * В зависимости от браузера Captivate использует либо FSCommand, либо метод getURL старой школы для взаимодействия с файлом HTML; HTML-файл затем использует JavaScript для передачи данных в СУО через API SCORM.

Ответ (если есть) передается из JavaScript либо в FSCommand, либо в SWF-прокси (для getURL), который затем отслеживается внутри Captivate с помощью функции обратного вызова. Эта функция обратного вызова использует таймеры, и, возможно, именно в этом ваша проблема.

Если вы устанавливаете g_intAPIType в 0, вы заставляете браузер использовать FSCommand, который поддерживается не во всех браузерах и операционных системах. Установка g_intAPIType в 1 означает, что вы заставляете браузер использовать getURL, который является кросс-браузерным, но имеет несколько недостатков (включая большое количество щелчков).

В обоих случаях данные отправляются через сценарий внутренней очереди, который использует функцию обратного вызова waitForResponse.

Проблемы с производительностью, с которыми вы сталкиваетесь, скорее всего, связаны с очередями, а асинхронная связь усугубляет проблему из-за таймеров, подключенных к waitForResponse. Изменение g_intAPIType, вероятно, окажет лишь незначительное влияние на ваши проблемы с производительностью, хотя использование getURL (g_intAPIType=1) может помочь улучшить согласованность от браузера к браузеру.

Независимо от настроек g_intAPIType, вы не можете запретить внутреннему механизму отслеживания использовать асинхронную функцию waitForResponse, поэтому нет способа остановить Captivate от использования таймеров при получении / настройке данных; со временем вы, вероятно, начнете замечать все более и более длительные задержки, подобные тем, которые вы описали, особенно. если вы делаете много звонков в LMS.

(* Небольшое исключение: мне сообщили, что Captivate 4 и 5 используют ExternalInterface, если проект построен в AS3 и опубликован для SCORM 2004, но, похоже, очередь и таймеры waitForResponse все еще используются, в основном обрабатывая ExternalInterface как асинхронные методы, перечисленные выше.)

0 голосов
/ 18 июня 2014

В captivate, при публикации scorm вы увидите опцию «Отправить данные отслеживания в конце» Используйте эту опцию, это решит вашу проблему.

0 голосов
/ 13 июля 2010

«Есть ли способ сделать эту синхронизацию? Я имею в виду, заставить вспышку ждать как-нибудь?»

Очевидно, проблема в следующем: «Captivate - это единственный SCO, который вызывает функции SCORM JavaScript в асинхронном режиме. Firefox - единственный браузер, который не обеспечивает синхронную связь между SCO и поддерживающим JavaScript. функции, Captivate не ожидает успешного или неудачного ответа перед отправкой следующего обновления статуса. Поскольку Captivate довольно многословен в своих сообщениях, а JavaScript не является многопоточным, представления статуса теста могут складываться и переписывать друг друга. данные - особенно для более длинных викторин. [...]

Если вы хотите увидеть асинхронную проблему с любой другой LMS, пройдите длинную викторину Captivate с помощью Firefox и быстро ответьте на вопросы очень . Некоторые вопросы ближе к концу будут опущены .. "(interzoic.com forum)

А может быть решение : «Медленная проблема решается, когда я устанавливаю g_intAPIType в 0 (в файл .htm), поэтому он заставляет Captivate общаться, как если бы он был в IE. "

0 голосов
/ 03 марта 2010

Некоторые опции:

Вы можете изменить то, как вы делаете вопросы. Вместо 1 в каждом кадре поставьте все вопросы в 1.

В противном случае вам нужно будет поработать над волшебством JavaScript в вашем SCORM Player JavaScript. Я бы начал с минимизации кода JS с помощью такого инструмента, как JSMin .

Затем попробуйте кэшировать файлы JS, чтобы они загружались только один раз. Я подозреваю, что файлы вызываются снова и снова с каждым кадром.

...