Presentation is loading. Please wait.

Presentation is loading. Please wait.

New Ext* telemetry A complete picture of the Part- and Blade-rendering timeline Separates Ibiza from extension costs …including shared responsibilities.

Similar presentations


Presentation on theme: "New Ext* telemetry A complete picture of the Part- and Blade-rendering timeline Separates Ibiza from extension costs …including shared responsibilities."— Presentation transcript:

1 New Ext* telemetry A complete picture of the Part- and Blade-rendering timeline Separates Ibiza from extension costs …including shared responsibilities

2 New Ext* telemetry – Extension focus
ExtPartVMAcquired View model ctor Proxying the view model to the Shell’s IFrame Constructing DOM ExtPartInitialDataReceived Loading of essential data Mutating view model (as well as proxying changes to Shell’s IFrame) ExtPartFullDataReceived See ExtPartInitialDataReceived, but for slower-loading, non-essential data

3 New Ext* telemetry Reduce your view model sizes
Name private properties with underscore prefix Use CTRL-ALT-d to see VM sizes, dump VMs to console Avoid many, incremental observable changes Try to update your view model atomically Look for new console warnings in dev mode The cost of rendering the view is a shared responsibility Ibiza – Cheap proxying, slim down view model contracts, efficient controls Extension – Smaller view models, fewer/atomic observable changes

4 New “revealContent” API
Improve perceived responsiveness User can interact sooner Remove the Part/Blade-loading spinner early! In-content spinner doesn’t block user interaction Opaque spinner while: extension loads essential data loads Remove spinner when essential/fast data is loaded Part fully loaded ---

5 New API  container.revealContent()
Before public onInputsSet(inputs: MyPartInputs): Promise { return this._dataView.fetch(inputs.resourceId); Remove the spinner early! This promise controls error experience After public onInputsSet(inputs: MyPartInputs): Promise { return Q.all([ this._minimumViableDataView.fetch(inputs.resourceId).then(() => { container.revealContent(); }), this._slowerLoadingDataView.fetch(inputs.resourceId) ]); } Lock on measurement

6 Applications of ‘revealContent’
Asset Part Essentials Part Create Blades *** All other extension Parts / Blades ***

7 New DataCache option – ‘extendEntryLifetimes’
DataCache entries are ref-counted export class DataContext { public resourceEntities = new MsPortalFx.Data.EntityCache<Resource, string>({ ... extendEntryLifetimes: true, }); } With ‘extendEntryLifetimes’… DataCache will retain unreferenced entries for ~1 minute Users who revisit your Blade will reuse cached data Ibiza is adding new telemetry to monitor cache efficiency …and measure/maximize impact of this optimization

8 New DataCache option – ‘extendEntryLifetimes’
Caching data longer requires extension changes! Examine your DataContext “save” operations Sync you DataCaches after “save” Call refresh[All], applyChanges, forceRemove Return right value from EditScopeCache saveEditScopeChanges

9 Improve your perf! Consult new Ext* telemetry markers
…and act to improve your spans Optimize your CORS calls Cache your extension’s home page Apply ‘container.revealContent()’ Show users their useful Parts / Blades faster! Apply ‘extendEntryLifetimes’ Eliminate data-loading from frequently revisited Parts / Blades


Download ppt "New Ext* telemetry A complete picture of the Part- and Blade-rendering timeline Separates Ibiza from extension costs …including shared responsibilities."

Similar presentations


Ads by Google