Date post: | 15-May-2015 |
Category: |
Technology |
Upload: | sencha |
View: | 5,483 times |
Download: | 1 times |
Wednesday, November 2, 2011
What’s New
Don Griffin
EXT JS 4.1
Wednesday, November 2, 2011
dongryphon
Forum
Wednesday, November 2, 2011
@dongryphon
Wednesday, November 2, 2011
Wednesday, November 2, 2011
Focus Areas
Wednesday, November 2, 2011
Performance
Grid
API Enhancements
Wednesday, November 2, 2011
Performance
Wednesday, November 2, 2011
Many Aspects
Wednesday, November 2, 2011
Many Aspects
DOMlayout
renderinginitialization
DOM
DOM
load
Wednesday, November 2, 2011
Many Aspects
DOMlayout
renderinginitialization
ajax
security
validation
database
DOM
DOM
DOMload
Wednesday, November 2, 2011
Measurement Required
Wednesday, November 2, 2011
Measurement Required
Chrome: Profiler, Speed TracerFirefox: dynaTrace, FirebugIE: dynaTrace, IE8+ ProfilerSafari: Developer Tools Profiler
Wednesday, November 2, 2011
Themes Example - 4.0.7 (IE8)
Wednesday, November 2, 2011
Themes Example - 4.0.7 (IE8)
4.0.7
Wednesday, November 2, 2011
Themes Example - 4.0.7 (IE8)
6%
Load 300
4.0.7
Wednesday, November 2, 2011
Themes Example - 4.0.7 (IE8)
6%
7%
Load
Initialize
300
320
4.0.7
Wednesday, November 2, 2011
Themes Example - 4.0.7 (IE8)
6%
7%
36%
Load
Initialize
Rendering
300
320
16804.0.7
Wednesday, November 2, 2011
Themes Example - 4.0.7 (IE8)
6%
7%
36%
51%
Load
Initialize
Rendering
Layout 300
320
1680
2400
4.0.7
4700
Wednesday, November 2, 2011
Analysis
Wednesday, November 2, 2011
Cost is spread across
the Page Life Cycle
Wednesday, November 2, 2011
Cost is spread across
the Page Life Cycle
Wednesday, November 2, 2011
Cost is spread across
the Page Life Cycle
Initialize Render LayoutLoad
Wednesday, November 2, 2011
Load
Wednesday, November 2, 2011
<script src=”ext.js”>
Wednesday, November 2, 2011
Class System
Wednesday, November 2, 2011
DOM Ready
Wednesday, November 2, 2011
Initialize
Load
Wednesday, November 2, 2011
onReady
Wednesday, November 2, 2011
initComponent
Wednesday, November 2, 2011
prepareItems
Wednesday, November 2, 2011
Themes - Ext JS 3.4
Wednesday, November 2, 2011
148 componentsin
50 containers
Themes - Ext JS 3.4
Wednesday, November 2, 2011
Themes - Ext JS 4.x
Wednesday, November 2, 2011
148 271 componentsin
50 97 containers
Themes - Ext JS 4.x
Wednesday, November 2, 2011
More flexibility
Wednesday, November 2, 2011
Components& Containershave a cost
Wednesday, November 2, 2011
Observableslisteners
fireEvents
Wednesday, November 2, 2011
Rendering
Load Initialize
Wednesday, November 2, 2011
Wednesday, November 2, 2011
Components HTML
Wednesday, November 2, 2011
comp
container
panel
Wednesday, November 2, 2011
comp
container
panel
comp
container
panelel
render
Wednesday, November 2, 2011
Rendering in 4.0
Wednesday, November 2, 2011
Wednesday, November 2, 2011
comp
container
panelrender
onRender
Wednesday, November 2, 2011
comp
container
panelel
render
onRender
createElement
Wednesday, November 2, 2011
comp
container
panelel
render
onRender
createElement
renderTpl
Wednesday, November 2, 2011
comp
container
panelel
render
onRender
createElement
renderTpl
renderSelectors
Wednesday, November 2, 2011
comp
container
panelel
render
onRender
createElement
renderTpl
renderSelectors
afterRender
Wednesday, November 2, 2011
comp
container
panelel
createElement
renderTpl
afterRender
onRender
render
renderSelectors
Wednesday, November 2, 2011
Rendering in 4.1
Wednesday, November 2, 2011
Wednesday, November 2, 2011
comp
container
panel
renderTpl
beforeRender
render
Wednesday, November 2, 2011
comp
container
panel
renderTpl
beforeRender
render
Wednesday, November 2, 2011
comp
container
panelel
renderTpl
beforeRender
render
innerHTML
Wednesday, November 2, 2011
comp
container
panelel
renderTpl
beforeRender
render
innerHTML
onRender
Wednesday, November 2, 2011
comp
container
panelel
renderTpl
beforeRender
render
innerHTML
onRender
renderSelectors
afterRender
Wednesday, November 2, 2011
comp
container
panelel
renderTpl
beforeRender
render
innerHTML
onRender
renderSelectors
afterRender
Wednesday, November 2, 2011
Layout
RenderLoad Initialize
Wednesday, November 2, 2011
A Place For Everything
and
Everything In Its Place
Wednesday, November 2, 2011
Layout Example
Wednesday, November 2, 2011
Ext.widget({ xtype: ‘panel’, layout: ‘fit’, title: ‘Text’, items: [{ xtype: ‘component’, html: ‘foo’, width: 100, height: 100 }]});
Wednesday, November 2, 2011
Ext.widget({ xtype: ‘panel’, layout: ‘fit’, title: ‘Text’, items: [{ xtype: ‘component’, html: ‘foo’, width: 100, height: 100 }]});
Ext.widget({ xtype: ‘panel’, layout: ‘fit’, dockedItems: [{ xtype: ‘header’, text: ‘Text’, dock: ‘top’ }], items: [{ xtype: ‘component’, html: ‘foo’, width: 100, height: 100 }]});
Wednesday, November 2, 2011
Text
foo
Wednesday, November 2, 2011
Text
foo
Wednesday, November 2, 2011
Text
foo
Wednesday, November 2, 2011
Text
fooha
wa
Wednesday, November 2, 2011
Text
fooha
wa
Wednesday, November 2, 2011
Text
fooha
wa
wb = wa
Wednesday, November 2, 2011
Text
fooha
hb
wa
wb = wa
Wednesday, November 2, 2011
Text
fooha
hb
wa
wb = wa
Wednesday, November 2, 2011
Text
fooha
hb
hc
= ha+hb
+fc
wawc = wa + fc
wb = wa
Wednesday, November 2, 2011
First Rule of Speed
Wednesday, November 2, 2011
Wednesday, November 2, 2011
C$$Calculations
Are Expensive
Wednesday, November 2, 2011
Wednesday, November 2, 2011
... therefore ...
Wednesday, November 2, 2011
Wednesday, November 2, 2011
Browsers Cache Results*
Wednesday, November 2, 2011
Browsers Cache Results*
* - DOM Writes Invalidate The Cache !Wednesday, November 2, 2011
Write + Read = Reflow
Wednesday, November 2, 2011
Second Rule of Speed
Wednesday, November 2, 2011
Apps Have MoreThan
One Panel!
Wednesday, November 2, 2011
comp
container
panelel
Wednesday, November 2, 2011
comp
container
panelel
component (3.x)
Wednesday, November 2, 2011
comp
container
panelel
component (3.x)container (4.0)
Wednesday, November 2, 2011
comp
container
panelel
component (3.x)container (4.0)global (4.1)
layoutcontext
Wednesday, November 2, 2011
Minimizing Reflowsvar maxHt = 0, n = elements.length, i;
for (i=0; i < n; ++i) { elements[i].setWidth(w); maxHt = Math.max(maxHt, elements[i].getHeight());}
for (i=0; i < n; ++i) { elements[i].setHeight(maxHt);}
Wednesday, November 2, 2011
Minimizing Reflowsvar maxHt = 0, n = elements.length, i;
for (i=0; i < n; ++i) { elements[i].setWidth(w); maxHt = Math.max(maxHt, elements[i].getHeight());}
for (i=0; i < n; ++i) { elements[i].setHeight(maxHt);}
n+1 reflows
Wednesday, November 2, 2011
var maxHt = 0, n = elements.length, i;
for (i=0; i < n; ++i) { elements[i].setWidth(w);}
for (i=0; i < n; ++i) { maxHt = Math.max(maxHt, elements[i].getHeight());}
for (i=0; i < n; ++i) { elements[i].setHeight(maxHt);}
Minimizing Reflowsvar maxHt = 0, n = elements.length, i;
for (i=0; i < n; ++i) { elements[i].setWidth(w); maxHt = Math.max(maxHt, elements[i].getHeight());}
for (i=0; i < n; ++i) { elements[i].setHeight(maxHt);}
n+1 reflows
Wednesday, November 2, 2011
var maxHt = 0, n = elements.length, i;
for (i=0; i < n; ++i) { elements[i].setWidth(w);}
for (i=0; i < n; ++i) { maxHt = Math.max(maxHt, elements[i].getHeight());}
for (i=0; i < n; ++i) { elements[i].setHeight(maxHt);}
Minimizing Reflowsvar maxHt = 0, n = elements.length, i;
for (i=0; i < n; ++i) { elements[i].setWidth(w); maxHt = Math.max(maxHt, elements[i].getHeight());}
for (i=0; i < n; ++i) { elements[i].setHeight(maxHt);}
n+1 reflows 2 reflows
Wednesday, November 2, 2011
More Opportunities
Wednesday, November 2, 2011
Leverage Layout Dependency Data
Wednesday, November 2, 2011
Cache Layout Results
Wednesday, November 2, 2011
Themes Example - 4.1 (IE8)
Wednesday, November 2, 2011
Themes Example - 4.1 (IE8)
4.0.7 4.1
Wednesday, November 2, 2011
Themes Example - 4.1 (IE8)
8%
Load 300200
4.0.7 4.1
Wednesday, November 2, 2011
Themes Example - 4.1 (IE8)
8%
10%
Load
Initialization
300200
320240
4.0.7 4.1
Wednesday, November 2, 2011
Themes Example - 4.1 (IE8)
8%
10%
43%
Load
Initialization
Rendering
300200
320240
16801035
4.0.7 4.1
Wednesday, November 2, 2011
Themes Example - 4.1 (IE8)
8%
10%
43%
39% Load
Initialization
Rendering
Layout 300200
320240
16801035
2400945
4.0.7 4.1
4700
2420
Wednesday, November 2, 2011
Significantly faster than 4.0 !
Wednesday, November 2, 2011
But not faster than 3.4...
Wednesday, November 2, 2011
But not faster than 3.4...
Yet
Wednesday, November 2, 2011
Further Investigation
Wednesday, November 2, 2011
Convert Layouts into CSS... where possible
Optimize Class Creation
Optimize DOM Event Binding
Further Investigation
Wednesday, November 2, 2011
Grid
Wednesday, November 2, 2011
NativeScrolling!
Wednesday, November 2, 2011
NativeScrolling!
momentum
friction
acceleration
Wednesday, November 2, 2011
What CouldBe Better?!?
Wednesday, November 2, 2011
NativeScrolling
withBuffering!
Wednesday, November 2, 2011
Is There More?
Wednesday, November 2, 2011
NativeInfinite
Scrolling!
Wednesday, November 2, 2011
But Wait...
Wednesday, November 2, 2011
OptimizedColumn
Reordering
Wednesday, November 2, 2011
Store metadata
Wednesday, November 2, 2011
API Enhancements
Wednesday, November 2, 2011
Border Layout
Wednesday, November 2, 2011
Multiple regions
Wednesday, November 2, 2011
Multiple regions
North
South
West
East
Wednesday, November 2, 2011
Multiple regions
North
South
West
East
West
East
ofthe same type
Wednesday, November 2, 2011
Control
Space Priority
Wednesday, November 2, 2011
Control
Space Priority
West
East
Wednesday, November 2, 2011
Control
Space Priority
North
South
West
East
West
East
Wednesday, November 2, 2011
Regions can be
added and removed
dynamically
Wednesday, November 2, 2011
XTemplate
Wednesday, November 2, 2011
Foundational to
Ext JS
Wednesday, November 2, 2011
XTemplate
Wednesday, November 2, 2011
compiles faster...runs faster...
is debuggable...
XTemplate
Wednesday, November 2, 2011
compiles faster...runs faster...
is debuggable...and more powerful!
XTemplate
Wednesday, November 2, 2011
Compiles To A Function
Wednesday, November 2, 2011
<tpl> <ul> <tpl for=”x”> <li>{fname} <tpl if=”lname”> {lname} <tpl else> (None) </tpl> </li> </tpl> </ul></tpl>
Wednesday, November 2, 2011
<tpl> <ul> <tpl for=”x”> <li>{fname} <tpl if=”lname”> {lname} <tpl else> (None) </tpl> </li> </tpl> </ul></tpl>
function tplFn (out, values..) { out.push(’<ul>’); for (var n in values.x) { var v2 = values.x[n]; out.push(’<li>’); out.push(v2.fname); if (v2.lname) { out.push(v2.lname); } else { out.push(‘(None)’); } } out.push(‘</li>’); } out.push(‘</ul>’);}
Wednesday, November 2, 2011
Control Structures
Wednesday, November 2, 2011
<tpl if="age == 3"> {x}<tpl elseif=”age == 2”> {y}<tpl else> {z}</tpl>
Wednesday, November 2, 2011
<tpl switch="age"> <tpl case="3" case="4"> <p>{name} is 3 or 4</p> <tpl case="2"> <p>{name} is two</p> <tpl default> <p>{name} is {age}!</p></tpl>
Wednesday, November 2, 2011
Code Injection
Wednesday, November 2, 2011
<tpl> {% var i=0; %} <tpl for=”x”> {name} {% if (++i==9) break; %} </tpl></tpl>
Wednesday, November 2, 2011
<tpl> {% var i=0; %} <tpl for=”x”> {name} {% if (++i==9) break; %} </tpl></tpl>
function tplFn (out, values..) { var i=0; for (var n in values.x) { out.push(v2.name); if (++i == 9) break; }}
Wednesday, November 2, 2011
applyOut
Wednesday, November 2, 2011
var tpl = new Ext.XTemplate(...);
// This:
var s = tpl.apply(data);
// is equivalent to:
var a = [];tpl.applyOut(a, data);s = a.join(‘’);
Wednesday, November 2, 2011
Class System
Wednesday, November 2, 2011
Overrides
Ext.define(‘My.patches.GridOverride’, {
override: ‘Ext.grid.Panel’,
initComponent: function () { this.callParent(); }});
-------------------
Ext.define(‘My.app.App’, { requires: [ ‘My.patches.*’ ], ...});
Wednesday, November 2, 2011
Overrides
Ext.define(‘My.patches.GridOverride’, {
override: ‘Ext.grid.Panel’,
initComponent: function () { this.callParent(); }});
-------------------
Ext.define(‘My.app.App’, { requires: [ ‘My.patches.*’ ], ...});
Named and used like a normal class
Wednesday, November 2, 2011
Overrides
Ext.define(‘My.patches.GridOverride’, {
override: ‘Ext.grid.Panel’,
initComponent: function () { this.callParent(); }});
-------------------
Ext.define(‘My.app.App’, { requires: [ ‘My.patches.*’ ], ...});
Named and used like a normal class
Only added to the build if the target class is required
Wednesday, November 2, 2011
Ext.create/widget
Ext.create(‘Ext.grid.Panel’, {
... config ...
});
// or
Ext.widget(‘grid’, {
... config ...
});
4.0
Wednesday, November 2, 2011
Ext.create/widget
Ext.create(‘Ext.grid.Panel’, {
... config ...
});
// or
Ext.widget(‘grid’, {
... config ...
});
Ext.create({ xclass: ‘Ext.grid.Panel’,
... config ...});
// or
Ext.widget({ xtype: ‘grid’.,
... config ...});
4.0 4.1
Wednesday, November 2, 2011
Methods in configs - 4.0
items: [ { xtype: ‘foo’,
method: function (a) { return }}]
Ext.foo.Bar.prototype.method.call(this, a*2);a*2;
Wednesday, November 2, 2011
Methods in configs - 4.0
items: [ { xtype: ‘foo’,
method: function (a) { return }}]
Messy if you need to call original method!
Ext.foo.Bar.prototype.method.call(this, a*2);a*2;
Wednesday, November 2, 2011
xhooks
items: [ { xtype: ‘foo’,
xhooks: { method: function (a) { return this.callParent([a * 2]); } }}]
Wednesday, November 2, 2011