-
-
Notifications
You must be signed in to change notification settings - Fork 3.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Form 性能优化意见征集 #1049
Comments
还有hideRequiredMark这个属性不起效果 |
這個已經發到正式版本了嗎?可以使用嗎 |
很好奇,官网的form页面中input就不卡,我分析过是我的页面里存在大量的select,有很多的options,当选择select后,再去进行input的操作,就会变得很卡,用了上述api,但是没有效果 |
@QifanChan 我的是输入就卡了。特别是火狐浏览器,输入中文时,谷歌相对好点。 |
还有一种情况就是一个页面有多个 form, 多个 form 的表单数量合起来多也会卡,单个 form 里的表单的数量少没用。还打算拆分多个 form 看能不能去除这个影响 |
拆组件可以吗?但是页面还是一个,通过不同组件组合起来
|
组件多的话,尤其是form,input输入确实卡,我现在的临时解决方案是只能自己基于ant的input样式,单独写一个简化版的input组件,然后debounce延时执行this.$emit('input', event),不会频繁触发input事件。目前来看,实际项目中效果还好,不会很卡。 |
我目前也是这么做的,但是会有一个点,在页面大量存在select的时候,options比较多的时候,input照样会卡顿,你可以试一下
|
我这边目前还好,如果options太多的话,我会直接重写整个select组件(减少组件嵌套使用、精简逻辑等等),这样也能进一步提升性能。你可以试试。 |
听你这样说,那把 |
不会停顿,只是同步数据给调用方的时候有延迟(这里存在隐患,如果在延时时间内,你是拿不到最新的值)。 |
不治本啊朋友。。。
|
个人觉得Form表单还是改成和element还有iview一样的直接表单数据驱动比较好,现在单独封装在表单容器中,多了很多概念,而且使用起来好麻烦 |
页面 同时 包含 a-from 和 a-table 组件时,a-form 里输入数据,会导致 a-table里的数据重新渲染,这个就导致卡了... 。 如 下面,只要在a-form的任意控件里输入或值变化,都会导致 a-table 数据重新渲染,如果 a-table数据稍微多点(>50),就卡的很
|
from 数据变化,不要重新渲染其它控件 |
从Jquery时代到现在,处理表单,验证表单和获取表单内容都是一场恶梦. <script>
data(){
formFields:[
{
label: '头像',
name: 'avatar',
render(h,src, form){
return <Avatar src={src}/>
}
},
{
label: '姓名',
name: 'name',
default:'张三',
rules: [{
required: true,
message: '姓名不能为空',
}],
render(h){
return <Input placeholder="真实姓名" />
}
}
];
}
methods:{
onSubmit(formData){
console.log(formData);
// ...todo
}
onReset(){
}
}
</script>
<template>
<my-form
:fields="formFields"
@submit="onSubmit"
@reset="onReset"
>
<button slot="submit" >提交</button>
<button slot="reset" >重置</button>
</my-form>
</template> |
。。。你这个貌似是从antdesign的react版本拿过来的
|
哦,我只是举个"配置表单"的例子. 表单卡顿一般出现在输入框类型,如input,textArea.富文本.这种类型的组件需要自己写渲染逻辑,而不是使用react或vue自带的双向绑定逻辑.简单点就是对比 原生input的value值和data里的值是否一致,,一致则不触发渲染和input事件.尽量不要使用延时渲染.延时渲染会导致数据不干净. |
你加入一些select试试,然后options在200以上
|
😌. 难受. 项目都做完了, 才看到这个 issue. |
好提议
|
selfUpdate效果很明显 |
1.3.17-beta.1 已发布 欢迎体验 selfUpdate设置 如果你并不精通 Vue,并不建议使用 selfUpdate,如果出现性能问题,可以尝试这把 Form 相关的业务独立到一个单独的组件中,减少组件渲染的消耗。 |
very good! |
|
看写法你是重复性使用一些东西了,造成了现在的困扰,建议好好看下他们给的demo哈
|
好的,谢谢! |
方便来个vx吗?想请教下。 wojia957321 |
解决了吗?我加了selfUpdate没效果。。 |
难道是我直接用v-model绑定的原因吗? |
不要混用
|
混用什么?页面内的表单控件都是直接用v-model的 |
表单就不建议用v-model, 用v-model的话, 建议更新1.5.0使用FormModel |
@yinxianwei FormModel 目前并不支持 selfUpdate,所以同时使用 FormModel 和 v-model 还是会卡顿的 |
同样没搞懂混用的意思,我是这样写的: <a-form><a-form-item>...input v-model...</a-form-item></a-form> 然后加 |
页面中同时有FormModel和Table,改变FormModel中Input组件,table也会渲染,而且没有selfUpdate,table数据多了就卡的飞起 |
1.6.1版本,添加selfUpdate无效。整个Form都在刷新 |
这貌似是vue 函数式组件的性能问题 |
解决了就好了
|
通过key查找formItem的时候直接使用了Object.keys来获取键,只能拿到第一层的key,导致全部失效 提交了pr来修复 #2999 |
能否支持 Form中嵌套table 支持多行数据动态验证 |
真的好卡嘤 |
目前遇到的情况是,当输入框遇上table就有输入卡顿的问题 |
都2021年了,这个还在这放着呢! |
我是 在vue 里面的 flushSchedulerQueue 方法 中处理的,性能完美解决 一点不卡 。 |
|
性能慢的问题原因是: 会触发其它 component 的 watchers ,我的做法是: 1 首先在vue 中 自定义 一个全局函数 tempCloseCallUpdatedHooks // Sort queue before flush. // do not cache length because more watchers might be pushed // keep copies of post queues before resetting state resetSchedulerState(); // call component updated and activated hooks // devtool hook 3 node_modules\ant-design-vue\es\input\Input.js 找到watch 函数 增加 this.tempCloseCallUpdatedHooks() 完成以上性能问题解决,唯一的问题是 你的页面内 将无法使用 watch 来监听的 input 绑定的value |
@HanPengzhou 单独开issue吧 |
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
What problem does this feature solve?
Form组件过多时的性能问题
现在的 Form 组件里的任一 FormItem 变化都会导致 Form 所在的上下文触发更新,当上下文中组件过多时,会变得卡顿。
现在添加 :selfUpdate="true" 属性,将FormItem 变为独立更新,避免整个组件刷新。同样也带来了新的问题:如有其它依赖该表单项值的地方,则不可以使用。
What does the proposed API look like?
The text was updated successfully, but these errors were encountered: