表情符号在浏览器中呈现的速度真的很慢

Emojis really slow to render in browser

提问人:Astro Bear 提问时间:11/15/2023 最后编辑:ReynoAstro Bear 更新时间:11/15/2023 访问量:70

问:

我正在尝试将一堆表情符号作为表情符号选择器的一部分呈现出来,但浏览器在渲染它们时速度真的很慢,通常会挂起几百毫秒。

const emojis = "🐵🐒🦍🦧🐶🐕🦮🐕‍🦺🐩🐺🦊🦝🐱🐈🐈‍⬛🦁🐯🐅🐆🐴🫎🫏🐎" + 
"🦄🦓🦌🦬🐮🐂🐃🐄🐷🐖🐗🐽🐏🐑🐐🐪🐫🦙🦒🐘🦣🦏🦛🐭🐁🐀🐹🐰🐇" + 
"🐿️🦫🦔🦇🐻🐻‍❄️🐨🐼🦥🦦🦨🦘🦡🐾🐵🐒🦍🦧🐶🐕🦮🐕‍🦺🐵🐒🦍🦧🐶🐕🦮"

const body = document.querySelector('body');

for (const emoji of Array.from(emojis)) {
  const child = document.createElement('div');
  child.innerHTML = emoji;
  body.appendChild(child)
}

我在不同的浏览器上尝试过,都显示出类似的行为。我附上了Firefox分析器的屏幕截图。

Profiler

JavaScript Firefox 浏览器 表情符号

评论


答:

1赞 Destroyer369 11/15/2023 #1

由于每个表情符号的渲染复杂性,在 DOM 中渲染大量表情符号确实会导致性能问题。一种可能的优化可能是使用单个 DOM 元素一次呈现多个表情符号。

   const emojis = "🐵🐒🦍🦧🐶🐕🦮🐕‍🦺🐩🐺🦊🦝🐱🐈🐈‍⬛🦁🐯🐅🐆🐴🫎🫏🐎" + 
  "🦄🦓🦌🦬🐮🐂🐃🐄🐷🐖🐗🐽🐏🐑🐐🐪🐫🦙🦒🐘🦣🦏🦛🐭🐁🐀🐹🐰🐇" + 
  "🐿️🦫🦔🦇🐻🐻‍❄️🐨🐼🦥🦦🦨🦘🦡🐾🐵🐒🦍🦧🐶🐕🦮🐕‍🦺🐵🐒🦍🦧🐶🐕🦮";

const emojisContainer = document.createElement('div');
emojisContainer.textContent = emojis;
document.body.appendChild(emojisContainer);

此方法涉及创建单个 div 元素并将其 textContent 属性设置为整个表情符号字符串。这应该比为每个表情符号创建单独的元素更好。

或者您是否希望图标有一个选择器,以便在聊天中进行选择?

评论

1赞 Astro Bear 11/15/2023
谢谢,但正如你所说,我希望用户能够点击一个图标,让它出现在其他地方
0赞 Destroyer369 11/17/2023
您可以尝试阅读有关“DocumentFragment”的文档。Mby将帮助您 developer.mozilla.org/en-US/docs/Web/API/DocumentFragment