Balisage, style, script et mise à jour des mini-applis

Markup languages

Comme indiqué précédemment, plutôt qu'en HTML brut, les mini-applications sont écrites avec les dialectes du HTML. Si vous avez déjà utilisé l'interpolation du texte et des directives Vue.js, vous vous sentirez à la maison, mais des concepts similaires existaient bien avant dans les transformations XML. (XSLT). Vous trouverez ci-dessous des exemples de code du WXML, mais le concept est Il en va de même pour toutes les mini-plates-formes d'applications : AXML, Swan Element, ByteDance TTML (bien que les outils de développement l'appellent Bxml), et Quick App HTML : Tout comme avec Vue.js, la couche sous-jacente le concept de programmation de mini-applications est model-view-viewmodel (MVVM).

Liaison de données

La liaison de données correspond à Vue.js interpolation du texte.

<!-- wxml -->
<view>{{message}}</view>
// page.js
Page({
  data: {
    message: "Hello World!",
  },
});

Affichage de la liste

Le rendu de liste fonctionne comme la directive v-for Vue.js.

<!-- wxml -->
<view wx:for="{{array}}">{{item}}</view>
// page.js
Page({
  data: {
    array: [1, 2, 3, 4, 5],
  },
});

Rendu conditionnel

Le rendu conditionnel fonctionne comme Vue.js. Directive v-if.

<!-- wxml -->
<view wx:if="{{view == 'one'}}">One</view>
<view wx:elif="{{view == 'two'}}">Two</view>
<view wx:else="{{view == 'three'}}">Three</view>
// page.js
Page({
  data: {
    view: "three",
  },
});

Modèles

Plutôt que d'exiger l'impératif le clonage de l'élément content d'un modèle HTML, Les modèles WXML peuvent être utilisés de manière déclarative via l'attribut is qui renvoie vers une définition de modèle.

<!-- wxml -->
<template name="person">
  <view>
    First Name: {{firstName}}, Last Name: {{lastName}}
  </view>
</template>
<template is="person" data="{{...personA}}"></template>
<template is="person" data="{{...personB}}"></template>
<template is="person" data="{{...personC}}"></template>
// page.js
Page({
  data: {
    personA: { firstName: "Alice", lastName: "Foo" },
    personB: { firstName: "Bob", lastName: "Bar" },
    personC: { firstName: "Charly", lastName: "Baz" },
  },
});

Attribuer un style

Le style est appliqué aux dialectes CSS. Le nom de WeChat WXSS. Pour Alipay, il s'agit de ACSS. CSS, et pour ByteDance, dialecte est appelé TTSS Elles ont un point commun : elles étendent le CSS à l'aide de pixels responsifs. Lorsque vous écrivez du code CSS standard, les développeurs doivent convertir toutes les unités de pixels pour les adapter à différents écrans d'appareils mobiles avec des largeurs et des rapports de pixels différents. Le TTSS accepte l'unité rpx comme couche sous-jacente, ce qui signifie la mini-application prend en charge le travail du développeur et convertit les unités en son nom, en fonction une largeur d'écran spécifiée de 750rpx. Par exemple, sur un téléphone Pixel 3a dont la largeur d'écran est de 393px (avec un ratio de pixels de 2.75), les 200rpx responsives deviennent 104px sur l'appareil réel lorsqu'il est inspecté avec les outils pour les développeurs Chrome (393 px / 750 rpx * 200 rpx environ 104 px). Dans Android, le même concept s'appelle pixel indépendant de la densité.

<ph type="x-smartling-placeholder">
</ph> L&#39;inspection d&#39;une vue avec les outils pour les développeurs Chrome dont la marge intérieure en pixels a été spécifiée avec &quot;200 rpx&quot; montre qu&#39;elle est en réalité égale à 104 pixels sur un appareil Pixel 3a. <ph type="x-smartling-placeholder">
</ph> Inspecter la marge intérieure réelle d'un appareil Pixel 3a à l'aide des outils pour les développeurs Chrome
/* app.wxss */
.container {
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  padding: 200rpx 0; /* ← responsive pixels */
  box-sizing: border-box;
}

Étant donné que les composants (voir plus tard) n'utilisent pas le Shadow DOM, les styles déclarés sur l'audience d'une page dans tous les composants. L'organisation courante des fichiers d'une feuille de style consiste à avoir une feuille de style racine pour des styles généraux et des feuilles de style individuelles par page, spécifiques à chaque page de la mini-application. Les styles peuvent être importée avec une règle @import qui se comporte comme Règle de règle CSS @import. Comme en HTML, peuvent également être déclarés de façon intégrée, y compris l'interpolation du texte dynamique (voir avant).

<view style="color:{{color}};" />

Script

Les mini-applications sont compatibles avec un "sous-ensemble sécurisé" de JavaScript, qui prend en charge des modules utilisant différentes syntaxes qui rappellent CommonJS ou RequireJS. Le code JavaScript ne peut pas être exécuté via eval() et aucune fonction ne peut être créée avec new Function() Le contexte d'exécution du script est V8, ou JavaScriptCore sur les appareils et V8 ou NW.js dans le simulateur. Le codage avec une syntaxe ES6 ou plus récente est généralement possible, car ces outils de développement transpilent automatiquement le code en ES5 si la cible de la compilation est système d'exploitation avec une ancienne implémentation WebView (voir plus tard). La la documentation des fournisseurs de super-applications mentionne explicitement que leurs langages de script ne sont pas être confondus avec et sont différents de JavaScript. Toutefois, cette affirmation se réfère principalement fonctionnement des modules, c'est-à-dire qu'ils ne sont pas compatibles modules ES.

Comme indiqué précédemment, le concept de programmation de mini-applications est model-view-viewmodel (MVVM). La couche logique et la couche vue s'exécutent sur des threads différents, ce qui signifie que l'interface utilisateur n'utilise pas sont bloquées par des opérations de longue durée. En termes Web, vous pouvez penser aux scripts exécutés Nœud de calcul Web

Le langage de script de WeChat s'appelle WXS, Alipay's Il en va de même pour SJS et ByteDance. SJS. Baidu utilise le langage JS lorsqu'il fait référence les leurs. Ces scripts doivent être inclus à l'aide d'un type de tag spécial, par exemple <wxs> dans WeChat. En revanche, Quick App utilise des balises <script> standards et l'ES6 Syntaxe JS.

<wxs module="m1">
  var msg = "hello world";
  module.exports.message = msg;
</wxs>

<view>{{m1.message}}</view>

Les modules peuvent également être chargés via un attribut src ou importés via require().

// /pages/tools.wxs
var foo = "'hello world' from tools.wxs";
var bar = function (d) {
  return d;
};
module.exports = {
  FOO: foo,
  bar: bar,
};
module.exports.msg = "some msg";
<!-- page/index/index.wxml -->
<wxs src="./../tools.wxs" module="tools" />
<view>{{tools.msg}}</view>
<view>{{tools.bar(tools.FOO)}}</view>
// /pages/logic.wxs
var tools = require("./tools.wxs");

console.log(tools.FOO);
console.log(tools.bar("logic.wxs"));
console.log(tools.msg);

API JavaScript Bridge

Le pont JavaScript qui connecte les mini-applications au système d'exploitation permet pour utiliser les fonctionnalités du système d'exploitation (consultez Accès à des fonctionnalités puissantes. Il propose également un certain nombre de méthodes pratiques. Pour un aperçu, vous pouvez consulter les différentes API de WeChat, Alipay, Baidu ByteDance, et Quick App.

La détection de caractéristiques est simple, car toutes les plates-formes fournissent un (littéralement appelé comme ceci) canIUse() dont le nom semble inspiré du site Web caniuse.com. Pour exemple, la fonction tt.canIUse() permet de vérifier la compatibilité des API, méthodes, paramètres, options, composants et attributs.

// Testing if the `<swiper>` component is supported.
tt.canIUse("swiper");
// Testing if a particular field is supported.
tt.canIUse("request.success.data");

Mises à jour

Les mini-applications n'ont pas de mécanisme de mise à jour standardisé (discussions autour d'une éventuelle standardisation). Toutes les plates-formes de mini-applications disposent d'un système de backend, ce qui permet aux développeurs de mini-applications d'importer de nouvelles versions de leurs mini-applications. Une super-application utilise ensuite ce système backend pour rechercher et télécharger les mises à jour. Quelques super applis effectuer des mises à jour entièrement en arrière-plan, sans que la mini-application ne puisse les influencer. le flux de travail. D'autres super-applications offrent plus de contrôle sur les mini-applications elles-mêmes.

À titre d'exemple de processus sophistiqué, les paragraphes suivants décrivent le mécanisme de mise à jour de WeChat pour les mini-applications. plus en détail. WeChat recherche les mises à jour disponibles dans les deux scénarios suivants:

  1. Tant que WeChat est en cours d'exécution, WeChat recherche régulièrement les mises à jour des mini-applications récemment utilisées. Si un est détectée, elle est téléchargée et appliquée de manière synchrone la prochaine fois que l'utilisateur démarre mini-application. Le démarrage à froid d'une mini-application se produit lorsque celle-ci n'était pas en cours d'exécution lorsque l'utilisateur l'a ouverte (WeChat ferme les mini-applications de force après cinq minutes en arrière-plan).
  2. WeChat recherche également des mises à jour lorsqu'une mini-application est démarrée à froid. Pour les mini-applications que l'utilisateur n'a pas ouvertes pendant une longue période, la mise à jour est recherchée et téléchargée de manière synchrone. Pendant le téléchargement de la mise à jour, l'utilisateur doit attendre. Une fois le téléchargement terminé, la mise à jour est appliquée et la mini-application s'ouvre. Si le Le téléchargement échoue. Par exemple, en raison d'une mauvaise connexion réseau, la mini-application s'ouvre malgré tout. Pour les mini-applis qui ouverte récemment par l'utilisateur, toute mise à jour potentielle est téléchargée de manière asynchrone en arrière-plan et la prochaine fois que l'utilisateur démarrera à froid la mini-application.

Les mini-applications peuvent activer les mises à jour antérieures à l'aide de l'API UpdateManager. Il offre les fonctionnalités suivantes:

  • Notifie la mini-application lorsqu'une recherche de mises à jour est effectuée. (onCheckForUpdate)
  • Notifie la mini-application lorsqu'une mise à jour a été téléchargée et est disponible. (onUpdateReady)
  • Notifie la mini-application lorsqu'une mise à jour n'a pas pu être téléchargée. (onUpdateFailed)
  • Permet à la mini-application d'installer d'office une mise à jour disponible, ce qui redémarrera l'application. (applyUpdate)

WeChat propose également des options de personnalisation des mises à jour supplémentaires pour les développeurs de mini-applications dans son système backend: 1. Une option permet aux développeurs de désactiver les mises à jour synchrones pour les utilisateurs ayant déjà une certaine version minimale de la mini-application installée et force à la place les mises à jour à être asynchrones. 2. Une autre option permet aux développeurs de définir la version minimale requise de leur mini-application. Ainsi, les mises à jour asynchrones à partir d'une version antérieure à la version minimale requise. Forcez le rechargement de la mini-application après et appliquer la mise à jour. L'ouverture d'une ancienne version de la mini-application sera également bloquée si vous téléchargez la mise à jour échoue.

Remerciements

Cet article a été examiné par Joe Medley, Kayce Basques, Milica Mihajlija, Alan Kent, et Keith Gu.