我们有一个大文本文档(存储在MSSQL数据库中),我们需要在它们悬停时为字词提供字典查找。
例如,如果有以下句子: “快速的狗跳过棕色的狐狸”我们的用户可以为“快速”,“狗”,“跳过”等任何一个词创建一个“定义”,我们需要突出显示这些文本以及何时鼠标悬停提供已在定义中设置的文本。
目前我们有一个实现该工作的实现,但它遭受了令人难以置信的糟糕性能,当前实现使用正则表达式来解析文本并在文本中的单词后面插入一个Javascript片段(如果它与定义匹配)。现在看到我们可以有多达400个或更多的定义,文本可以是多个段落或更长,这会挂起整个服务器并使应用程序不具有代表性。
我试图通过摆弄编译的正则表达来优化代码,但它没有多大帮助,请求在返回任何内容之前仍然超时。
我很好奇我还有什么其他选择来实现这一目标。
我考虑过:
该应用程序是一个ASP.NET网站(.net 3.5目前正在迅速转向4),使用SQL Server 2005/8(取决于客户端站点)和NHibernate。
答案 0 :(得分:1)
对于需要花费很长时间才能运行并且不经常更改的内容,请不要忘记低批量作业。晚上将文档解析为HTML页面。运行你的正则表达式并插入javascript,或其他任何东西。然后保存HTML一次,并根据需要多次提供。这是旧的方式,但它仍然是稳固的。
答案 1 :(得分:1)
抛出想法:
可能的算法:
text[]
words[]
System.Collections.Generic.HashSet
,因为它的查询速度非常快text[]
并使用<span class='known'>
标记words[]
处理复合词:
words[]
。AJAX鼠标悬停事件:
<span class='known'><span class='known'>house</span> plan</span>
,这很好。您的jQuery会将最外面的span标记发送到服务器,服务器可以返回所有匹配的单词。