2012-09-12 6 views
10

Stiamo valutando lo sviluppo di un'app in stile Metro di Windows 8 che sarà molto fotogenica, quindi siamo preoccupati per le prestazioni dell'interfaccia utente. Su iOS è stata una decisione facile (Objective-C su HTML per ottenere le prestazioni dell'interfaccia utente di cui avevamo bisogno), ma ricercando Windows 8 sto avendo più difficoltà a dire quanto XAML sarà più veloce di HTML5/CSS.Le app XAML basate su Windows 8 sono notevolmente più veloci di quelle HTML/CSS?

Ho visto i confronti generali tra XAML e HTML5 (come this one), e c'è un SO answer che tocchi sulle prestazioni, ma non fornisce i dati per eseguire il backup sua affermazione o spiegare perché XAML è più veloce.

Da quello che ho letto, HTML5/CSS è reso utilizzando il motore di rendering di IE10, il che significa che non è super-nativo e potrebbe essere più lento. Ma non sono sicuro di come viene eseguito XAML o di quanto sia "nativo".

Qualcuno ha eseguito confronti delle prestazioni tra le due tecnologie oppure è possibile fornire collegamenti a ulteriori spiegazioni sul modo in cui ciascuna viene resa (tenendo conto delle prestazioni)?

+0

La nuova implementazione di XAML AFAIK è tutto nativa e utilizza DirectX per la maggior parte per il rendering. Ma ancora, penso che IE10 usi DirectX anche per il rendering. – Krishna

+0

Qualcosa da tenere a mente è la familiarità degli sviluppatori con ciascuna tecnologia. Troppo spesso le prestazioni dell'applicazione sono ridotte perché l'ingegnere non ha familiarità con gli schemi o le strutture dati appropriate per la piattaforma. In generale, i motori dell'interfaccia utente sono tutti sufficientemente veloci per la maggior parte dei casi d'uso. Spingendoli verso estremi è probabile scoprire le differenze. – allingeek

risposta

12

Qui ci sono i miei pensieri su questo:

Prima XAML può dare un comportamento migliore di HTML5. Se usi XAML combinato con C++ otterrai le migliori prestazioni per WinRT, perché C++ è un codice nativo. Se si utilizza C#, si dipende dal CLR (Common Language Runtime), che è più lento del codice nativo.
- Reference 1
- Reference 2

In secondo luogo, se avete intenzione di includere un sacco di librerie JavaScript, che probabilmente sarà, avrà un impatto sulle prestazioni. (jQuery, jqQuery plugins, backbone.js, ...)

Quindi, come hai detto tu, l'HTML5 in JS è reso utilizzando il motore di IE. Quindi questo è difficile. Dipende davvero da come scrivi il tuo codice. Per le best practice per XAML e JS è possibile cercare here.

Dalla esperienza personale. Ho scritto un'app utilizzando XAML/C#. Ci si sente meglio di Windows Phone 7 e 7.5. Soprattutto perché hanno tagliato giù .NET. Il nuovo modello async e await è abbastanza buono. Puoi facilmente implementare chiamate asincrone, webservice o rendering di immagini nel tuo caso.

Ma sono anche interessato ai numeri, quindi se qualcuno ha fatto un test, sarebbe fantastico.

+0

Questo collegamento alle best practice è stato molto utile, grazie, e ha informazioni su come funziona ogni piattaforma. –

+10

Giusto per chiarire, il motore di rendering XAML è puro C++/COM sia che stiate usando C++ o C#. Il codice sottostante in C# utilizza essenzialmente il CLR ma il rendering non lo fa. Esiste una penalizzazione delle prestazioni per l'accesso agli elementi dell'interfaccia utente dal codice perché è necessario attraversare il limite CLR-COM, ma questo è minimo. Qualsiasi presentazione che non richieda interazione con il codice (ad esempio animazioni) dovrebbe essere eseguita alla stessa velocità sia che tu sia in C++ o C#. Le restanti note su JS sono valide, ma vale la pena notare che WinRT esegue il codice JavaScript "JIT Compile" alla prima esecuzione. –

+0

@ JaredBienz-MSFT, fa un FlipView (ad esempio) utilizzando la chiamata JS nello stesso motore di rendering C++ di un FlipView in C#? O il JS FlipView è implementato in modo completamente diverso, e fatto usando JS/HTML come i controlli personalizzati sarebbero in JS? –

3

IE10 ha un motore con accelerazione hardware, inclusa una tela HTML5 con accelerazione GPU. Ciò significa che il rendering sarà probabilmente altrettanto veloce in HTML5 come in XAML, dal momento che entrambi i modi utilizzano la GPU per il rendering.

La logica può essere un paio di volte più lenta in JS, ma spesso non importa. Se la tua app non è strozzata da una quantità elevata di elaborazione logica, e come molte app è semplicemente principalmente basata su eventi senza cicli pesanti, JS è probabilmente abbastanza veloce.

Quindi è possibile prendere in considerazione il fatto che è molto più facile trasferire HTML5 su altre piattaforme.

2

La velocità non è davvero un grosso problema, a meno che non si stia facendo qualcosa che richiede un'elaborazione intensa o che deve essere eseguita in una determinata finestra di tempo.

In realtà, l'informatica è diventata così rapida che il tempo dedicato all'ottimizzazione sta prendendo tempo dall'implementazione di nuove funzionalità utili. Ottimizza solo dove necessario.

Direi di fare la tua scelta in base alla funzionalità del 2 e quanto bene conosci ognuno di loro. In realtà un paio di millisecondi non sono davvero molto di cui preoccuparsi. Direi che la maggior parte dei tuoi utenti finali non ha intenzione di eseguire il benchmark dell'applicazione, è più probabile che siano attratti da caratteristiche e funzionalità.

Non stiamo più utilizzando 64kb di ram e 400mhz di CPU.

Ovviamente si presume che non si stia facendo qualcosa che richiede un uso intensivo del processore. Se lo sei, stai cercando tutte le tecnologie sbagliate.