对ExtJS4应用 性能优化的几点建议
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应用 性能优化的几点建议的更多相关文章
- jQuery性能优化的28个建议
我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来.我也做了一个jQuery性能优化的简明样式表,你可 ...
- Java内存优化和性能优化的几点建议
1.没有必要时请不用使用静态变量 使用Java的开发者都知道,当某个对象被定义为stataic变量所引用,这个对象所占有的内存将不会被回收.有时,开发者会将经常调用的对象或者变量定义为static,以 ...
- 关于java性能优化细节方面的建议
在Javva程序中,性能问题的大部分原因并不在于Java语言,而是程序本身,养成一个良好的编码习惯非常重要,能够显著地提升程序性能.下面来聊聊该方面的建议: 1.尽量在合适的场合使用单例: 所谓单例, ...
- Python性能优化的20条建议 (转载)
优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1).不同的场 ...
- python基础===Python性能优化的20条建议
优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1).不同的场 ...
- SQL性能优化的几点建议
1. 索引:索引可以提高查询的速度,但不是使用带有索引的字段查询时,索引都会起作用,如下几种特殊情况下,有可能使用带有索引的字段查询时,索引没有起作用:1)使用LIKE关键字的查询语句 如果匹配字符串 ...
- jquery性能优化的38个建议
一.注意定义jQuery变量的时候添加var关键字 这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: $loading = $('#loading'); ...
- jQuery性能优化的一些参考建议
JQ3.1 文档下载地址:https://pan.baidu.com/s/1c2vMQdy 一.注意定义jQuery变量的时候添加var关键字 这个不仅仅是JQ,在JS中都是必须的 二.如果有多个变量 ...
- Python性能优化的20条建议
优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1).不同的场 ...
随机推荐
- android 32 Gallery:横着滚动的列表
Gallery:横着滚动的列表 mainActivity.java package com.sxt.day05_01; import java.util.ArrayList; import java. ...
- Redhat 官方Performance_Tuning_Guide
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Gui ...
- atoi、stoi、strtoi区别
首先atoi和strtol都是c里面的函数,他们都可以将字符串转为int,它们的参数都是const char*,因此在用string时,必须调c_str()方法将其转为char*的字符串.或者atof ...
- [Redis] windows下安装 Redis
一:Redis是什么? Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 通过https://github.c ...
- Ant工具
Ant工具 Ant是一种基于Java的build工具.理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷.目前的最新版本为:Ant 1.9.4[1] . Ant的概念 当一 ...
- CSS美化 input type=file 兼容各个浏览器(转)
HTML代码: <FORM> <A class=btn_addPic href="javascript:void(0);"><SPAN>< ...
- Android 通信机制Message、Handler 的用法
Android中提供了通信机制,Message.Handler 等,Message用于在子线程中传递数据,Handler用于发送数据到主线程中, 下面介绍基于Message.Handler的计时器 i ...
- app包中的fragment和v4包中的fragment的使用的区别
app包中的fragment和v4包中的fragment的使用的区别 1.尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的 2.androi ...
- Uri、UriMatcher、ContentUris详解
http://blog.csdn.net/feng88724/article/details/6331396 1.Uri 通用资源标志符(Universal Resource Identifier, ...
- NSNumber 转 NSString
之前number 转string时候调用stringValue,后来发现未完全转 NSNumber * a_num = [NSNumber numberWithInteger: ]; NSString ...