white-space:使用word-break预先包装:最近在Chrome中,break-all变得非常慢

时间:2016-03-09 02:34:22

标签: javascript jquery html css google-chrome

切换到带有<div>的jQuery UI标签,其中包含需要包装的行并使用以下CSS:

.console {
  white-space: pre-wrap;
  word-break: break-all;
}

最近在Chrome中变得非常慢。这种情况在过去3个月内发生了Chrome更新或(我目前在Chrome 49上) - 同样的例子在IE 11和Firefox 44中都运行得非常快(都在Windows 7上测试过)

有关示例,请参阅以下jsFiddle https://jsfiddle.net/7f7btvb6/3/

Tab1和Tab2都设置了white-space: pre-wrap;word-break: break-all;属性。 Tab1有20000个短行,并且相当快(切换到它时只有轻微的延迟。)Tab2有2000行,但它们需要换行,这需要很长时间才能在Chrome中显示 - 在我的电脑上大约需要30秒。

Tab3和Tab4与Tab2具有相同的数据,但在Tab3中white-space设置为pre而不是pre-wrap,并且在Tab4中word-break未设置,并且这两个标签显示速度相当快(在我的电脑上大约1秒钟)。

这是最新版Chrome的问题,还是jQuery UI与最新Chrome版本之间的某些互动?或者我错过了什么或做错了什么?

非常感谢任何帮助或建议!

编辑:我使用Tab5更新了小提琴,使用word-wrap: break-word;代替word-break: break-all;,如下所示,我还在示例文本中添加了一些破折号,以显示不同的包装行为。 Tab5确实和Tab3和Tab4一样快,但不像Tab2那样在行尾包装,这理想情况下我的用例更喜欢。但我现在会使用它,因为这种包装方式仍然优于30多秒的延迟。谢谢!

Edit2:我认为这与jQuery甚至JavaScript都没有关系 - 这里https://jsfiddle.net/edpq5qcy/3/是一个新的jsFiddle,简化为word-break: break-all;的基本用法 - 在Chrome中运行此需要30使用2000行+秒,而在Firefox中则为<1秒。调整窗口大小会触发自动换行重新计算,Chrome会再次延迟30秒,但在Firefox中几乎是即时延迟等等。我觉得这必定是某种Chrome错误。

Edit3:仅供参考这个问题已在Canary版本52.0.2712.0中修复(请参阅here) - 它有望在2016年7月底之前进入稳定的Chrome版本。

2 个答案:

答案 0 :(得分:0)

这个css的速度更快:

.console {
  white-space: pre-wrap;
  word-wrap: break-word;
}

演示jsfiddle.

答案 1 :(得分:0)

解决方案解决方案:只需在字母之间插入<wbr>即可摆脱任何类型的断路器。

  

wbr元素代表换行机会。 - w3

演示:jsfiddle