Signatur
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
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();
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:
expectedImprovementwurde aus der Spezifikation der Ink API entfernt. Chromium-basierte Browser (ab Chrome/Edge 94) unterstützen denDelegatedInkTrailPresenter, liefern für diese Eigenschaft in der Regel aberundefined. 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
TypeErroraus. - Die Ink API steht nur in sicheren Kontexten (HTTPS) zur Verfügung.