Windows-Apps
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern

WinJS-Planung

Eine neue Planer-API in Windows 8.1 ermöglicht Ihnen das Festlegen der Priorität von Aufgaben und Verwalten von Aufträgen. Dadurch können Sie HTML5-Apps erstellen, die die Ressourcen des Systems effizienter nutzen und besser auf die Aktionen des Benutzers reagieren.

Das Erstellen von Apps, die immer reaktionsfähig sind, kann eine echte Herausforderung sein. Sie können mehrere komplexe UI-Elemente wie ListView-Steuerelemente, SemanticZoom-Steuerelemente und benutzerdefinierte Steuerelemente kombinieren, die alle um Systemressourcen konkurrieren. Viele Elemente erfordern sowohl direkte Vorgänge im Vordergrund (z. B. Animationen) als auch zusätzliche Vorgänge im Hintergrund.

Bei Windows 8 und der Windows-Bibliothek für JavaScript 1.0 gab es keine einheitliche integrierte Planung. Eine Hintergrundaufgabe mit niedriger Priorität konnte Vorgänge im Vordergrund "ausbooten" und dazu führen, dass die App nicht oder nur holprig reagiert. Da Vorgänge mit verschiedenen Warteschlangen geplant wurden, ließ sich die Verarbeitung zwischen den Warteschlangen nicht problemlos koordinieren, um die gewünschte Priorisierung herzustellen.

In Windows 8.1 und der Windows-Bibliothek für JavaScript 2.0 wird der Scheduler eingeführt – ein Objekt/Namespace, das bzw. der alle Verarbeitungswarteschlangen in einer zentralen, universellen Warteschlange konsolidiert. Diese neue Warteschlange bietet eine prioritätsbasierte Planungsrichtlinie, die schnelle und dynamische Apps unterstützt und die Arbeit von Entwicklern vereinfacht. Sie können Aufgaben mühelos planen und ihnen Prioritäten zuweisen, damit die gewünschten Vorgänge zum richtigen Zeitpunkt ausgeführt werden.

Der Scheduler führt eine Koordinierung mit den ausgeführten Vorgängen der Windows-Bibliothek für JavaScript durch sowie mit den mit Prioritäten versehenen, asynchronen Vorgängen, die von der Windows-Runtime ausgeführt werden. Mit dem Planer können App-Vorgänge mit der richtigen Priorität in Bezug auf alle anderen Vorgänge im System geplant werden.

Planen von Aufträgen

Zum Planen von Vorgängen erstellen Sie mit der schedule-Methode einen Auftrag. An diese Methode übergeben Sie eine Funktion, die die gewünschte Aufgabe ausführt. Sie können auch eine Priorität für den Auftrag angeben. Die schedule-Methode gibt ein Objekt zurück, das die IJob-Schnittstelle implementiert. Mit diesem Objekt können Sie den geplanten Auftrag anhalten, fortsetzen und abbrechen.

Im folgenden Beispiel werden zwei einfache Aufträge mit normaler Priorität geplant.


// Schedule some work.
var job1 = S.schedule(function () {
    window.output("Running job1");
}, S.Priority.normal);
window.output("Scheduled job1");

// Schedule more work.
var job2 = S.schedule(function () {
    window.output("Running job2");
}, S.Priority.normal);
window.output("Scheduled job2");

Den vollständigen Code finden Sie im Beispiel zur Planung.

Für zusätzliche Steuerungsmöglichkeiten kann Ihre Vorgangsfunktion ein IJobInfo-Objekt akzeptieren. Mit diesem Objekt können Sie bestimmen, ob der Auftrag ein Ergebnis bereitstellen soll, einen zweiten Auftrag zur Ausführung nach Abschluss des aktuellen Auftrags planen und eine Funktion angeben, die ausgeführt wird, wenn der Auftrag die Steuerung abgibt.

Verwalten von Aufträgen

Im vorangehenden Abschnitt wurde erwähnt, dass Sie mit dem von der schedule-Methode zurückgegebenen IJob-Objekt Aufträge anhalten, abbrechen und fortsetzen können. Sie können auch die createOwnerToken-Methode des Scheduler-Objekts verwenden, um ein IOwnerToken abzurufen und dazu zu verwenden, die IJob-Objekte zu steuern, die es besitzt.

Im folgenden Beispiel werden mehrere IOwnerToken-Objekte erstellt und zum Festlegen der owner-Eigenschaft mehrerer IJob-Objekte verwendet. Anschließend wird das IOwnerToken verwendet, um mehrere Aufträge gleichzeitig abzubrechen.


var ownerObject1 = S.createOwnerToken();
var ownerObject2 = S.createOwnerToken();
var ownerObject3 = S.createOwnerToken();

// Schedule some work.
var job1 = S.schedule(function () {
    window.output("Running job1 with owner1");
}, S.Priority.normal);
job1.owner = ownerObject1;
window.output("Scheduled job1 with owner1");

// Schedule some work.
var job2 = S.schedule(function () {
    window.output("Running job2 with owner2");
}, S.Priority.normal);
job2.owner = ownerObject2;
window.output("Scheduled job2 with owner2");

// Schedule some work.
var job3 = S.schedule(function () {
    window.output("Running job3 with owner1");
}, S.Priority.normal);
job3.owner = ownerObject1;
window.output("Scheduled job3 with owner1");

// Schedule some work.
var job4 = S.schedule(function () {
    window.output("Running job4 with owner3");
}, S.Priority.normal);
job4.owner = ownerObject3;
window.output("Scheduled job4 with owner3");

window.output("Canceling jobs with owner1");
ownerObject1.cancelAll();

Den vollständigen Code finden Sie im Beispiel zur Planung.

Weitere Beispiele (u. a. zum Bereitstellen von Ergebnissen und Ausgleichen) finden Sie im Beispiel zur Planung.

 

 

Anzeigen:
© 2018 Microsoft