Javascript Rangy:在恢复多个字符范围以突出显示时,我可以提高性能吗?

Javascript Rangy:在恢复多个字符范围以突出显示时,我可以提高性能吗?,javascript,rangy,Javascript,Rangy,我正在使用帮助在网站中使用一些文本突出显示功能。简而言之,用户可以选择一些文本,突出显示文本(通过单击按钮),并且用户可以通过这种方式创建多个突出显示 高光将保存到数据库中,用户可以在将来的任何时候重新加载高光 但是,我在使用属于“TextRange”模块的restoreCharacterRanges时遇到了性能问题。当有更多的突出显示要加载时,此性能问题变得更加明显 目前,我正在使用一些类似于下面的代码(只是要指出,它正是我想要的工作方式,只是速度不够快): 对于上面的代码示例,性能问题发生在

我正在使用帮助在网站中使用一些文本突出显示功能。简而言之,用户可以选择一些文本,突出显示文本(通过单击按钮),并且用户可以通过这种方式创建多个突出显示

高光将保存到数据库中,用户可以在将来的任何时候重新加载高光

但是,我在使用属于“TextRange”模块的
restoreCharacterRanges
时遇到了性能问题。当有更多的突出显示要加载时,此性能问题变得更加明显

目前,我正在使用一些类似于下面的代码(只是要指出,它正是我想要的工作方式,只是速度不够快):

对于上面的代码示例,性能问题发生在
选择.restoreCharacterRanges
调用期间。在我的测试中运行大约需要0.6秒

现在,当加载多个高光时,我希望每个高光都能得到0.6秒的点击率,这可以很快累积起来

我可以做些什么来更有效地加载多个高光?可能只需调用一次
restoreCharacterRanges


我尝试将多个选择推送到
selectionRanges
数组,但是当调用
highlightSelection
时(即,它只突出显示第一个)这似乎会产生不希望的效果
您可以使用Highlighter的
序列化()
反序列化()
()方法来实现这一点。我最近为Highlighter添加了一种更高效的序列化范围的方法,它还消除了对TextRange模块的依赖,我必须承认,对于很多任务来说,TextRange模块的速度非常慢。

hmmm。。。如果我需要TextRange提供的“可见字符”偏移量,该怎么办?我实际上在其他方面使用它们,但我想我只需要在第一次创建高光时计算它们。您认为如果我在创建时使用
saveCharacterRanges
serialize
,在加载时只使用
反序列化
就可以了吗?也许我会玩一玩,实际上,在尝试同时序列化多个亮点时可能会给我带来问题:(从Rangy的角度来看,这显然是正确的答案,但是出于我的特殊需要,我最终使用本机浏览器选择对象中的数据编写了自己的保存/加载功能。可能与Rangy的方法类似(计算所有节点的可见字符)但我更了解我的方法,因此可以让它更好地为我工作:)@tim down-我无法在iframe中使用序列化和反序列化。我还尝试将正常选择数据保存到JSON,但在还原时会产生问题。我的详细问题如下:
function LoadHighlight(start, end){
    var selectionRanges = [];
    selectionRanges.push({
        "characterRange": {
            "start": start,
            "end": end
        }
    });

    var selection = rangy.getSelection();

    selection.restoreCharacterRanges(myElement, selectionRanges);

    highlighter.highlightSelection(highlightClass, selection);
}