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. linux下的僵尸进程处理SIGCHLD信号

    什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息.这些信息至少包括进程ID,进程的终止状态,以及该 ...

  2. 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载

    使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的 ...

  3. Java基础知识强化之集合框架笔记41:Set集合之HashSet存储自定义对象并遍历练习

    1. HashSet集合存储自定义对象并遍历.如果对象的成员变量值相同即为同一个对象 注意了: 你使用的是HashSet集合,这个集合的底层是哈希表结构. 而哈希表结构底层依赖:hashCode()和 ...

  4. Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包

    官方文档:https://developer.Android.com/tools/publishing/app-signing.html 1. 默认为debug mode,使用的签名文件在: $HOM ...

  5. java中怎么进行字符串替换?

    String str = "test.doc"; String newStr = str.replaceAll("doc","html");

  6. oracle安装遇到的问题

    这两天要做一个项目,教师招聘系统.要用oracle.就安装了oracle 12c,安装的过程中遇到了一些问题,最后自己解决了.我是win7系统. 第一个报错: [INS-30131]执行安装程序验证所 ...

  7. oracle数据库读取操作系统的物理文件-转载,待完善

    --源地址不详 --创建目录SQL> create directory dir_xls as '/home/oracle'; Directory created. --给用户授权SQL> ...

  8. 关于SQL配置管理器的服务无法启动的解决办法!

    由于各种问题的因素,导致SQL服务无法启动,然后去事件查看器里看了下,有两个关于SQL 的错误.分别是实例中master.mdf和master.ldf的文件系统拒绝访问! 为了赶作业,带着焦急的心情去 ...

  9. 序列数据挖掘[ZZ]

    一.时间序列数据挖掘 时间序列是数据存在的特殊形式,序列的过去值会影响到将来值,这种影响的大小以及影响的方式可由时间序列中的趋势周期及非平稳等行为来刻画.一般来讲,时间序列数据都具有躁声.不稳定.随机 ...

  10. stat 的名字接口

    File::stat - stat 的名字接口 名字为:dev, ino, mode, nlink, uid, gid, rdev, size, atime, mtime, ctime, blksiz ...