-
Notifications
You must be signed in to change notification settings - Fork 486
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problème au sein de l'API ajax New Scorm. #1685
Comments
Bonjour @ywarnier Merci |
Après révision du code, je comprends qu'il y ait préoccupation du côté de l'efficacité, mais je ne suis pas certain que le problème soit là (plutôt que du côté de l'optimisation de la base de données). En effet, s'il est vrai que get_status() fait une requête à la base de données, celle-ci se fait en utilisant les champs id, c_id et view_count. Le champ c_id est indexé, réduisant considérablement l'effort de requête. view_count ne l'est pas mais est généralement très limité (il ne change que si on active le multi-view au niveau du parcours). Enfin, le champ "id" (l'id du lp_item_view), lui, devrait être indexé, mais ne l'est pas, en conséquence d'une transition que nous faisons entre ces versions (1.9->2.0) entre une combinaison unique de c_id + id et un nouvel ID unique entre tous les cours, iid. En changeant vers iid (mais pas au niveau de cette requête apparemment), nous avons donc changé l'index de la table (de id vers iid), sans pour autant changer la requête, ce qui est une erreur de notre part. Je suggère donc de commencer par tester cette très simple modification dans get_status() et de m'indiquer si cela améliore suffisamment la situation:
vers
Techniquement, je pense qu'on pourrait se passer également de la partie view_count, mais ça reste à tester:
|
Le problème d'appeler get_status(false), ce que nous faisions auparavant, c'est que les mises à jour en SCORM sont générées par des appels AJAX asynchrones. Ils peuvent donc se produire à n'importe quel moment, et donc jusqu'au dernier moment avant de consulter get_status(). Si on utilise get_status(false), on court le risque que le statut ait été modifié entretemps, et que le résultat à afficher pour le progrès actuel soit incorrect. C'est la seule influence que ça a, mais certains de nos clients nous avaient fait noter qu'elle était importante. |
S'il n'est pas possible de faire les tests correspondants d'ici 3-4 jours, je passerai la tâche dans la liste prévue pour 2.0. En attendant, on sait qu'il y a différents moyens d'optimiser |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
[Bug #8515 sur la plate-forme support.chamilo.org]
Je pense que nous avons détecté un problème au sein de l'API ajax New Scorm.
Les performances se dégradent drastiquement lors de l'appel :
chamilo/main/newscorm/lp_ajax_save_item.php
nous avons des temps de réponse pouvant aller jusqu'à plus de 60s
En analysant il s'avère que c'est $myLP->get_complete_items_count() qui provoque le ralentissement.
(learnpath::get_complete_items_count, learnpathItem::get_status)
N'y a t-il pas un problème de conception sur cette boucle effectuant une requête en base sur tous les items du parcours ?
La table c_lp_item_view pouvant être très conséquente > 500 000 ligne ne faut il pas revoir ce fonctionnement ?
Pouvez vous nous confirmer qu'il y a bien un défaut sur ce point ?
Nous avons pour la méthode status_is désactivé les requêtes via le flag de la methode get_status
$currentStatus = $this->get_status(true); => $currentStatus = $this->get_status(false);
ce qui nous a permis de revenir à des temps de réponse corrects.
Quel impact cela peut-il avoir sur le calcul des statistiques ?
Quel(s) autre(s) réglage(s) ou action pouvons nous mener pour retrouver un niveau de temps de réponse acceptable ?
tests effectués sur la version 1.11.2
The text was updated successfully, but these errors were encountered: