Documentation
Parcourir la documentation

DocumentationRéférence

Limites

Tout est borné dans un widget PlayerVox OverCrow : la taille de ses fichiers, le nombre d’éléments de sa vue, la durée d’un tour de sa logique, les octets d’une réponse. Ces limites gardent un widget petit et empêchent qu’un widget ralentisse le jeu ou les autres widgets. Cette page liste celles que rencontre l’auteur d’un widget.

TEXT
error[view.too_many_children]: the view exceeds a size bound of the schema
  --> view.ocml:15:14375
   = help: split long static content, or render repeated content with <for>
check: 1 error(s), 0 warning(s)

Un élément de plus de 1024 enfants : check nomme la limite, l’endroit et une façon d’en sortir.

Ce qui se passe à une limite

  • Dans les fichiers du projet, une limite est une erreur d’overcrow-widget check, avec un code qui la nomme (view.too_many_elements, style.too_many_rules, project.file_size…). Rien n’est tronqué.
  • Dans un appel de service, un paramètre hors limites échoue avec invalid_request, un quota plein avec quota_exceeded, et trop de requêtes simultanées avec busy. Voir erreurs.
  • Pendant que la logique s’exécute, dépasser un budget de la VM (la durée d’un tour, le tas, les messages d’un tour) arrête le widget ; PlayerVox OverCrow le redémarre quelques fois. Voir ce qui se passe en cas d’échec.
  • Dans ce que le widget affiche, PlayerVox OverCrow refuse une valeur hors limites (un texte trop long pour un attribut, trop de nœuds), ce qui arrête aussi le widget : bornez ce que vous affichez, par exemple le nombre de lignes d’une liste.

Les longueurs sont en pixels logiques, à une échelle du contenu de 100 %. Les limites de texte comptent des octets UTF-8, sauf quand l’unité indique des caractères. Un Kio vaut 1024 octets et un Mio 1024² octets. Les limites que la logique peut lire sont aussi des constantes du SDK : voir constantes de limites.

Limites par thème

Fichiers du projet et paquet

LimiteValeurSignification
MAX_VIEW_SOURCE_BYTES256 KioTaille du fichier source view.ocml.
MAX_STYLE_SOURCE_BYTES128 KioTaille du fichier source style.ocss.
MAX_LOGIC_BYTES512 KioLe script logic.js, code compilé de la vue compris.
MAX_LOCALE_ENTRIES2048Messages d’un fichier locales/<locale>.json.
MAX_LOCALE_KEY_BYTES128 octetsLongueur d’une clé de message.
MAX_LOCALE_VALUE_BYTES4 KioLongueur du texte d’un message.
MAX_LOCALE_FILE_BYTES256 KioUn fichier locales/<locale>.json.
MAX_MANIFEST_BYTES64 KioTaille de manifest.json.
MAX_LICENSE_BYTES64 KioTexte de LICENSE.
MAX_COMPILED_VIEW_BYTES512 Kioview.json, la vue compilée.
MAX_PACKAGE_BYTES16 MioTaille d’une archive .ocpkg.
MAX_PACKAGE_FILES256Entrées d’une archive, manifest.json et ledger.json compris.
MAX_PACKAGE_PATH_BYTES128 octetsChemin d’une entrée de l’archive.
MAX_ASSET_PATH_SEGMENTS4Segments de chemin sous assets/, nom du fichier compris.

Manifeste et menu d’options

LimiteValeurSignification
MIN_WIDGET_ID_BYTES3 octetsID de widget le plus court.
MAX_WIDGET_ID_BYTES128 octetsID de widget le plus long ; chaque segment séparé par un point fait au plus 63 octets.
MAX_VERSION_BYTES64 octetsTexte de la version du paquet.
MAX_WIDGET_NAME_CHARS48 caractèresUn nom du widget, en anglais ou en français, dans le manifeste.
MAX_WIDGET_EDGE_PX4096 pxLargeur ou hauteur du cadre d’un widget.
MIN_CONTENT_SCALE500 ‰Plus petite échelle du contenu (50 %).
MAX_CONTENT_SCALE1750 ‰Plus grande échelle du contenu (175 %).
MAX_GAME_EVENTS32Événements de jeu sémantiques déclarés par un paquet.
MAX_MENU_ROWS16Lignes du widget dans wrapper.menu, lignes de groupe et leurs enfants compris.
MAX_MENU_DEPTH1Niveaux de sous-menu : un group ne peut pas contenir un autre group.
MAX_MENU_LABEL_CHARS80 caractèresUn libellé de ligne ou de choix, en anglais ou en français.
MAX_MENU_ID_BYTES48 octetsID d’une ligne et valeur d’un choix.
MIN_MENU_CHOICES2Choix d’une ligne choice, borne inférieure.
MAX_MENU_CHOICES16Choix d’une ligne choice, borne supérieure.
MAX_MENU_NUMBER1000000 en valeur absolueValeur absolue d’une borne, d’un pas ou d’une valeur par défaut de curseur.
MAX_SLIDER_STEPS10000(max - min) / step d’une ligne de curseur.

Règles réseau

LimiteValeurSignification
MAX_NETWORK_RULES32Règles réseau déclarées par un paquet.
MAX_NETWORK_PATH_BYTES1 KioModèle path d’une règle réseau.
MAX_PATH_PARAMS8pathParams d’une règle réseau.
MAX_QUERY_PARAMS16queryParams d’une règle réseau.
MAX_ENUM_VALUES32Valeurs d’une contrainte de paramètre enum.
MAX_ENUM_VALUE_BYTES128 octetsUne valeur d’un paramètre enum.
MAX_PARAMETER_NAME_BYTES32 octetsNom d’un paramètre de chemin ou de requête.
MAX_SLUG_PARAMETER_BYTES128 octetsPlus grand maxLength d’une contrainte de paramètre slug.
MAX_STRING_PARAMETER_BYTES256 octetsPlus grand maxLength d’une contrainte de paramètre de requête string.
MAX_DNS_LABEL_BYTES63 octetsUn label, entre deux points, du nom d’hôte d’une origine réseau ou d’un ID de widget.
MAX_DNS_NAME_BYTES253 octetsNom d’hôte d’une origine réseau.
MAX_REQUEST_URL_BYTES2 KioTexte de l’URL d’une requête.
MAX_HTTP_REQUEST_BYTES256 KioCorps d’une requête sortante.
MAX_HTTP_RESPONSE_BYTES1 MioCorps d’une réponse remise au widget quand sa règle réseau ne déclare pas de maxResponseBytes, et de toute réponse as: "image".
MAX_HTTP_DECLARED_RESPONSE_BYTES3 MioPlus grand maxResponseBytes d’une règle réseau : le corps d’une réponse que la règle autorise, remis au widget.
MAX_HTTP_RESPONSE_BYTES_PER_WIDGET4 MioOctets de réponse que les requêtes en cours d’un widget peuvent réserver, chacune à hauteur de la limite de sa règle ; busy au-delà. Vaut MAX_HTTP_CONCURRENT_PER_WIDGET × MAX_HTTP_RESPONSE_BYTES : les règles sans maxResponseBytes ne l’atteignent jamais.
MAX_HTTP_RESPONSE_BYTES_GLOBAL64 MioOctets de réponse que les requêtes en cours de tous les widgets peuvent réserver ; busy au-delà. Vaut MAX_HTTP_CONCURRENT_GLOBAL × MAX_HTTP_RESPONSE_BYTES.
MAX_HTTP_CONCURRENT_PER_WIDGET4Requêtes en cours d’un widget.
MAX_HTTP_CONCURRENT_GLOBAL64Requêtes en cours de tous les widgets.
HTTP_TIMEOUT_MS30000 msDurée totale d’une requête.

Fiche

LimiteValeurSignification
MAX_LISTING_LOCALIZATIONS16Textes localisés de la fiche d’une version.
MAX_LISTING_NAME_BYTES128 octetsNom d’une localisation, affiché par la marketplace.
MAX_LISTING_DESCRIPTION_BYTES512 octetsDescription d’une localisation, affichée par la marketplace.
MAX_AUTHOR_BYTES128 octetsAuteur affiché dans une fiche.
MAX_SPDX_LICENSE_BYTES64 octetsExpression de licence SPDX d’une fiche.
MAX_CATALOG_URL_BYTES2 KioURL des sources d’une fiche.
MAX_PREVIEW_BYTES256 KioImage PNG d’aperçu d’une fiche.

Vue

LimiteValeurSignification
MAX_VIEW_ELEMENTS4096Éléments écrits dans view.ocml, composants compris.
MAX_COMPONENTS64Composants locaux déclarés dans une vue.
MAX_COMPONENT_PROPS32Propriétés déclarées d’un composant local.
MAX_VIEW_EXPRESSIONS4096Expressions compilées d’une vue, gestionnaires compris.
MAX_EXPRESSION_BYTES1 KioLongueur du source d’une expression {expr}.
MAX_EXPRESSION_DEPTH32Imbrication des opérateurs, des appels, des accès aux membres et des littéraux dans une expression.
MAX_CALL_ARGUMENTS8Arguments d’un appel, et entrées d’un littéral d’objet ou de tableau, dans une expression.
MAX_SCENE_NODES4096Éléments présents dans la vue d’un widget en cours d’exécution, éléments des listes compris.
MAX_TREE_DEPTH32Profondeur de l’arbre de la vue sous sa racine ; c’est aussi la limite d’imbrication de if, for et des composants.
MAX_CHILDREN1024Enfants d’un élément.
MAX_NODE_TEXT_BYTES16 KioContenu textuel d’un élément text, span, badge ou option.
MAX_ATTRIBUTE_TEXT_BYTES1 KioTout attribut de texte qui n’a pas de limite plus stricte.
MAX_LABEL_BYTES256 octetsAttributs label, tooltip et placeholder.
MAX_IDENTIFIER_BYTES64 octetsNoms de classes, de composants, de champs, de blocs @keyframes et autres identifiants du même genre.
MAX_INITIALS_BYTES16 octetsTexte de remplacement initials d’un avatar.
MAX_CLASSES_PER_NODE16Classes d’un élément.
MAX_FIELD_TEXT_BYTES16 KioContenu d’un field ou d’un textarea, et d’un événement input ou change.
MAX_CHART_POINTS1024Valeurs d’une série de graphique.
MAX_CHART_SERIES4Enfants series d’un chart.
MAX_KEY_BYTES32 octetskey d’un événement keydown : un caractère affichable ou une touche nommée.

Style

LimiteValeurSignification
MAX_STYLE_RULES1024Règles d’une feuille de style, blocs @keyframes exclus.
MAX_SELECTORS_PER_RULE8Sélecteurs d’une règle, séparés par des virgules.
MAX_COMPOUNDS_PER_SELECTOR4Sélecteurs composés reliés par des combinateurs dans un sélecteur.
MAX_SIMPLE_SELECTORS_PER_COMPOUND6Sélecteurs de type, de classe et d’état dans un sélecteur composé.
MAX_DECLARATIONS_PER_RULE64Déclarations d’une règle ou d’une étape de @keyframes.
MAX_KEYFRAMES32Blocs @keyframes d’une feuille de style.
MAX_KEYFRAME_STOPS16Étapes d’un bloc @keyframes.
MAX_SHADOWS2Couches d’une valeur box-shadow.
MAX_SHADOW_BLUR_PX64 pxRayon de flou et d’étalement d’une ombre.
MAX_GRADIENT_STOPS8Arrêts de couleur d’un linear-gradient().
MAX_GRID_TRACKS24Pistes d’un grid-template-rows ou d’un grid-template-columns.
MAX_GRID_FRACTION1000 en valeur absoluePlus grand facteur <fr> d’une piste de grille.
MAX_TRANSITIONS8Entrées d’une liste transition ou animation.
MAX_ANIMATION_MS300000 msDurée ou délai d’une transition ou d’une animation.
MAX_ACTIVE_ANIMATIONS64Transitions et animations en cours en même temps dans un widget ; les suivantes passent directement à leur état final.
ANIMATION_RATE_HZ60 HzCadence maximale de repeinture pendant une animation ; rien n’est repeint quand rien ne change.
MAX_LENGTH_PX16384 pxValeur absolue de toute longueur, de tout décalage et de toute coordonnée.
MIN_FONT_SIZE_PX6 pxPlus petit font-size, avant l’échelle du contenu.
MAX_FONT_SIZE_PX96 pxPlus grand font-size, avant l’échelle du contenu.
MAX_PERCENT1000 en valeur absolueValeur absolue de tout <percent> dans une valeur de style.
MAX_ANGLE_DEG3600 en valeur absolueValeur absolue de tout <angle>, en degrés (dix tours).
MAX_TRANSFORM_FUNCTIONS4Fonctions d’une valeur transform.
MAX_TRANSFORM_SCALE8 en valeur absoluePlus grand facteur de scale() ; le plus petit est 0.
MAX_EASING_STEPS60Pas d’une fonction de progression steps().
MAX_ANIMATION_ITERATIONS10000Nombre fini d’itérations d’une animation ; infinite reste admis.

Dessin et images

LimiteValeurSignification
MAX_CANVASES8Éléments canvas d’un widget.
MAX_DRAW_COMMANDS4096Commandes d’un appel à draw, qui remplace le contenu du canvas.
MAX_PATH_POINTS16384Sommets que l’hôte dessine pour un appel à draw, tous chemins confondus, comptés selon un plafond fixe par commande : moveTo et lineTo 1, quadTo 8, cubicTo 16, arc et circle 64, rect 36, les autres commandes 0.
MAX_DRAW_STATE_DEPTH16Commandes save imbriquées.
MAX_IMAGE_EDGE_PX2048 pxLargeur ou hauteur d’une image décodée.
MAX_IMAGE_ENCODED_BYTES2 MioTaille encodée d’une image PNG, JPEG ou WebP, avant décodage.

Logique

LimiteValeurSignification
VM_HEAP_BYTES16 MioPlafond du tas de la VM quand le manifeste n’en demande pas.
VM_MAX_HEAP_BYTES48 MioPlus grand plafond de tas qu’un manifeste peut demander.
VM_STACK_BYTES256 KioPlafond de la pile de la VM.
VM_PROCESS_MEMORY_BYTES64 MioPlafond de mémoire, strict, du processus d’un widget.
VM_CPU_PERCENT25 % d’un cœurPlafond de CPU du processus d’un widget.
VM_TURN_BUDGET_MS50 msDurée d’un tour de la logique avant que la VM ne l’interrompe.
VM_JOBS_PER_TURN1024Tâches de promesses traitées dans un tour ; une file plus longue est un dépassement de ressources.
VM_MESSAGES_PER_TURN64Messages que le widget peut émettre pendant un tour.
MAX_VM_MESSAGES_PER_SECOND120 par secondeDébit soutenu des messages du widget vers l’hôte.
MAX_VM_MESSAGE_BURST240Rafale de messages admise au-dessus de ce débit.
MAX_PATCH_BYTES256 KioTaille de ce que le widget envoie en une fois : un changement de la vue ou un appel à draw.
MAX_PATCH_OPS4096Opérations d’un changement de la vue (éléments créés, retirés, déplacés ou modifiés) après un tour.
MAX_TIMERS16Minuteurs actifs d’un widget.
MIN_TIMER_INTERVAL_MS100 msPlus courte période d’un minuteur ; l’animation relève du style, pas des minuteurs.
CLOCK_RESOLUTION_MS1 msRésolution de Date.now() dans la VM.
MAX_LOG_BYTES4 KioTexte d’un appel à log.

Services

LimiteValeurSignification
MAX_SERVICE_CALLS_IN_FLIGHT16Appels de service sans réponse d’un widget, abonnements exclus.
MAX_SUBSCRIPTIONS16Abonnements ouverts d’un widget.
STORAGE_QUOTA_BYTES256 KioClés et valeurs stockées par un widget.
MAX_STORAGE_KEYS512Clés stockées par un widget.
MAX_STORAGE_KEY_BYTES128 octetsLongueur d’une clé de stockage.
MAX_STORAGE_VALUE_BYTES64 KioTaille, en JSON sérialisé, d’une valeur stockée.
MAX_CLIPBOARD_BYTES16 KioTexte d’une écriture dans le presse-papiers.
MAX_OBJECT_ID_BYTES128 octetsID opaque d’un objet, ou curseur, échangé avec un service.

Notes, avis et chat

LimiteValeurSignification
MAX_NOTES8Notes du document de notes de l’utilisateur ; notes.create échoue au-delà.
MAX_NOTE_TITLE_BYTES96 octetsTitre d’une note, non vide une fois les espaces de début et de fin retirés.
MAX_NOTE_BODY_BYTES8 KioCorps d’une note.
MAX_NOTE_ITEMS64Entrées de la liste de tâches d’une note.
MAX_NOTE_ITEM_BYTES256 octetsUne entrée de liste de tâches.
MAX_REVIEW_CHARS2000 caractèresTexte d’un avis PlayerVox.
MAX_CHAT_MESSAGE_CHARS500 caractèresMessage de chat Twitch, la limite de Twitch ; ni vide ni fait seulement d’espaces, sans caractère de contrôle.
MAX_CHAT_FRAGMENTS16Portions de texte et emotes d’un message de chat remis au widget ; l’hôte fond le reste en texte.
MAX_CHAT_FAVORITES20Chaînes Twitch favorites conservées par l’hôte.
MAX_CHAT_CHANNEL_BYTES25 octetsIdentifiant d’une chaîne Twitch après normalisation : lettres ASCII, chiffres et _, en minuscules.

Images de référence

LimiteValeurSignification
PARITY_CHANNEL_TOLERANCE2 niveaux sur 255Plus grand écart par canal pour qu’un pixel compte comme identique à celui de l’image de référence.
PARITY_MAX_DIFFERENT_PIXELS100 ppmPart des pixels admise au-delà de la tolérance par canal. Une seule lettre fausse de 10 px dans un widget de 360 × 260 représente 385 ppm.