gaogaotiantian / biliscope

Bilibili chrome extension to show uploader's stats
MIT License
594 stars 46 forks source link

[FR] 重构 `UserProfileCard.prototype.updateData` 函数 #114

Closed F-park closed 10 months ago

F-park commented 10 months ago

想了下,可以加一个参数 state,将这个函数干的三件事给分离,改成下面的形式。

UserProfileCard.prototype.updateData = function (data, state = 0) {
    if (state == 0) {
        // 读取数据
        this.loadData(data);
    } else if(state == 1) {
        // 将数据应用到卡片
        this.refreshCard();
    } else if(state == -1) {
        // 重置卡片
       this.resetCard();
    }
}
gaogaotiantian commented 10 months ago

这个重复调用引入了任何bug么?在前端的世界里反复渲染不是一个罪大恶极的事,有的时候如果可以让代码变得更加简单,更“stateless”,反而是更好的设计。也就是说,渲染本身总是完全渲染,并不依赖之前的状态,任何时刻,给了同样的数据,渲染出的总是同样的界面。

只有在performance真的开始出问题的时候,这才开始成为一个问题,然后再去考虑怎么优化。一个函数被反复调用这件事不是啥大事。

F-park commented 10 months ago

确实,这个不是 bug。但我觉得还是有必要重构这个函数的,updateData 现在的可读性和可维护性太差了。 如果其中调用的函数出现了 biliGet 或者 biliPost 函数,那就会出现大问题了。

gaogaotiantian commented 10 months ago

有很多函数如果它里面调用了不该调用的函数都会出大问题啊,这不是理由。你任何一个函数,在没有处理好的情况下调用自己都可能产生无限递归。

updateData就是把数据渲染成html的过程,有了数据,画图,这是一个非常清晰的概念,并且是stateless的,任何情况下,有什么data就渲染什么前端。加上state显然是把程序变得更加复杂了。

F-park commented 10 months ago

那就不重构了吧,但是还是可以把意料之外的调用给修改掉。