ANS-0521 · DéVELOPPEMENT SUITESCRIPT
Comment gérer et optimiser les limites d’exécution des scripts NetSuite ?
Comprenez les trois facteurs principaux — le temps, la gouvernance et le nombre d’exécutions — susceptibles de limiter les performances des scripts, et découvrez les stratégies permettant d’éviter leur interruption.
Solution courte
Les scripts NetSuite sont soumis à des limites de durée, de gouvernance et de nombre d’exécutions. Pour éviter l’interruption des scripts, les développeurs doivent mettre en œuvre une logique de replanification pour les scripts planifiés à l’aide des modules N/task et N/runtime, optimiser le code afin de réduire le temps d’exécution et le nombre d’appels d’API, et simplifier les fonctions complexes pour ne pas dépasser la taille de la pile d’appels JavaScript. Il est également essentiel de surveiller l’utilisation de la mémoire.
Scénario
Les scripts NetSuite, y compris les scripts planifiés, les scripts client et les scripts d’événements utilisateur, peuvent être interrompus de manière inattendue en raison de diverses limitations du système. Les développeurs sont souvent confrontés à des difficultés lorsque les scripts dépassent le temps de traitement alloué, consomment trop d’unités de gouvernance ou épuisent le nombre d’exécutions autorisé par la machine virtuelle JavaScript. Il est essentiel de bien comprendre ces limitations pour concevoir des automatisations NetSuite robustes et efficaces.
Solution
Les scripts NetSuite sont soumis à trois limites d’exécution principales : la durée, la gouvernance et le nombre d’exécutions. Il est essentiel de prendre en compte ces éléments de manière proactive pour garantir un fonctionnement stable des scripts. NetSuite impose une limite de temps à l’exécution des scripts. Les scripts planifiés s’exécutent généralement pendant environ une heure avant d’être interrompus. L’appel à l’API nlapiRequestURL est également soumis à un délai d’expiration : « Notez qu’un délai d’expiration survient si la connexion initiale prend plus de 5 secondes et/ou si la réponse à la requête prend plus de 45 secondes. » De plus, la plupart des navigateurs ont mis en place un délai d’expiration pour les requêtes HTTP, la norme étant de 5 minutes. Ainsi, si le chargement d’un script prend trop de temps, cela pourrait déclencher le délai d’expiration de la requête du navigateur.Pour les scripts planifiés, les développeurs doivent mettre en œuvre une logique de replanification à l’aide des modules N/task et N/runtime
afin de gérer efficacement le temps d’exécution. Pour tout autre type de script, il est recommandé de revoir la conception du script afin de réduire son temps d’exécution ou de déléguer la logique à un script planifié. Éviter les boucles longues et les appels à des services externes peut améliorer considérablement les performances. La gouvernance des API de NetSuite empêche les scripts d’effectuer un nombre excessif d’appels API lourds qui ralentiraient le système et l’utilisateur. Le dépassement de la limite de mesure d’un type de script interrompra l’exécution de ce dernier. Pour plus d’informations à ce sujet, veuillez consulter le Centre d’aide NetSuite. Pour les scripts planifiés, les développeurs doivent mettre en œuvre une logique de replanification à l’aide des modules N/task et N/runtime afin de gérer la consommation des unités de gouvernance et de permettre au script d’interrompre son exécution, puis de redémarrer là où il s’était arrêté après réinitialisation de son compteur. Pour tout autre type de script, il est recommandé de revoir la conception du script afin de réduire le nombre d’appels d’API ou de déléguer la logique à un script planifié. Il s’agit davantage d’une limitation de JavaScript que d’une limitation proprement dite de NetSuite. En effet, chaque script est exécuté dans une machine virtuelle au niveau du navigateur ou du serveur, au lieu d’être compilé comme c’est le cas pour d’autres langages. Cela signifie qu’il existe une limite à la quantité de données que la machine virtuelle peut contenir et traiter. Chaque appel de fonction, déclaration de variable, instruction « if » et boucle peut être comptabilisé dans le « nombre d’exécutions » du script. Si le nombre d’exécutions d’un script est dépassé, celui-ci se bloque. Une erreur « Taille maximale de la pile d’appels dépassée » peut illustrer un dépassement du nombre d’exécutions. Le meilleur moyen de dépasser ce seuil consiste à effectuer un appel de fonction récursif. Appeler des fonctions au sein d’une fonction, a fortiori en présence de boucles, sollicite fortement le système et finit par provoquer son plantage.Il n’existe pas de solution miracle à ce problème ; les développeurs doivent revoir leur conception et essayer de trouver un moyen de réduire le nombre d’appels effectués par leur script. Par exemple, ils peuvent supprimer les variables qui ne sont pas nécessaires :
var x = i + j;var text = "The number is " + x;Vous pouvez facilement intégrer « i+j » dans votre chaîne de caractères au lieu de définir une nouvelle variable uniquement à cette fin. Si la complexité du script reste un problème, il est recommandé de consulter un responsable technique ou un développeur senior. NetSuite surveille également l’utilisation de la mémoire par les scripts planifiés et impose une limite de 50 mégaoctets par script. Le dépassement de cette limite entraînerait une erreur SS_EXCESSIVE_MEMORY_FOOTPRINT. Pour plus d’informations, consultez le Centre d’aide NetSuite.
Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
