javascript - 消息组件 super 慢

标签 javascript html arrays angular typescript

我有一个消息传递组件,可以与我系统中的其他用户一起编写消息。问题是,当我打开该组件时,网站速度变得非常慢,并且需要长达 15 秒的时间才能加载消息。我可以在代码中做哪些不同的事情来使其正常工作?

allMessages() {
    return this.messages.concat(this.uploadingMessages);
}
<ng-container #messageList *ngFor="let m of allMessages(); let i = index; trackBy: trackByMessageId">
    <div *ngIf="case !== null" [class.unread]="case.hasReadUntilTimestamp < m.timestamp && !m.sender.isMe && !m.setRead">


    <div class="newMessage">
        <div class="newMessage__line"></div>
        <div class="newMessage__line"></div>
    </div>

    <div class="row messageAndHeader line" *ngIf="allMessages()[i - 1]?.sender.id !== m.sender.id; else elseBlock">
    <div class="row messageInfo">
        <div class="profileImg">
            <img *ngIf="m.sender.profileImageUrl !== null" [src]="m.sender.profileImageUrl" />
 *ngIf="m.sender.profileImageUrl === null">
        </div>

最佳答案

在 Angular DOM 中,所有事件都会刷新,所以这里 allMessages() 将被重复调用,所以在 NgOnInit() 中执行此操作分配给一个变量,如下所示

ngOnInit(){
 this.allMesage = this.messages.concat(this.uploadingMessages);
}

并在 compoent.html 中修改代码如下

<ng-container #messageList *ngFor="let m of allMessage; let i = index; trackBy: trackByMessageId">

如果在进行 API 调用后填充消息,则添加异步管道,如下所示

<ng-container #messageList *ngFor="let m of allMessage | async; let i = index; trackBy: trackByMessageId">

并删除ngif中的调用方法

<div class="row messageAndHeader line" *ngIf="allMessage[i - 1]?.sender.id !== m.sender.id; else elseBlock">

如果是api调用,修改ngOnInit()中的代码如下

ngOnInit(){
apiCall.subscribe(data=>{
 this.allMesage = data.messages.concat(data.uploadingMessages);
},
error=>{
console.log(error)
})

关于javascript - 消息组件 super 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248649/

相关文章:

c - 如何在函数中返回字符串数组?

javascript - 使用自定义 HTML 而不是 URL 打开新选项卡

javascript - 哪种 Javascript 框架适用于数据驱动的 Web 应用程序?

html - 纯 HTML 中的彩色 SVG 在 React 中全黑。为什么?

html - 为什么 "\e034"出现在css中却没有创建对勾图标?

javascript - 在 JavaScript 中从 JSON 中删除具有重复数组成员的元素

arrays - 从字符串数组中添加两个数字的正确 bash 语法是什么?

JavaScript - 获取两个日期之间的分钟数

javascript - 在两个容器之间移动列表元素,并结合自动完成功能

html - 使 Bootstrap 页脚贴在内容的底部