New Ext* telemetry A complete picture of the Part- and Blade-rendering timeline Separates Ibiza from extension costs …including shared responsibilities
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
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
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 ---
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
Applications of ‘revealContent’ Asset Part Essentials Part Create Blades *** All other extension Parts / Blades ***
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
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
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