论坛首页 Web前端技术论坛

jquery easyui性能很差,项目差点被害死

浏览 118228 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-09-09  
zoven 写道
IE6是SP3的吗?不是的话,XP补丁打到SP3试试

已经换掉linkbutton了,也没有必要再关注xp ie6问题了!
0 请登录后投票
   发表时间:2011-09-09   最后修改:2011-09-09
zhongxuchen 写道
云淡云舒 写道
angelhau 写道
云淡云舒 写道

第一,楼主不怎么会用easyui,EasyUI的Tree形式是[childrn[]]形式,但是它具有ajax自动请求功能,在一个,linkbutton只不过是给添加了写css样式,添加样式影响到你的性能,这个有点不靠谱。

onBeforeLoad : function(row, param) {
	if (row) {
//chilren没有数据时,url地址不改变
 $(this).tree('options').url = 'xxx';
	} else {
//children为空是,ajax请求
	$(this).tree('options').url = 'xxx';
									}
		}


这样的树是一个动态加载的树。配合缓存就是一个很好的树,楼主为啥就说他不好呢?至于什么兼容性问题,好多UI都存在,而EASYUI是基于Jquery的,我想Jquery在兼容性方面还做得很不错。

 

 

难道你这是在做异步tree? 如果是的话,那你就还是没有把tree的原理弄懂····

当节点有子节点的时候去请求子节点的数据,加载到树上,什么叫没有把tree的原理弄懂?,楼主的意思就是嫌使用children这种数据格式,每次加载都需要把整棵树加载进来,性能会非常低,使用上面的形式,加载的时候首先是加载根节点,点击根节点的时候再去请求下面的子节点。这样不好?EasyUI中的Demo提供了这个例子。比如说上面的代码,当row不为空,说明还有子节点,$(this).tree('options').url="xxx.Action?parentId="+row.id;请求Action获取节点下面的数据。你所说的Tree的原理是?愿闻其详。


真的服了你了,作为树应该考虑2点:

1、异步加载,点击一个节点取下一层

2、一次性加载,这个也是有应用场景的,不要只顾异步单层加载

考虑问题要完整,children这种模式一次性加载还得重新构造特定json数据格式,如果pid模式岂不更简单,你去看看jquery zTree2.6提供的模式,它有2种数据加载格式!

 

个人认为children这种数据格式(我不知道你有没有理解现在的children模式,如果多层树,json格式会children[ children[]],一层一层嵌套下去的!),而pid方式

数据是跟一般的表结构对应,开发起来更容易!

EasyUI两种方式都支持,第一,可以异步加载,第二,也可以一次性加载,不过一次性加载children格式看起来真的很混乱,而且如果树深度较大,这个简直就是灾难。从表结构来看,Pid的形式跟表一样,从对象来看,childen方式符合对象形式,你觉得呢?

比如说对象树的Bean形式,就像这样。

public class Tree implements Serializable {

private Integer id;

private String name;

private Set<Tree> children;

private Tree parent;

}

0 请登录后投票
   发表时间:2011-09-09  
佩服死你们了,银行系统还用easyui?学生玩玩可以,生产系统搞这不是玩死人,代码不开源,测试了下,速度太慢,搞搞页面就崩溃了
0 请登录后投票
   发表时间:2011-09-09  
云淡云舒 写道
zhongxuchen 写道
云淡云舒 写道
angelhau 写道
云淡云舒 写道

第一,楼主不怎么会用easyui,EasyUI的Tree形式是[childrn[]]形式,但是它具有ajax自动请求功能,在一个,linkbutton只不过是给添加了写css样式,添加样式影响到你的性能,这个有点不靠谱。

onBeforeLoad : function(row, param) {
	if (row) {
//chilren没有数据时,url地址不改变
 $(this).tree('options').url = 'xxx';
	} else {
//children为空是,ajax请求
	$(this).tree('options').url = 'xxx';
									}
		}


这样的树是一个动态加载的树。配合缓存就是一个很好的树,楼主为啥就说他不好呢?至于什么兼容性问题,好多UI都存在,而EASYUI是基于Jquery的,我想Jquery在兼容性方面还做得很不错。

 

 

难道你这是在做异步tree? 如果是的话,那你就还是没有把tree的原理弄懂····

当节点有子节点的时候去请求子节点的数据,加载到树上,什么叫没有把tree的原理弄懂?,楼主的意思就是嫌使用children这种数据格式,每次加载都需要把整棵树加载进来,性能会非常低,使用上面的形式,加载的时候首先是加载根节点,点击根节点的时候再去请求下面的子节点。这样不好?EasyUI中的Demo提供了这个例子。比如说上面的代码,当row不为空,说明还有子节点,$(this).tree('options').url="xxx.Action?parentId="+row.id;请求Action获取节点下面的数据。你所说的Tree的原理是?愿闻其详。


真的服了你了,作为树应该考虑2点:

1、异步加载,点击一个节点取下一层

2、一次性加载,这个也是有应用场景的,不要只顾异步单层加载

考虑问题要完整,children这种模式一次性加载还得重新构造特定json数据格式,如果pid模式岂不更简单,你去看看jquery zTree2.6提供的模式,它有2种数据加载格式!

 

个人认为children这种数据格式(我不知道你有没有理解现在的children模式,如果多层树,json格式会children[ children[]],一层一层嵌套下去的!),而pid方式

数据是跟一般的表结构对应,开发起来更容易!

EasyUI两种方式都支持,第一,可以异步加载,第二,也可以一次性加载,不过一次性加载children格式看起来真的很混乱,而且如果树深度较大,这个简直就是灾难。从表结构来看,Pid的形式跟表一样,从对象来看,childen方式符合对象形式,你觉得呢?

比如说对象树的Bean形式,就像这样。

 

public class Tree implements Serializable {

private Integer id;

private String name;

private Set<Tree> children;

private Tree parent;

}

 

其实我想说的是,你们都没弄清楚easyui的tree的异步到底是怎么做的。

 

easyui的tree天生就支持异步,你们都忽视了他的state属性。作者给出的编码demo http://www.jeasyui.com/tutorial/tree/tree2.php ,想必你们都没有看过,所以都是凭着自己一厢情愿的想法去实现了tree的异步。

 

tree 的异步主要是靠state 属性来控制的。当easyui的一个没有张开的节点,被点击张开的时候,

1.首先它会判断该节点下是否已经加载子节点

2.如果已经加载了子节点,就直接打开节点。如果没有,就会向后台发送一个请求,请求当前节点下面的子节点。这个是它默认的,请求的格式是tree配置中的url?id=当前节点的id 的形式,也就是你们所谓pid传到后台。

 

可看如下代码:

 

 

 

  • $id = isset($_POST['id']) ? intval($_POST['id']) : 0;  (判断是否传入id,为空就是跟节点)
  •   
  • include 'conn.php';  
  •   
  • $result = array();  
  • $rs = mysql_query("select * from nodes where parentId=$id");  
  • while($row = mysql_fetch_array($rs)){  (组装树对象)
  •     $node = array();  
  •     $node['id'] = $row['id'];  
  •     $node['text'] = $row['name'];  
  •     $node['state'] = has_child($row['id']) ? 'closed' : 'open';  (这一步是异步的关键。has_child判断是否有子节点)
  •     array_push($result,$node);  
  • }  
  •   
  • echo json_encode($result);  
  •   
  • function has_child($id){  
  •     $rs = mysql_query("select count(*) from nodes where parentId=$id");  
  •     $row = mysql_fetch_array($rs);  
  •     return $row[0] > 0 ? true : false;  
  • }  


  • 这是php写的,后台的实现代码并不多,java也同样是这样。
  • 前台就更简单了,简单到
  • $("#treeId").tree({url:'....'});
  • 或者html片段
  • <ul id="tt" class="easyui-tree"  
  •         url="tree2_getdata.php">  
  • </ul>

  • 更本就不需要自己在写一大堆的判断
  •  

    0 请登录后投票
       发表时间:2011-09-09  
    根源是在不开源上吧?有啥好说的
    0 请登录后投票
       发表时间:2011-09-09  
    云淡云舒 写道
    zhongxuchen 写道
    云淡云舒 写道
    angelhau 写道
    云淡云舒 写道

    第一,楼主不怎么会用easyui,EasyUI的Tree形式是[childrn[]]形式,但是它具有ajax自动请求功能,在一个,linkbutton只不过是给添加了写css样式,添加样式影响到你的性能,这个有点不靠谱。

    onBeforeLoad : function(row, param) {
    	if (row) {
    //chilren没有数据时,url地址不改变
     $(this).tree('options').url = 'xxx';
    	} else {
    //children为空是,ajax请求
    	$(this).tree('options').url = 'xxx';
    									}
    		}
    


    这样的树是一个动态加载的树。配合缓存就是一个很好的树,楼主为啥就说他不好呢?至于什么兼容性问题,好多UI都存在,而EASYUI是基于Jquery的,我想Jquery在兼容性方面还做得很不错。

     

     

    难道你这是在做异步tree? 如果是的话,那你就还是没有把tree的原理弄懂····

    当节点有子节点的时候去请求子节点的数据,加载到树上,什么叫没有把tree的原理弄懂?,楼主的意思就是嫌使用children这种数据格式,每次加载都需要把整棵树加载进来,性能会非常低,使用上面的形式,加载的时候首先是加载根节点,点击根节点的时候再去请求下面的子节点。这样不好?EasyUI中的Demo提供了这个例子。比如说上面的代码,当row不为空,说明还有子节点,$(this).tree('options').url="xxx.Action?parentId="+row.id;请求Action获取节点下面的数据。你所说的Tree的原理是?愿闻其详。


    真的服了你了,作为树应该考虑2点:

    1、异步加载,点击一个节点取下一层

    2、一次性加载,这个也是有应用场景的,不要只顾异步单层加载

    考虑问题要完整,children这种模式一次性加载还得重新构造特定json数据格式,如果pid模式岂不更简单,你去看看jquery zTree2.6提供的模式,它有2种数据加载格式!

     

    个人认为children这种数据格式(我不知道你有没有理解现在的children模式,如果多层树,json格式会children[ children[]],一层一层嵌套下去的!),而pid方式

    数据是跟一般的表结构对应,开发起来更容易!

    EasyUI两种方式都支持,第一,可以异步加载,第二,也可以一次性加载,不过一次性加载children格式看起来真的很混乱,而且如果树深度较大,这个简直就是灾难。从表结构来看,Pid的形式跟表一样,从对象来看,childen方式符合对象形式,你觉得呢?

    比如说对象树的Bean形式,就像这样。

     

    public class Tree implements Serializable {

    private Integer id;

    private String name;

    private Set<Tree> children;

    private Tree parent;

    }

     

    哈哈,不是你这个类好看的问题,我说的问题不是2种方式easyui是否支持的问题,都支持,但一次性加载累死程序员也叫支持,好方法叫支持、笨方法也叫支持,请关注问题的本质,简单才是美!

         现在我就要一次性加载,你告诉我你要怎么做,10层树!如果换成pid模式,是不是就一个sql就解决了,返回一个对象list!请去参看以下jquery zTree再说吧!

    0 请登录后投票
       发表时间:2011-09-09   最后修改:2011-09-09

    我们几个讨论的有点过头了。

    0 请登录后投票
       发表时间:2011-09-13  
    既然要给慢的老的客户机开发系统,你根本就不应该使用花俏的UI设计,这本身就是你们设计一开始定位的错误。

    0 请登录后投票
       发表时间:2011-09-14  
    我们目前也有这个问题,客户的浏览器版本普片都是IE6.0,但是需要的功能复杂、强交互。我们选的是ZKOSS,文档很少。几次重构后速度还是跟不上,页面的功能还是很复杂。。。。。。。。。。。。
    0 请登录后投票
       发表时间:2011-09-14  
    估计是楼主的使用问题
    0 请登录后投票
    论坛首页 Web前端技术版

    跳转论坛:
    Global site tag (gtag.js) - Google Analytics