ExtJS由于UI设计过去强悍,导致性能问题一直被大家诟病,不过到ExtJS4.1之后,性能问题相比以前的版本已有所改善,下面是官方文档给出的优化建议,李坏在此做个小小的总结,仅供大家参考。

(1)合理设置监听事件

事件监听是我们在性能优化时需要非常注意的一个部分。比如:数据集store的load事件,正常情况下,我们只需要在第一次加载数据的时候发起请求、获取数据;但是,如果我们监听设置不合理,可能会导致,当我们每次查看该页面的时候,都会触发load事件,加载同样的数据,如果数据量特别大,无疑给我们的性能带来很大的影响。为了解决这个问题,我们可以为该监听事件添加single:true配置项,代码如下:

1 listeners: {
2     load: onFirstLoadData,
3     single: true
4 }

另一个需要我们注意的事件是afterrender,这个事件在所有的DOM节点加载完毕后被触发。每当我们对页面中的元素做任何修改,都会触发该事件、重新渲染页面,这样必然影响我们应用的加载速度。未解决这个问题我们可以用beforerender代替,在ExtJS4.1版本以后我们也可以使用boxready代替该事件,具体使用方法请参考官方文档。

(2)杜绝doLayout和doComponentLayout的调用

从字面即可看出,这两个方法都是对页面重新进行布局,对整个应用的页面重新计算布局,其付出的性能代价是非常昂贵的,好在ExtJS4.1开始,我们基本可以不再使用这两个方法,这里提出,只是给新手童鞋们一个提醒,李坏在此不再做详细阐述。

(3)减少容器嵌套

简而言之,能用一层嵌套实现的绝不用两层嵌套,能用两层嵌套实现的绝不用三层嵌套… …因为每一层容器的初始化、渲染和加载都是需要大量时间的,所有我们应该在保证功能完整的基础上尽可能减少容器嵌套。例如:

1 {
2     id: 'container1',
3     items: [{
4         id: 'container2',
5         items: [{
6             id: 'component3'
7         }]
8     }]

我们完全可以用下面的布局替代:

1 {
2     id: 'container1',
3     items: [{
4         id: 'component3'
5     }]
6 }

(4)用container替代panel

当我们仅仅需要一个容器的时候,完全可以使用container替代panel(默认容器为panel),因为container是panel的基类,panel在功能上要比container强大的多,当然渲染一个panel消耗的性能也比container多很多,所以,如果可以,我们应该尽量使用container替代默认的panel。

1 {
2     xtype: 'container'// 默认容器类型 'panel'
3     items: [ ... ]
4 }

(5)减少border布局嵌套

每添加一层border布局嵌套,就要增加一次布局初始化、渲染和加载的时间,在ExtJS4.1以前的版本,同一个页面的布局中如果需要两个North区域,需要嵌套两层border布局,在ExtJS4.1中,这种恶心的布局方式已经一去不复返了,不管想要实现什么样的布局结构,一个border布局已完全可以实现了。

(6)减少对DOM的读、写操作

ExtJS官方在开发4.1版本时 ,已经尽可能减少布局时对DOM节点的读写操作,因为对DOM节点的操作会降低应用的速度,尤其是写操作,对性能的开销还是相当大的,所以我们在开发应用时,也应该尽可能减少这样的操作。比如,对节点样式的修改我们尽可能使用beforrender事件,在页面渲染前实现,而不是渲染后。

以上是ExtJS官方文档给出的几条优化建议,李坏认为,这些注意事项应该是我们在开发过程中就应该注意的,而不是开发完成后重新做优化,否则,带来的工作量是相当巨大的,李坏曾在此付出过惨重代价,在此提醒大家,希望对各位有所帮助!

对ExtJS4应用 性能优化的几点建议的更多相关文章

  1. jQuery性能优化的28个建议

    我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来.我也做了一个jQuery性能优化的简明样式表,你可 ...

  2. Java内存优化和性能优化的几点建议

    1.没有必要时请不用使用静态变量 使用Java的开发者都知道,当某个对象被定义为stataic变量所引用,这个对象所占有的内存将不会被回收.有时,开发者会将经常调用的对象或者变量定义为static,以 ...

  3. 关于java性能优化细节方面的建议

    在Javva程序中,性能问题的大部分原因并不在于Java语言,而是程序本身,养成一个良好的编码习惯非常重要,能够显著地提升程序性能.下面来聊聊该方面的建议: 1.尽量在合适的场合使用单例: 所谓单例, ...

  4. Python性能优化的20条建议 (转载)

    优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1).不同的场 ...

  5. python基础===Python性能优化的20条建议

    优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1).不同的场 ...

  6. SQL性能优化的几点建议

    1. 索引:索引可以提高查询的速度,但不是使用带有索引的字段查询时,索引都会起作用,如下几种特殊情况下,有可能使用带有索引的字段查询时,索引没有起作用:1)使用LIKE关键字的查询语句 如果匹配字符串 ...

  7. jquery性能优化的38个建议

    一.注意定义jQuery变量的时候添加var关键字 这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: $loading = $('#loading'); ...

  8. jQuery性能优化的一些参考建议

    JQ3.1 文档下载地址:https://pan.baidu.com/s/1c2vMQdy 一.注意定义jQuery变量的时候添加var关键字 这个不仅仅是JQ,在JS中都是必须的 二.如果有多个变量 ...

  9. Python性能优化的20条建议

    优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1).不同的场 ...

随机推荐

  1. heap堆内存不足

    配置jvm内存,加个启动参数 -Xms512m -Xmx512m -XX:PermSize=128m  -XX:MaxPermSize=256m   start 下面是这个: -Dcatalina.h ...

  2. CSS3 颜色值HSL表示方式&简单实例

    HSL色彩模式:就是色调(Hue).饱和度(Saturation).亮度(Lightness)三个颜色通道的改变以及它们相互之间的叠加来获得各种颜色,色调(Hue)色调最大值360,饱和度和亮度有百分 ...

  3. updatepanel局部刷新功能,实现注册时对用户名的检测

    updatepanel的使用 通过将控件放入到updatepanel中,实现局部刷新. 前台代码:<asp:ScriptManager ID="ScriptManager1" ...

  4. listview的动态加载数据问题

    1:调用adapter.notifyDataSetChanged()却不起作用 原因可能有一下几点 1.数据源没有更新,调用notifyDataSetChanged无效. 2.数据源更新了,但是它指向 ...

  5. Android平台的四大天王:Activity, Service, ContentProvider, BroadcastReceiver

    今天开始要自学android,刚看到百度知道上面这段话,觉得不错(不过已经是2011年8月的回答了): Android系统的手机的每一个你能看到的画面都是一个activity,它像是一个画布,随你在上 ...

  6. Oracle利用dbms_metadata.get_ddl查看DDL语句

    当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...

  7. sql数值显示成千分位分隔符的形式

    ), )--带小数点 ), ),'.00','')--不带小数点

  8. JavaScript 计时事件

    JavaScript 计时事件 通过使用 JavaScript,我们有能力作到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行.我们称之为计时事件. 在 JavaScritp 中使用计 ...

  9. js做全选,用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false

    用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false,当所有checkbox都被选中时,全选按钮也被选中. 详解: 有两种 ...

  10. [转]一个备份MySQL数据库的简单Shell脚本

    本文翻译自 iSystemAdmin 的 <A Simple Shell Script to Backup MySQL Database> Shell脚本是我们写不同类型命令的一种脚本,这 ...