同事开发的软件系统采用Easyui做的前台界面,当业务变得比较复杂之后,展示效果就变得很慢,于是我开始了原因的排查,现在已经找到了具体的原因,所以拿出来与大家一起分享调试过程。

  既然调试的是前端,那么我们就要将前端和后端分离,前端按格式返回数据,由于前端使用了iframe嵌套,那么我们需要在通过权限验证之后,直接打开iframe的src,带上对应的参数,再找到里面具体的执行JS代码。

  由于后端使用了WebApi,返回的是XML格式,限制被直接查看,所以需要在Global.asax中添加一段代码:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

  可以看出这是Clear方法,它清除了系统的XML格式化支持,系统默认的格式化支持是XML、JSON,清除了第一个,那么就剩下第二个,这样我们就能顺利拿到后端返回的JSON数据了。

有了后端返回的数据,我们就可以重新起一个项目,直接从后端返回它,可以减少调试原来系统的步骤。下面就是调试前端了。

  引用完毕js脚本,一切准备就绪。忽然发现jquery.easyui.min.js是压缩和混淆过的,这下有些犯难了,在高手的指点下,发现了一个可以格式化JS的网站 http://tool.oschina.net/codeformat/js/ 。将jquery.easyui.min.js格式化成了可以查看的格式,但是混淆是没有办法的。

  通过Chrome自带的Network调试发现,有一个datagrid请求的数据已经在后台生成,但是Content Download就是特别长,如图,12.17s,着实让人难受。

  后来发现有多个datagrid在同时刷新数据,因为js是单线程的,其他的刷新代码在运行的时候,这里只能进入等待。

  下面来逐个datagrid调试,也许是共性问题呢?!

  对着被格式化的easyui框架代码,代码如图:

这样看上去就清晰了很多,分别对function的内容最前面添加console.time('function名称'),最后面添加console.timeEnd('function名称')。经过调试运行后定位到运行速度较慢的,再一步一步的往下挖,最终挖到了fitColumns有关的代码:

     if (_65c) {
_5cd(_65c);
$(_65b).datagrid("fitColumns");
} else {
var _65e = false;
var _65f = _613(_65b, true).concat(_613(_65b, false));
for (var i = ; i < _65f.length; i++) {
var _65c = _65f[i];
var col = _614(_65b, _65c);
if (col.auto) {
_5cd(_65c);
_65e = true;
}
}
if (_65e) {
$(_65b).datagrid("fitColumns");
}
}

看到了_65e=true;可是初始配置里写了fitColumns:false呀,这是怎么回事呢,再翻开配置代码一看,如图:

A列和B列是没有设置width,导致datagrid在渲染之前要重新计算width,即使是隐藏列,这么做大概是为了让系统显示隐藏列的时候不用再次计算吧。

添加上width之后,datagrid运行速度立马快了,Content Download变得很小,问题定位成功,Bug解除。

关于easyui展示慢的Debug的更多相关文章

  1. Asp.Net MVC 实现将Easy-UI展示数据下载为Excel 文件

    在一个项目中,需要做一个将Easy-UI界面展示数据下载为Excel文件的功能,经过一段时间努力,完成了一个小Demo.界面如下: 但按下导出Excel后,Excel文件将会下载到本地,在office ...

  2. EasyUI的增删查改(后台ASP.NET)

    转自:http://www.cnblogs.com/dedeyi/archive/2013/04/22/3035057.html 某某人曾经跟我说,你们做系统不就是增删查改吗. 是啊,很多时候我们就是 ...

  3. Debug outlook add-in (office.js) 小技巧

    这几天在使用office.js 做outlook add-in的时候出现了一个问题: 不知道运行时去调试. 这里给大家介绍两个调试add-in 的方法. office365 其他软件 add-ins ...

  4. 使用IDEA+vue.js+easyUI的demo

    最近,随便写了几个开发的小例子,自己总结下,留个纪念. 例子1:使用EasyUI做了一个简单界面,服务器和客户端在一起. @Controller @RequestMapping("/demo ...

  5. 【转】Xcode概览:调试应用程序

    原文转自:http://www.cocoachina.com/ios/20141128/10358.html 本文由CocoaChina翻译组成员Creolophus(github主页)翻译自苹果官方 ...

  6. 基于OpenCV做“三维重建”(0)-- OpenCV3.2+VIZ6.3.0在vs2012下的编译和使用

    一.问题提出         ViZ对于显示3维的效果图来说,非常有帮助:我在使用OpenCV进行双目测距的过程中,有一些参数希望能够通过可视化的方法显示出来,所以参考了这方面相关的资料.做了一些实验 ...

  7. PHP错误处理函数register_shutdown_function

    当程序在线上运行时,如果遇到BUG,想不在前端输出错误信息,同时能及时邮件通知开发者,register_shutdown_function函数就可以派上用场了. 注册一个会在脚本执行完成或者 exit ...

  8. IBM InfoSphere DataStage 8.1 DataStage Job 开发具体解释

    简单介绍 DataStage 使用了 Client-Server 架构,server端存储全部的项目和元数据,client DataStage Designer 为整个 ETL 过程提供了一个图形化的 ...

  9. [转]Xcode概览:调试应用程序

    原文网址: blog.csdn.net/fhbystudy/article/details/12856261 本文由CocoaChina翻译组成员Creolophus(github主页)翻译自苹果官方 ...

随机推荐

  1. ease,seae-in,ease-in-out,ease-out区别

    值 描述 linear 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1)).(匀速) ease 规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezi ...

  2. 四.jQuery源码解析之jQuery.fn.init()的参数解析

    从return new jQuery.fn.init( selector, context, rootjQuery )中可以看出 参数selector和context是来自我们在调用jQuery方法时 ...

  3. zoj-3410-Layton's Escape

    /* ZOJ Problem Set - 3410Layton's Escape ----------------------------------------------------------- ...

  4. EF Attach时报错

    ASP.NET MVC项目 Repository层中,Update.Delete总是失败 another entity of the same type already has the same pr ...

  5. J.U.C 整体认识

    深入浅出 Java Concurrency (1) : J.U.C的整体认识 去年年底有一个Guice的研究计划,可惜由于工作“繁忙”加上实际工作中没有用上导致“无疾而终”,最终只是完成了Guice的 ...

  6. ArrayList实现

    数组实现父类:AbstractList接口:List,RandomAccess,Cloneable,Serializable字段://默认容量private static final int DEFA ...

  7. ETL 脚本任务

    Public Sub Main()        '        ' Add your code here        '        Dim sbWA As New StringBuilder ...

  8. 7.25 11figting!

    TEXT 76 Start of the long march 而今迈步从头越(陈继龙编译) Nov 16th 2006 | BEIJING AND HONG KONG From The Econom ...

  9. MySQL学习2---索引

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引, ...

  10. WPF设置Window的数据上下文(DataContext)为自身

    WPF设置Window的数据上下文(DataContext)为自身的XAML: DataContext="{Binding RelativeSource={RelativeSource Se ...