I decided to use wysiwyg editor on my page. I'm using simple two-way data binding via v-model="text"
and simpy output <div v-html="text"></div>
. I'm beginner in vuejs, but I need to ask this question:
Why this is running so slow? It doesn't matter if it is quill editor/medium-editor/vueditor
.
Every time I type new letter, the delay is very noticable and user experience is poor. My console gives a messages:
[Violation] 'message' handler took 199ms
and sometimes
[Violation] Added synchronous DOM mutation listener to a 'DOMNodeInserted'
event. Consider using MutationObserver to make the page more responsive.
It's even worse if I bind it into computed property (delays up to 250ms)- which I will need to do soon. And I also need to do two-way data binding in my case.
What am I doing wrong? How could I speed up typing process annd improve typing experience? My component has about 1,5k lines. Could that be the case?
edit:
I've break my 1,5k lines code component into separate part for editing and this already improve web speed from about 250 ms to 50-60ms, but wysiwyg editor and two-way data binding remain still noticebly slow.
edit2: code (using vuetify)
Example1 (mid-fast):
<v-text-field
label="Write something"
v-model="text"
counter
max="120"
rows="3"
full-width
multi-line
single-line
></v-text-field>
<div v-html="textComputed"></div>
data () {
return {
text: ''
}
},
computed: {
textComputed() {
//using computed to add <li> tags
return '<li>' + this.text.replace(/\n/g, "<br /></li><li>") + '</li>'
}
}
Example2 (slow):
<quill-editor
v-model="text"
:options="editorOptionProTemplate"
>
</quill-editor>
<div v-html="textComputed"></div>
data () {
return {
text: ''
}
},
computed: {
//using computed for many variants for styling output in web (here just adding <b> tag)
textComputed() {
return '<b>' + this.text + '</b>'
}
}