簡體   English   中英

SCORM:這是否是將數據提交到LMS的適當行為

[英]SCORM: is this a proper behaviour for commiting data to the LMS

我有流動的問題。 我正在制作一個服裝課程,該課程基於SCORM 2004第三版,並已部署在SABA LMS上。 我在做什么是:

  1. 我使用“ API.SetValue”設置一些數據
  2. 我使用“ API.Commit”將數據保存到LMS

    (我正在使用包裝器庫,仍在使用核心功能)

現在,我針對不同的數據字段執行了幾次此操作,我們將其稱為“ X”,“ Y”和“ Z”。

我期望的是對服務器的第一個請求,就是看到僅發送“ X”,而這正是我所看到的。 然后在第二秒,我希望只看到“ Y”,但這是我不明白的地方,我看到API發送了“ X”和“ Y”。 當然3號會發送“ X”,“ Y”和“ Z”

您可以了解我的擔心。 我的意思是,每次我想要如此保存0.1k數據時,我都必須提出40-50K的請求。

如果這是SCORM的問題,我正在使用的特定LMS(SABA)還是我做錯了什么,誰能向我解釋?

這不是SCORM的事情。 SCORM只是告訴您API(GetValue,SetValue,Commit等)以及每個調用的一般行為。 但這並不能決定LMS實際如何執行這些操作。 看來LMS正在保存數據客戶端。 因此,當您設置X時,它將保存在本地。 當您調用Commit時,LMS將獲取所有數據客戶端並將其發送回服務器。 稍后,當您設置Y和Z時,它會做同樣的事情-獲取所有數據並將其發送回LMS。

沒有讓LMS改變其行為,我認為您真的無能為力。 我的經驗法則是僅在確實需要時才提交。 您可以只為X,Y和Z調用SetValue,然后僅在轉到另一個SCO或達到必須將這些數據保存到LMS的地步時才提交。

首先,我想說的是您沒有做錯任何事情,這完全是API的錯誤-這是我今天遇到的第二種API(巧合),它是在做錯誤的做法:

有好的做法和想法,有的不好的想法-不幸的是,不好的想法和代碼要快得多,因此人們在組合客戶端API時往往不會考慮這些事情。

  • 最簡單和最糟糕的(字面上)的處理方式是簡單地在單個對象中設置所有數據,並在調用Commit時發送整個對象。
  • 對此的一種改進是緩存自上次提交以來已更改的 -好處是不會發送所有內容,缺點是不更改的值會再次發送。
  • 最好的辦法是緩存在調用commit時發送的 ,然后在下一次比較它們-這樣,僅發送已更改的值。
  • 最后是合並上面的兩種方法-緩存鍵,這樣您就只檢查那些值,而不是每個值。

其他注意事項:

  • 壓縮數據是值得的-zip很容易用Javascript完成,並且會大大減少網絡帶寬。
  • 還必須發送一個散列或幻數來驗證數據-讓服務器知道應該設置該值。
  • 使用哈希或魔術數字進行回復很重要,因此客戶端知道緩存需要更新(發送上的更新是安全的,但不如等待回復並知道服務器與客戶端匹配那樣安全)。

API中的數據可以幾種方式存儲,但是我可以選擇一個標准的Javascript對象,每個鍵是cmi鍵,值是一個帶有各種標志和緩存的對象(或數組)值以及當前值(用於后續的GetValue / Commit調用)。

最后,請記住,Commit本身是可選的-在調用SetValue一段時間后,API本身應有效地對其進行調用。


因此,重復我的第一句話-不是您的錯,完全是所提供的API的錯。 對其進行更改應該很容易-在服務器端,僅需要支持合並而不是替換發送的數據即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM