如何提高大型字符串的 JavaScript 工具提示的性能
How to improve performance of javascript tooltips for large strings?
我正在为网页开发一个工具提示式的应用程序,并希望每次用户移动单词时都会触发一个 Javascript 事件。
目前,我通过在每个单词周围单独放置一个<span>
标签来工作,例如 <span id="word1">word1</span> <span id="word2">word2</span> <span id="word3">word3</span>
,然后处理每个事件的鼠标悬停/悬停事件。
这工作正常,但有时输入文本是数千个单词,所有这些标签似乎都会减慢浏览器的速度(至少会减慢 IE)。我使用事件委托,因此没有附加数千个事件处理程序,并且一旦呈现就足够快。问题是当我通过 innerHTML 设置单独标记的单词时,首先可能需要 8+ 秒来呈现单独标记的单词,在此过程中冻结浏览器。
(编辑:只是为了澄清我的意思 - 用户输入一串文本,它由ajax发送到服务器,HTML标签被添加到服务器端。在 ajax 成功回调中,我通过直接设置元素的内部 HTML 来设置新的 HTML。延迟全部在内部 HTML 设置上,而不是在服务器端。
有没有可以更改为<span id="line1">word1 word2 word3</span>
并且仍然有效?有没有办法知道用户将鼠标悬停在哪个特定单词上,而无需在每个单词周围放置单独的标签?
在看到这个页面之后,事实证明这是可能的,至少在某种程度上是可能的。下面的解决方案仅适用于IE,但这确实是我所需要的,因为其他浏览器无论如何都足够快地使用单个标签解决方案。
<script>
function getWordFromEvent (evt)
{
if (document.body && document.body.createTextRange)
{
var range = document.body.createTextRange();
range.moveToPoint(evt.clientX, evt.clientY);
range.expand('word');
document.getElementById("wordMouseIsOver").innerHTML = range.text;
}
}
</script>
<span onMouseMove="getWordFromEvent(event)">word1 word2 word3</span>
<BR>
<span id="wordMouseIsOver"> </span>
长 HTML 注入文档之前使用文档片段。
阅读 John Resig(jQuery 库的创建者)关于使用文档片段的好处的长篇文章
看看这个链接(第 7 点): http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx#tip7。
你基本上将所有跨度包装在一个 span/div 中,然后插入那个 DOM 元素。
- 它是否创建了许多不利于JavaScript性能的变量
- Javascript性能-在dom上迭代并添加侦听器
- 从自执行函数返回函数的Javascript性能命中率
- 循环的 JavaScript 性能问题
- Javascript性能:如何在数组中循环并检查每个值比indexOf、search和match更快
- 多年来浏览器的Javascript性能改进
- JavaScript性能预热
- 在JavaScript性能方面模拟结构处理的C数组
- 持续集成过程中的Javascript性能测试
- 奇怪的 JavaScript 性能取决于变量范围
- 基于 Chrome 的 JavaScript 性能滞后
- Javascript性能 - 如何提高小脚本的性能
- JavaScript 性能 - 除法还是乘法?/与*
- 避免单个变量是否会加快 JavaScript 性能
- 后台的Javascript性能测试
- 如何衡量JavaScript性能(除了页面加载时间)
- 使用新的javascript性能.在iframe上优化API
- JavaScript性能(arr[i]的类型==“未定义”||num<arr[i])
- 处理大型数组时的JavaScript性能
- Javascript性能-使用$.getScript()添加脚本