Markup, stile, scripting e aggiornamento delle app mini

Markup languages

Come spiegato in precedenza, le mini app sono scritte con i dialetti HTML, anziché utilizzare il codice HTML. Se mai avuto a che fare con l'interpolazione e le direttive di testo Vue.js, ti rispetterai a casa, ma concetti simili esistevano molto prima in XML Transformations (XSLT). Di seguito, puoi vedere alcuni esempi di codice da WeChat WXML, ma il concetto è la stessa cosa per tutte le piattaforme mini-app, vale a dire la piattaforma AXML, Baidu Swan Element, ByteDance TTML (nonostante DevTools lo chiami Bxml) e Quick App HTML. Proprio come con Vue.js, la struttura concetto di programmazione di mini app è model-view-viewmodel (MVVM).

Associazione di dati

L'associazione di dati corrisponde a quella di Vue.js interpolazione del testo.

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

Rendering elenco

Il rendering degli elenchi funziona come l'istruzione v-for di Vue.js.

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

Rendering condizionale

Il rendering condizionale funziona come quello di Vue.js 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",
  },
});

Modelli

Invece di richiedere l'imperativo clonazione della versione content di un modello HTML, I modelli WXML possono essere utilizzati in modo dichiarativo tramite l'attributo is che rimanda a una definizione di modello.

<!-- 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" },
  },
});

Stili

Lo stile viene applicato ai dialetti dei CSS. WeChat ha un nome WXSS. Per Alipay si chiama ACSS, l'agente di Baidu CSS e, per ByteDance, i loro dialetto è definito come Servizio di assistenza tecnica. Ciò che hanno in comune è che estendono i CSS con pixel adattabili. Quando scrivi un codice CSS normale, gli sviluppatori devono convertire tutte le unità pixel per adattarsi ai diversi schermi dei dispositivi mobili con larghezze e proporzioni pixel diverse. La sintesi vocale supporta l'unità rpx come livello sottostante, il che significa la mini app prende il lavoro dallo sviluppatore e converte le unità per suo conto, in base una larghezza dello schermo specificata di 750rpx. Ad esempio, su uno smartphone Pixel 3a con schermo largo 393px (e rapporto pixel del dispositivo di 2.75), gli 200rpx adattabili diventano 104px sul dispositivo reale quando viene controllato con Chrome DevTools (393 px / 750rpx * 200rpx ≈ 104 px). Anche in Android, lo stesso concetto è chiamato pixel indipendenti dalla densità.

L&#39;ispezione di una vista con Chrome DevTools la cui spaziatura interna dei pixel reattiva è stata specificata con &quot;200rpx&quot; mostra che in realtà si tratta di &quot;104 px&quot; su un dispositivo Pixel 3a.
. Controllo della spaziatura interna effettiva su un dispositivo Pixel 3a con Chrome DevTools.
/* 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;
}

Poiché i componenti (vedi più avanti) non utilizzano lo shadow DOM, gli stili dichiarati su una copertura coprono una pagina in tutti i componenti. L'organizzazione comune dei file dei fogli di stile prevede un foglio di stile radice per stili globali e singoli fogli di stile per pagina specifici per ogni pagina della mini app. Gli stili possono importata con una regola @import che si comporta come @import Regola at-rule di CSS. Come in HTML, Gli stili possono anche essere dichiarati in linea, inclusa l'interpolazione di testo dinamica (vedi prima).

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

Definisci i tuoi contenuti

Le mini app supportano un "sottogruppo sicuro" di JavaScript che include il supporto per moduli che usano sintassi che ricordano CommonJS o RequireJS. Il codice JavaScript non può essere eseguito tramite eval() e non è possibile creare funzioni con new Function(). Il contesto di esecuzione dello script è V8 oppure JavaScriptCore sui dispositivi e V8 o NW.js nel simulatore. Di solito è possibile programmare con una sintassi ES6 o più recente. poiché i particolari DevTools inviano automaticamente il codice a ES5 se il target della build è un un sistema operativo con una precedente implementazione di WebView (vedi più avanti). La dei fornitori di superapp dichiara esplicitamente che i loro linguaggi di scripting non sono essere confusi con JavaScript. Questa affermazione, tuttavia, si riferisce principalmente a il funzionamento dei moduli, ovvero non supportano Moduli ES.

Come accennato prima, il concetto di programmazione di mini app è model-view-viewmodel (MVVM). Il livello logico e il livello vista vengono eseguiti su thread diversi, il che significa che l'interfaccia utente vengono bloccati dalle operazioni a lunga esecuzione. In termini web, si possono pensare agli script in esecuzione in una Web worker.

Il linguaggio di scripting di WeChat si chiama WXS, Alipay SJS, la serie ByteDance SJS. Baidu parla di JS quando fa riferimento le loro. Questi script devono essere inclusi utilizzando un tipo speciale di tag, ad esempio <wxs> in WeChat. Al contrario, l'app rapida utilizza i normali tag <script> e l'ES6 Sintassi JS.

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

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

I moduli possono essere caricati anche tramite un attributo src o importati tramite 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

Il bridge JavaScript che collega le mini app al sistema operativo consente di per utilizzare le funzionalità del sistema operativo (vedi Accesso a funzionalità efficaci. it offre anche una serie di metodi pratici. Per una panoramica, puoi dare un'occhiata alle diverse API di WeChat, Alipay Baidu ByteDance, e Quick App.

Il rilevamento delle caratteristiche è semplice, poiché tutte le piattaforme offrono una funzione (letteralmente chiamata così) Metodo canIUse() il cui nome sembra ispirato al sito web caniuse.com. Per ad esempio, ByteDance tt.canIUse() consente di controllare il supporto di API, metodi, parametri, opzioni, componenti e attributi.

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

Aggiornamenti

Le mini app non dispongono di un meccanismo di aggiornamento standardizzato (discussione sulla potenziale standardizzazione). Tutte le piattaforme di mini app hanno un sistema di backend che consente ai mini sviluppatori di app di caricare nuove versioni di le loro mini app. Una superapp utilizza quindi questo sistema di backend per verificare la disponibilità di aggiornamenti e scaricarli. Alcune super app Eseguire aggiornamenti interamente in background, senza che la mini app stessa influisca sull'aggiornamento flusso di lavoro. Altre super app offrono un maggiore controllo sulle mini app stesse.

Come esempio di un processo sofisticato, i paragrafi seguenti descrivono il meccanismo di aggiornamento di WeChat per le mini app in modo più dettagliato. WeChat verifica la presenza di aggiornamenti disponibili nei due scenari seguenti:

  1. WeChat controllerà regolarmente la presenza di aggiornamenti delle mini app utilizzate di recente, purché sia in esecuzione. Se viene trovato, l'aggiornamento viene scaricato e applicato in modo sincrono al successivo avvio a freddo dell'utente mini app. L'avvio a freddo di mini app si verifica quando la mini app non era in esecuzione mentre l'utente aperta (WeChat forza la chiusura delle mini app dopo essere state in background per 5 minuti).
  2. WeChat verifica la presenza di aggiornamenti anche quando si avvia a freddo una mini app. Per le mini app che l'utente non ha aperto per un lungo periodo, l'aggiornamento viene controllato e scaricato in modo sincrono. Durante il download dell'aggiornamento, l'utente deve attendere. Al termine del download, l'aggiornamento viene applicato e si apre la mini app. Se il download non va a buon fine, ad esempio a causa di una cattiva connettività di rete, si apre comunque la mini app. Per le mini app che aperto di recente dall'utente, qualsiasi potenziale aggiornamento viene scaricato in modo asincrono in background verrà applicata al successivo avvio a freddo della mini app.

Le mini app possono attivare gli aggiornamenti precedenti utilizzando l'API UpdateManager. Offre le seguenti funzionalità:

  • Invia una notifica alla mini app quando viene effettuato un controllo della disponibilità di aggiornamenti. (onCheckForUpdate)
  • Invia una notifica alla mini app quando un aggiornamento è stato scaricato ed è disponibile. (onUpdateReady)
  • Invia una notifica alla mini app quando non è stato possibile scaricare un aggiornamento. (onUpdateFailed)
  • Consente alla mini app di forzare l'installazione di un aggiornamento disponibile, che riavvierà l'app. (applyUpdate)

WeChat fornisce inoltre ulteriori opzioni di personalizzazione degli aggiornamenti per gli sviluppatori di mini app nel proprio sistema di backend: 1. Un'opzione consente agli sviluppatori di disattivare gli aggiornamenti sincroni per gli utenti che hanno già una determinata versione minima della mini app installata, forza invece gli aggiornamenti a essere asincroni. 2. Un'altra opzione consente agli sviluppatori di impostare una versione minima richiesta della loro mini app. In questo modo gli aggiornamenti asincroni da una versione inferiore alla versione minima richiesta forza il ricaricamento della mini app dopo e applicare l'aggiornamento. Inoltre, l'apertura di una versione precedente della mini app verrà bloccata se scarichi l'aggiornamento non riesce.

Ringraziamenti

Questo articolo è stato esaminato da Mario Rossi Kayce Basques, Milica Mihajlija, Alan Kent e Keith Gu.