extjs 动态加载列表,优化思路
功能截图

之前做法,先查询每一行的前4个字段,然后动态拼接出其他的字段,效率极低,以下是优化后的代码,供参考,只提供一个优化思路,授人以鱼不如授人以渔
后台Sql语句优化(语法仅支持Oracle)
SELECT PROJ_NO,
ALL_SECTION,
GRAND_SEC,
SPCID,
FIR_SCH_ID_1166,
BEGIN_DATE_1166,
END_DATE_1166,
FLOAT_CYC_1166,
FIR_SCH_ID_1167,
BEGIN_DATE_1167,
END_DATE_1167,
FLOAT_CYC_1167,
FIR_SCH_ID_1168,
BEGIN_DATE_1168,
END_DATE_1168,
FLOAT_CYC_1168,
FIR_SCH_ID_1169,
BEGIN_DATE_1169,
END_DATE_1169,
FLOAT_CYC_1169,
FIR_SCH_ID_1170,
BEGIN_DATE_1170,
END_DATE_1170,
FLOAT_CYC_1170,
FIR_SCH_ID_1171,
BEGIN_DATE_1171,
END_DATE_1171,
FLOAT_CYC_1171,
FIR_SCH_ID_1172,
BEGIN_DATE_1172,
END_DATE_1172,
FLOAT_CYC_1172,
FIR_SCH_ID_1173,
BEGIN_DATE_1173,
END_DATE_1173,
FLOAT_CYC_1173,
FIR_SCH_ID_1174,
BEGIN_DATE_1174,
END_DATE_1174,
FLOAT_CYC_1174,
FIR_SCH_ID_1175,
BEGIN_DATE_1175,
END_DATE_1175,
FLOAT_CYC_1175,
FIR_SCH_ID_1176,
BEGIN_DATE_1176,
END_DATE_1176,
FLOAT_CYC_1176,
FIR_SCH_ID_1177,
BEGIN_DATE_1177,
END_DATE_1177,
FLOAT_CYC_1177,
FIR_SCH_ID_1178,
BEGIN_DATE_1178,
END_DATE_1178,
FLOAT_CYC_1178,
FIR_SCH_ID_1179,
BEGIN_DATE_1179,
END_DATE_1179,
FLOAT_CYC_1179,
ALL_SECTION_BEGIN_DATE,
ALL_SECTION_BEGIN_DATE2
FROM (SELECT Y.PROJ_NO,
Y.SPCID,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1166,
, Y.BEGIN_DATE)) BEGIN_DATE_1166,
, Y.END_DATE)) END_DATE_1166,
, Y.FLOAT_CYC)) FLOAT_CYC_1166,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1167,
, Y.BEGIN_DATE)) BEGIN_DATE_1167,
, Y.END_DATE)) END_DATE_1167,
, Y.FLOAT_CYC)) FLOAT_CYC_1167,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1168,
, Y.BEGIN_DATE)) BEGIN_DATE_1168,
, Y.END_DATE)) END_DATE_1168,
, Y.FLOAT_CYC)) FLOAT_CYC_1168,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1169,
, Y.BEGIN_DATE)) BEGIN_DATE_1169,
, Y.END_DATE)) END_DATE_1169,
, Y.FLOAT_CYC)) FLOAT_CYC_1169,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1170,
, Y.BEGIN_DATE)) BEGIN_DATE_1170,
, Y.END_DATE)) END_DATE_1170,
, Y.FLOAT_CYC)) FLOAT_CYC_1170,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1171,
, Y.BEGIN_DATE)) BEGIN_DATE_1171,
, Y.END_DATE)) END_DATE_1171,
, Y.FLOAT_CYC)) FLOAT_CYC_1171,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1172,
, Y.BEGIN_DATE)) BEGIN_DATE_1172,
, Y.END_DATE)) END_DATE_1172,
, Y.FLOAT_CYC)) FLOAT_CYC_1172,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1173,
, Y.BEGIN_DATE)) BEGIN_DATE_1173,
, Y.END_DATE)) END_DATE_1173,
, Y.FLOAT_CYC)) FLOAT_CYC_1173,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1174,
, Y.BEGIN_DATE)) BEGIN_DATE_1174,
, Y.END_DATE)) END_DATE_1174,
, Y.FLOAT_CYC)) FLOAT_CYC_1174,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1175,
, Y.BEGIN_DATE)) BEGIN_DATE_1175,
, Y.END_DATE)) END_DATE_1175,
, Y.FLOAT_CYC)) FLOAT_CYC_1175,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1176,
, Y.BEGIN_DATE)) BEGIN_DATE_1176,
, Y.END_DATE)) END_DATE_1176,
, Y.FLOAT_CYC)) FLOAT_CYC_1176,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1177,
, Y.BEGIN_DATE)) BEGIN_DATE_1177,
, Y.END_DATE)) END_DATE_1177,
, Y.FLOAT_CYC)) FLOAT_CYC_1177,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1178,
, Y.BEGIN_DATE)) BEGIN_DATE_1178,
, Y.END_DATE)) END_DATE_1178,
, Y.FLOAT_CYC)) FLOAT_CYC_1178,
, Y.FIR_SCH_ID)) FIR_SCH_ID_1179,
, Y.BEGIN_DATE)) BEGIN_DATE_1179,
, Y.END_DATE)) END_DATE_1179,
, Y.FLOAT_CYC)) FLOAT_CYC_1179,
Y.ALL_SECTION,
Y.ALL_SECTION_BEGIN_DATE,
Y.ALL_SECTION_BEGIN_DATE2,
Y.GRAND_SEC
FROM (SELECT FSI.PROJ_NO,
FSI.SPCID,
FSI.STANDA_SCHEDULE_NODE_ID,
SSN.NODE_NAME,
SSN.NODE_SEQ,
FSI.BEGIN_DATE,
FSI.END_DATE,
FSI.FLOAT_CYC,
FSI.ALL_SECTION,
FSI.ALL_SECTION_BEGIN_DATE,
FSI.ALL_SECTION_BEGIN_DATE2,
FSI.FIR_SCH_ID,
FSI.GRAND_SEC
FROM FIRST_SCHEDULE_INFO_VIEW FSI
LEFT JOIN STANDA_SCHEDULE_NODE SSN
ON SSN.STANDA_SCHEDULE_NODE_ID =
FSI.STANDA_SCHEDULE_NODE_ID
) Y
GROUP BY Y.PROJ_NO,
Y.SPCID,
Y.ALL_SECTION,
Y.ALL_SECTION_BEGIN_DATE,
Y.GRAND_SEC,
Y.ALL_SECTION_BEGIN_DATE2)
后台逻辑,拼接Sql语句
string ssnSql = string.Format("SELECT T.* FROM STANDA_SCHEDULE_NODE T WHERE T.STANDA_SCHEDULE_ID = {1} AND T.IS_DEL = '8' {0} ORDER BY T.NODE_SEQ", StringUtil.isNotNullOrBlank(ssnIds) ? "AND T.STANDA_SCHEDULE_NODE_ID IN (" + ssnIds.Replace(DbUtil.colSplit, ',') + ")" : "", PlanUtil.FirstScheduleS);
DataTable ssndt = DbUtil.QueryDT(ssnSql);
StringBuilder sb = new StringBuilder();
)
{
List<Standa_Schedule_Node> ssnList = BeanUtil.ToEntity<Standa_Schedule_Node>(ssndt);
foreach (Standa_Schedule_Node ssn in ssnList)
{
sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.FIR_SCH_ID)) FIR_SCH_ID_{0},", ssn.Standa_Schedule_Node_Id));
sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.BEGIN_DATE)) BEGIN_DATE_{0},", ssn.Standa_Schedule_Node_Id));
sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.END_DATE)) END_DATE_{0},", ssn.Standa_Schedule_Node_Id));
sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.FLOAT_CYC)) FLOAT_CYC_{0},", ssn.Standa_Schedule_Node_Id));
sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.E_BEGIN_DATE)) E_BEGIN_DATE_{0},", ssn.Standa_Schedule_Node_Id));
sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.E_END_DATE)) E_END_DATE_{0},", ssn.Standa_Schedule_Node_Id));
}
}
string conditionSql = "";
conditionSql = sb.ToString();
string querySql = @"SELECT {2}
FROM (SELECT Y.PROJ_NO,
Y.SPCID,
{0} Y.ALL_SECTION,
Y.ALL_SECTION_BEGIN_DATE,
Y.ALL_SECTION_BEGIN_DATE2,
Y.GRAND_SEC
FROM (SELECT FSI.PROJ_NO,
FSI.SPCID,
FSI.STANDA_SCHEDULE_NODE_ID,
SSN.NODE_NAME,
SSN.NODE_SEQ,
FSI.BEGIN_DATE,
FSI.END_DATE,
FSI.E_BEGIN_DATE,
FSI.E_END_DATE,
FSI.FLOAT_CYC,
FSI.ALL_SECTION,
FSI.ALL_SECTION_BEGIN_DATE,
FSI.ALL_SECTION_BEGIN_DATE2,
FSI.FIR_SCH_ID,
FSI.GRAND_SEC
FROM FIRST_SCHEDULE_INFO_VIEW FSI
LEFT JOIN STANDA_SCHEDULE_NODE SSN
ON SSN.STANDA_SCHEDULE_NODE_ID =
FSI.STANDA_SCHEDULE_NODE_ID {1}) Y
GROUP BY Y.PROJ_NO,
Y.SPCID,
Y.ALL_SECTION,
Y.ALL_SECTION_BEGIN_DATE,
Y.GRAND_SEC,
Y.ALL_SECTION_BEGIN_DATE2)";
if (StringUtil.isNotNullOrBlank(v.Page) && v.Page != "-1")
{
;
v.Dt = DbUtil.Query(String.Format(querySql, conditionSql, DbUtil.WHEREOTO + v.getCondition(), StringUtil.nullOrBlankTOStr(v.DFields, "*")), v.Start, v.Limit, ref total);
v.Total = total;
}
else
{
v.Dt = DbUtil.QueryDT(string.Format(querySql, conditionSql, DbUtil.WHEREOTO + v.getCondition(), StringUtil.nullOrBlankTOStr(v.DFields, "*")));
}
return v.Dt;
Oracle Decode函数用法,可参考:https://www.cnblogs.com/Lightning-Kid/p/3954202.html
extjs 动态加载列表,优化思路的更多相关文章
- golang动态加载原生代码思路
golang动态加载原生代码思路(非plugin,非so文件.使用mmap形式运行机器码,可释放) 1.用go tool objdump,可以看到任意函数的机器码.汇编指令.偏移.(go源码下面有一个 ...
- 关于实现Extjs动态加载类的方式实现
Extjs4以前的版本没有动态加载类的方式,这样开发程序的时候加载很多的js会导致加载变慢,由于本人一直使用extjs3的版本进行开发,于是简单实现了一个动态加载类的管理器,使用方式与extjs4的方 ...
- Extjs-树 Ext.tree.TreePanel 动态加载数据
先上效果图 1.说明Ext.tree.Panel 控件是树形控件,大家知道树形结构在软件开发过程中的应用是很广泛的,树形控件的数据有本地数据.服务器端返回的数据两种.对于本地数据的加载,在extjs的 ...
- shiro不重启动态加载权限
最近一朋友让我帮他做一个后台权限管理的项目.我就在我原来的项目加加改改但是还是不理想,查了不少资料也走了不了弯路...... shiro基本的配置我就不多说了这个很简单自己查查资料就完成----下面是 ...
- JQuery加载列表实现动画滚动(自上而下挤)
这个例子是jquery动态加载列表,并通过定时刷新,实现其循环滚动效果的一个例子. 1.HTML代码: <div class="fake-table"> <li ...
- ExtJs 4.2.1 复选框数据项动态加载(更新一下)
最近在做博客项目,后台管理用的是ExtJs4.2.1版本,因为是初学所以在使用的时候也遇到不少的这样或那样的问题,也写了不少这方面的博客,今天要写的博客是关于复选框数据项动态的加载功能,以前也没用过, ...
- 移动端性能优化动态加载JS、CSS
JS CODE (function() { /** * update: * 1.0 */ var version = "insure 1.1.0"; var Zepto = Zep ...
- ExtJs中动态加载机制研究(转)
觉得写的太好了,怕弄丢了,转一下:http://extjs.org.cn/node/659 昨天我们team对于extjs的动态加载机制做了些深入研究,这里先share下controller加载的结果 ...
- ExtJs 通过分析源代码解决动态加载Controller的问题
通过分析源代码解决动态加载Controller的问题 最近在研究ExtJs(4.2.0)的MVC开发模式,具体Extjs的MVC如何使用这里不解释,具体参见ExtJs的官方文档.这里要解决的问题是如何 ...
随机推荐
- CQRS+ES项目解析-Diary.CQRS
在<当我们在讨论CQRS时,我们在讨论些神马>中,我们讨论了当使用CQRS的过程中,需要关心的一些问题.其中与CQRS关联最为紧密的模式莫过于Event Sourcing了,CQRS与ES ...
- 函数式响应式编程 - Functional Reactive Programming
我们略过概念,直接看函数式响应式编程解决了什么问题. 从下面这个例子展开: 两个密码输入框,一个提交按钮. 密码.确认密码都填写并一致,允许提交:不一致提示错误. HTML 如下: <input ...
- Vue学习笔记:提升开发效率和体验的常用工具
Vetur 用途: 语法高亮 标签补全,模板生成 Lint检查 格式化 vs code环境配置文件 文件-->首选项-->搜索veture(找不到需要自行安装)-->在setting ...
- iOS:bugly符号表上传
https://blog.csdn.net/weixin_38633659/article/details/81667721 这个篇文章已经讲得足够清楚 而且官方的文档也写得很好(注意官方网站上的文档 ...
- SpringBoot Restful Crud
一个简单的Restful Crud实验 默认首页的访问设置: // 注册 自定义的mvc组件,所有的WebMvcConfigurer组件都会一起起作用 @Bean public WebMvcConfi ...
- python高阶函数——map/reduce
python 内置了map()和reduce()函数 1.map()函数 map()函数接收两个参数,一个是函数,一个是可迭代对象Iterable,map将传入的函数依次作用于序列的每一个元素.并把结 ...
- IPIP.net识别客户端真实访问地址,具体到国家,省,市
这个IP库实测还是比较准确的,免费版的可以具体到国内城市,国外只能到国家名称,免费版的自己定期更新Ip数据库即可. 以下为C#调用代码 class Program { static void Main ...
- MVVM解析
闲来无事看到了一个关于Vue的MVVM的简单讲解,觉得写得不错,做个分享. 文章地址 https://github.com/DMQ/mvvm 文章内容我就不贴出,比较简洁明了,我记录一下我的一些思考总 ...
- Dynamics 365 Customer Enagement中的更改跟踪(change tracking)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- redis5.0.0功能介绍以及主从集群、哨兵搭建
这两天突然想起redis,索性就再尝试一下搭建最新版本的redis,过程有点艰辛呀,记录一下,供自己和大家今后搭建做参考. 一.为什么用Redis? 我自己总结了一下: 1.基于内存实现的key-va ...