mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Combine messages to reduce rendering time when possible (#1309)
This commit is contained in:
@@ -131,6 +131,7 @@ export class QueryComponent extends GridParentComponent implements OnInit, OnDes
|
|||||||
private messages: IMessage[] = [];
|
private messages: IMessage[] = [];
|
||||||
private messageStore: IMessage[] = [];
|
private messageStore: IMessage[] = [];
|
||||||
private messageTimeout: number;
|
private messageTimeout: number;
|
||||||
|
private lastMessageHandleTime: number = 0;
|
||||||
private scrollTimeOut: number;
|
private scrollTimeOut: number;
|
||||||
private resizing = false;
|
private resizing = false;
|
||||||
private resizeHandleTop: string = '0';
|
private resizeHandleTop: string = '0';
|
||||||
@@ -248,13 +249,28 @@ export class QueryComponent extends GridParentComponent implements OnInit, OnDes
|
|||||||
|
|
||||||
handleMessage(self: QueryComponent, event: any): void {
|
handleMessage(self: QueryComponent, event: any): void {
|
||||||
self.messageStore.push(event.data);
|
self.messageStore.push(event.data);
|
||||||
clearTimeout(self.messageTimeout);
|
// Ensure that messages are updated at least every 10 seconds during long-running queries
|
||||||
|
if (self.messageTimeout !== undefined && Date.now() - self.lastMessageHandleTime < 10000) {
|
||||||
|
clearTimeout(self.messageTimeout);
|
||||||
|
} else {
|
||||||
|
self.lastMessageHandleTime = Date.now();
|
||||||
|
}
|
||||||
self.messageTimeout = setTimeout(() => {
|
self.messageTimeout = setTimeout(() => {
|
||||||
self.messages = self.messages.concat(self.messageStore);
|
while (self.messageStore.length > 0) {
|
||||||
self.messageStore = [];
|
let lastMessage = self.messages.length > 0 ? self.messages[self.messages.length - 1] : undefined;
|
||||||
|
let nextMessage = self.messageStore[0];
|
||||||
|
// If the next message has the same metadata as the previous one, just append its text to avoid rendering an entirely new message
|
||||||
|
if (lastMessage !== undefined && lastMessage.batchId === nextMessage.batchId && lastMessage.isError === nextMessage.isError
|
||||||
|
&& lastMessage.link === nextMessage.link && lastMessage.link === undefined) {
|
||||||
|
lastMessage.message += '\n' + nextMessage.message;
|
||||||
|
} else {
|
||||||
|
self.messages.push(nextMessage);
|
||||||
|
}
|
||||||
|
self.messageStore = self.messageStore.slice(1);
|
||||||
|
}
|
||||||
self._cd.detectChanges();
|
self._cd.detectChanges();
|
||||||
self.scrollMessages();
|
self.scrollMessages();
|
||||||
}, 10);
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
handleResultSet(self: QueryComponent, event: any): void {
|
handleResultSet(self: QueryComponent, event: any): void {
|
||||||
|
|||||||
Reference in New Issue
Block a user