758 Star 6.5K Fork 1.4K

GVP萧明 / knife4j

 / 详情

调用接口后,返回1万多行数据的json,造成页面卡死

已完成
创建于  
2020-08-06 21:25

接口返回json数据,格式化后有一万多行,造成页面卡死,swagger和bootstrap-ui没有这个问题

评论 (7)

liren怎挽 创建了任务
liren怎挽 关联仓库设置为萧明/knife4j
展开全部操作日志

这不是正常吗?

@凤凰院大白 也不算太正常,后面再看看,有没有优化的空间

Swagger官方Ui能显示很正常,他就没有格式化处理,一个rawtext直接显示

其实要改也容易,就是判断数据量的大小,数据太大就不格式化显示了

@凤凰院大白 也不算太正常,后面再看看,有没有优化的空间

@萧明 当个个普通文本显示那确实正常。

萧明 添加了
 
enhancement
标签
萧明 任务状态待办的 修改为进行中

问题原因找到了,主要有两点:

1、当返回大数据量时,组件中会重新计算ace编辑器的高度,然后进行重新赋值,代码如下:

 resetEditorHeight() {
      var that = this;
      //重设高度
      setTimeout(() => {
        var length_editor = that.editor.session.getLength();
        if (length_editor == 1) {
          length_editor = 15;
        }
        if (length_editor < 15) {
          if (that.debugResponse) {
            length_editor = 30;
          } else {
            length_editor = 15;
          }
        }
        if (length_editor > 20) {
          if (!that.debugResponse) {
            length_editor = 20;
          }
        }
        var rows_editor = length_editor * 16;
        //此处重置高度
        that.editorHeight = rows_editor;
      }, 10);
    }

大数据量时,重置ace的editorHeight属性会造成卡死

2、我们给ace编辑器加入了一个辅助开发者的功能,在右侧对每一个属性进行文档说明显示,这个也会造成当大数据返回时,渲染接口属性说明时计算不过来.如下图的效果:
输入图片说明

针对上面2点,在新版本中的解决方案如下

针对第1点,给ace设置最大重置高度2000,当通过返回回来的计算文本超过最大高度时,默认设置最大高度

var rows_editor = length_editor * 16;
if(rows_editor>2000){
     rows_editor=2000;
}
that.editorHeight = rows_editor;

针对第二点,当返回的数据量行数超过200行时,不显示文档的右侧属性说明

showEditorFieldDescription(p) {
  var that = this;
  if(KUtils.checkUndefined(p)){
    if(parseInt(p)<=200){
      //如果超过200行,不显示属性的字段说明
      //需要延时1s处理
      setTimeout(() => {
        that.showEditorFieldWait();
      }, 100);
    }
  }
  
}

2.0.5 已发布

萧明 任务状态进行中 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
431003 xuwangcheng 1578923592 118100 xiaoym 1578918321
Java
1
https://gitee.com/xiaoym/knife4j.git
git@gitee.com:xiaoym/knife4j.git
xiaoym
knife4j
knife4j

搜索帮助

14c37bed 8189591 565d56ea 8189591