Start · Sprachen · JavaScript · Referenz · DelegatedInkTrailPresenter.expectedImprovement

DelegatedInkTrailPresenter.expectedImprovement

Eigenschaft

Schreibgeschützte Zahl in Millisekunden: um so viel soll die Latenz beim Zeichnen sinken, wenn der Presenter den Tintenstrich übernimmt.

seit JavaScript Experimentell, veraltet und nicht standardisiert – deprecated seit ja Kategorie: webapi

Signatur

DelegatedInkTrailPresenter.expectedImprovement

Beschreibung

Die schreibgeschützte Eigenschaft expectedImprovement gehört zur Schnittstelle DelegatedInkTrailPresenter aus der Ink API. Sie gibt einen Schätzwert in Millisekunden zurück. Er sagt, um wie viel die Darstellung eines Tintenstrichs voraussichtlich schneller wird, wenn der Browser bzw. das Betriebssystem den Strich zeichnet. Normalerweise würde die Anwendung jeden Frame selbst rendern.

Einen Presenter bekommt man über navigator.ink.requestPresenter(). Er wird an ein Zeichenelement gebunden, meist ein <canvas>. Danach übergibt man ihm mit updateInkTrailStartPoint() bei jedem pointermove den letzten Punkt, den die Anwendung selbst gezeichnet hat. Bis zum nächsten Frame zeichnet das System den Strich schon vorab weiter bis zur aktuellen Stift- oder Zeigerposition.

Gedacht war expectedImprovement für eine Entscheidung zur Laufzeit: Lohnt sich die delegierte Darstellung überhaupt? Oder zeichnet man weiter komplett selbst? Ist der Wert klein oder 0, bringt der Presenter kaum einen spürbaren Vorteil.

Rückgabewert

Typ
number
Beschreibung
Die erwartete Latenzverbesserung in Millisekunden. In Browsern ohne diese Eigenschaft ist der Wert undefined.

Beispiele

Erwartete Verbesserung abfragen (mit Feature-Erkennung)

const canvas = document.querySelector('#zeichenflaeche');

const pruefeInkApi = async () => {
  if (!('ink' in navigator)) {
    console.log('Ink API nicht verfügbar');
    return;
  }
  const presenter = await navigator.ink.requestPresenter({ presentationArea: canvas });
  const ms = presenter.expectedImprovement;
  console.log(typeof ms === 'number'
    ? `Erwartete Verbesserung: ${ms} ms`
    : 'expectedImprovement wird nicht unterstützt');
};

pruefeInkApi();
expectedImprovement wird nicht unterstützt

Presenter nur bei lohnender Verbesserung verwenden

const canvas = document.querySelector('#zeichenflaeche');
const ctx = canvas.getContext('2d');
const stil = { color: 'rgb(0 0 128)', diameter: 4 };
const MINDEST_MS = 5;

const init = async () => {
  let presenter = null;
  if ('ink' in navigator) {
    const p = await navigator.ink.requestPresenter({ presentationArea: canvas });
    // Fehlt die Eigenschaft, den Presenter trotzdem nutzen
    const gewinn = p.expectedImprovement ?? Infinity;
    if (gewinn >= MINDEST_MS) presenter = p;
  }

  canvas.addEventListener('pointermove', (event) => {
    if (event.buttons !== 1) return;
    ctx.fillStyle = stil.color;
    ctx.beginPath();
    ctx.arc(event.offsetX, event.offsetY, stil.diameter / 2, 0, Math.PI * 2);
    ctx.fill();
    // Letzten selbst gezeichneten Punkt an den Presenter übergeben
    presenter?.updateInkTrailStartPoint(event, stil);
  });
};

init();

// Wichtig · Fallstricke

  • Veraltet und nicht standardisiert: expectedImprovement wurde aus der Spezifikation der Ink API entfernt. Chromium-basierte Browser (ab Chrome/Edge 94) unterstützen den DelegatedInkTrailPresenter, liefern für diese Eigenschaft in der Regel aber undefined. Firefox und Safari unterstützen die Ink API nicht.
  • Prüfe immer mit typeof presenter.expectedImprovement === 'number' oder ??. Die Eigenschaft sollte nie über den einzigen Programmpfad entscheiden.
  • Der Wert ist nur eine Schätzung des Systems. Die tatsächliche Latenz hängt von Hardware, Bildwiederholrate und Last ab.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird ignoriert bzw. löst im Strict Mode einen TypeError aus.
  • Die Ink API steht nur in sicheren Kontexten (HTTPS) zur Verfügung.