Skip to content

Commit c5666f7

Browse files
authored
Merge pull request #185 from mbuk/fix
Fix #153 - Vanilla debounce and associated changes to improve performance
2 parents 1daf77a + cb8962a commit c5666f7

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

src/lib/Room/Room.vue

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,6 @@
236236
<textarea
237237
v-show="!file || imageFile || videoFile"
238238
ref="roomTextarea"
239-
v-model="message"
240239
:placeholder="textMessages.TYPE_MESSAGE"
241240
class="vac-textarea"
242241
:class="{
@@ -338,9 +337,22 @@ import Message from '../Message/Message'
338337
339338
import filteredUsers from '../../utils/filter-items'
340339
import Recorder from '../../utils/recorder'
340+
341341
const { detectMobile, iOSDevice } = require('../../utils/mobile-detection')
342342
const { isImageFile, isVideoFile } = require('../../utils/media-file')
343343
344+
const debounce = (func, delay) => {
345+
let inDebounce
346+
return function() {
347+
const context = this
348+
const args = arguments
349+
clearTimeout(inDebounce)
350+
inDebounce = setTimeout(() =>
351+
func.apply(context, args)
352+
, delay)
353+
}
354+
}
355+
344356
export default {
345357
name: 'Room',
346358
components: {
@@ -456,6 +468,9 @@ export default {
456468
},
457469
458470
watch: {
471+
message(val) {
472+
this.$refs.roomTextarea.value = val
473+
},
459474
loadingMessages(val) {
460475
if (val) {
461476
this.infiniteState = null
@@ -512,7 +527,7 @@ export default {
512527
this.newMessages = []
513528
const isMobile = detectMobile()
514529
515-
window.addEventListener('keyup', e => {
530+
this.$refs.roomTextarea.addEventListener('keyup', debounce((e) => {
516531
if (e.key === 'Enter' && !e.shiftKey && !this.fileDialog) {
517532
if (isMobile) {
518533
this.message = this.message + '\n'
@@ -524,10 +539,11 @@ export default {
524539
525540
this.updateFooterList('@')
526541
this.updateFooterList(':')
527-
})
542+
}), 50)
528543
529544
this.$refs['roomTextarea'].addEventListener('click', () => {
530545
if (isMobile) this.keepKeyboardOpen = true
546+
531547
this.updateFooterList('@')
532548
this.updateFooterList(':')
533549
})
@@ -898,11 +914,12 @@ export default {
898914
setTimeout(() => element.classList.remove('vac-scroll-smooth'))
899915
}, 50)
900916
},
901-
onChangeInput() {
902-
this.keepKeyboardOpen = true
903-
this.resizeTextarea()
904-
this.$emit('typing-message', this.message)
905-
},
917+
onChangeInput: debounce(function(e) {
918+
this.message = e.target.value
919+
this.keepKeyboardOpen = true
920+
this.resizeTextarea()
921+
this.$emit('typing-message', this.message)
922+
}, 100),
906923
resizeTextarea() {
907924
const el = this.$refs['roomTextarea']
908925

0 commit comments

Comments
 (0)