Etherpad-lite: 1.8.0和更高版本上的性能下降

创建于 2020-08-26  ·  27评论  ·  资料来源: ether/etherpad-lite

描述错误
1.8.0版引入了性能下降,并且在新版本上也可以复制

重现
重现行为的步骤:

  1. 创建一个长焊盘(例如,超过4.000行)
  2. 在键盘的开始处按ENTER键以创建新行
  3. 长时间处理变更

预期行为
按ENTER的新行的创建应该更快。 作为基线,我们可以使用版本1.7.5。

屏幕截图

1.处理iframe高度的旧方法

这是我认为它会在1.8.0之前的版本中更改“ ace2_inner” iframe的高度的代码
Screen Shot 2020-08-26 at 10 50 48
https://github.com/ether/etherpad-lite/blob/1.7.5/src/static/js/ace2_inner.js#L4817

2.新方法

如屏幕截图所示,iframe上没有定义高度样式。 它的大小是由
#sidediv孩子。 这是可能的,因为它使用flexbox。
Screen Shot 2020-08-26 at 12 13 26

3. 1.7.5和1.8.4版的视频,带相同文字

https://youtu.be/LpthRFAH3GM
_请输入以下内容试听_

桌面(请完成以下信息):

  • Windows,MacOS,Ubuntu
  • 谷歌浏览器版本84.0.4147.135

智能手机(请填写以下信息):

我没有在任何智能手机上进行测试

其他背景

主要问题是由于回流的成本(请检查下一个会话)。 这意味着使用更复杂的CSS规则,延迟将增加。
如果我们将#sidedivdisplay:none ,则不会再出现延迟,但是会导致“ ace2_inner”的大小出现问题,因为它写在这里https://github.com/ether/ etherpad-lite / blob / develop / src / static / css / iframe_editor.css#L125
在这两个版本上,我都没有任何插件运行。

视频中显示的Chrome开发工具报告操作

1.7.5

graph175
functionCall175

1.8.4

_渲染时间增加了很多_
graph184
_看“布局”操作需要多长时间_
functionCall184

关于主题的一些有趣的文章

  1. https://developers.google.com/web/fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing

  2. https://gist.github.com/paulirish/5d52fb081b3570c81e3a

  3. https://gist.github.com/paulirish/5d52fb081b3570c81e3a#more -on-forced-layout

Serious Bug

最有用的评论

嗨,大家好 ! 感谢您非常清楚的错误报告@joassouza ,并对此错误表示抱歉

抱歉,我现在非常专注于其他项目,下周我将尽力对此票进行仔细研究。 但是,如果有人想解决成为我的客人!

所有27条评论

抄送@seballot

我们对此afaik进行了测试。 请参阅响应性前端测试。

当存在大量节点时,更容易实现回流问题。
是那个吗 https://github.com/ether/etherpad-lite/blob/develop/tests/frontend/specs/sensitiveness.js
有评论

哦,天哪,我将不加评论,并确保我们有有效的测试范围。 希望@seballot可以草率地找到一个性能修复器:)

谢谢@JohnMcLear!

不加评论,感谢您提供的彻底彻底的错误报告。 会再次碰到@seballot :+1:

尽管这里有电子邮件/抄送,但尚未收到@seballot的回复。 我认为他正在休假,并且会尽快参加这项工作,但是如果其他人在我们等待时可以take一下,那将是非常理想的:)

嗨,大家好 ! 感谢您非常清楚的错误报告@joassouza ,并对此错误表示抱歉

抱歉,我现在非常专注于其他项目,下周我将尽力对此票进行仔细研究。 但是,如果有人想解决成为我的客人!

@seballot在接下来的一周障碍,请确保您有时间在日程表

嗨!

我无法复制,我制作了6000行长的护垫,效果很好

Peek 06-09-2020 11-27

在Debian 9-> Chromium 73&Firefox 68上进行了测试

为什么您的行号看起来不好(数字1可以正常显示,然后从数字2来看它太大却没有对齐)?
您的本地代码可能有问题吗?
也许性能下降仅在Mac上? 有人可以尝试吗?

还没有测试过,但是可以看到Firefox响应式测试失败了。 尝试使用无皮肤设置的Firefox响应测试,看看它是否通过了?

我在铬和Firefox上通过了测试

image

是的,它对我来说也过去了,所以我需要更深入地研究,但是我想知道它是否对我们来说过去了,因为我们使用的是快速(ish)的PC,酱料实验室抛出了一些农民vm来处理任务?

我也在Ubuntu上的FF上经历了零延迟

好的,因此将amount更改1600000 (创建8k行)对于我来说确实很明显。

尝试这样做@seballottests/frontend/specs/responsiveness.js26

我不能确定这是否是一个新错误,值得检查1.7.9或其他内容并确保行为实际上有所不同。 响应性测试必须在1k线附近是有原因的。

还值得注意的是,在Firefox 52上的体验是有问题的,现代FF看起来还不错吗? 响应测试在FF 52上崩溃,但在80上还可以。实际上,它使浏览器崩溃。 -那么我猜想在Firefox 52中进行测试吗? 我现在正在SL上进行测试。

this.timeout响应测试失败不是函数错误。 https://github.com/ether/etherpad-lite/pull/4257/files

只是为了提供更多背景信息。 测试是在MacOs的Chrome上进行的。 我们可以在速度非常快的计算机(如i9、64GB RAM)上重现相同的错误。
@seballot您可以尝试在键盘的开头进行编辑吗?
我刚刚在使用chrome的Windows机器上进行了尝试,但得到了同样的延迟。
https://video.etherpad.com/p/example_long_pad

我一直在像白痴一样测试Firefox,现在将测试Chrome。

好吧,哇,这很糟糕。 我将金额更改为800000 ,并且延迟非常可怕。

我相信,如果您在打击垫的开头进行编辑,则延迟会增加。 喜欢,在它的第一行。

我对Chrome Performance工具不是很熟悉,但这是我在尝试编辑activityness.js面板时看到的。
Screenshot from 2020-09-06 16-54-38

请注意,我没有像您一样得到所有的排版时间吗?

我在Windows机器上尝试使用FF,但得到了同样的延迟。 使用此垫

https://video.etherpad.com/p/example_long_pad
关于重排,这取决于所应用的CSS,浏览器,js触发它的代码,....这就是为什么我在没有任何插件的情况下进行测试的原因。 我必须检查响应测试的代码以了解为什么你们在这些测试中没有意识到延迟。

嗨! 实际上,随着8K的出现,它开始冻结。 但是我切换到1.7.5并使用8k的填充冻结了它(我什至会说更糟!)

无论如何,当焊盘太大时,etherpad会变慢是一个事实。 我不认为这是一个严重的错误,因为垫子不是用来写书的,而且我认为大多数人都将它们用作短文本。

但是是的,我们可能会有所改善。 但我觉得这将是一件痛苦的事:)另外,我不确定这是否只会与标准版式垃圾分类有关,因为一种特殊情况是etherpad使用的是不同的iframe,因此我们始终需要运行javascript来对齐版式彼此之间(例如线高)

我会尝试看一下,但是我没有承诺任何事情,因为
1-它似乎不是很有趣:)
2-我不认为这是一个严重的错误

@JohnMcLear我现在尝试看一下,但是我不明白,我对ace2_inner.js所做的每个更改(甚至删除了整个文件)都不会影响我的本地实例,它仍然可以正常工作。 我想念什么?

请求ace2_inner.js时不使用版本字符串atm,因此ace2_inner.js的URL不变,并且使用了浏览器缓存。 当您在settings.json中设置maxAge = 0和/或禁用浏览器缓存时,它应在不重新启动的情况下投放新文件。

@ webzwo0i ! 谢谢您的帮助! 我终于记得我需要使ace2_inner的缓存无效,因为它已加载到iframe中...

(maxAge = 0对btw没有影响)

现在有点晚,明天再看!

一种技巧是使用网络选项卡打开,因为它禁用了缓存。

@joassouza您可以确认塞巴斯蒂安的发现吗?

OK完成 ! 实际上,这并不是很复杂,这要归功于@joassouza ,他做了所有发现问题和解决方案的工作

并且我确认该错误与最近的UI更改无关,我认为它已经存在很长时间了!

我想现在可以通过修复#4267关闭它
多谢一会@seballot

此页面是否有帮助?
0 / 5 - 0 等级