У нас большой текстовый документ (хранится в базе данных MSSQL), и нам нужно предоставить словарь, подобный поиску слов, когда они наведены.
Например, если было следующее предложение:quick dog перепрыгнул через коричневого лиса «наши пользователи могли создать« определение »для любого из этих слов, таких как« quick »,« dog »,« jumped over »и т. д., и нам нужно выделить такой текст, а когда при наведении курсора мыши предоставить текстэто было установлено в определении.
В настоящее время у нас есть реализация, которая выполняет свою работу, однако страдает от невероятно плохой производительности, текущая реализация использует Regex для анализа текста и вставки фрагмента Javascript сразу после словав тексте, если оно соответствует определению.Теперь видно, что у нас может быть где-то до 400 или более определений, а текст может быть длиной в несколько абзацев или более, что приводит к зависанию всего сервера и делает приложение не отвечающим на запросы.
Я попытался оптимизировать код с помощьювозиться с скомпилированным регулярным выражением, но это мало помогает в проблеме, запрос все еще останавливается, прежде чем что-либо возвращать.
Мне любопытно, какие еще варианты у меня есть для достижения этого.
Я рассмотрел:
- Написание службы, которая находится в фоновом режиме и опрашивает определения и обновляет текст в простое
- Некоторая форма кэширования, однако на самом деле это не происходитчтобы устранить основную причину проблемы и существ, поскольку сайт не загружается на всех страницах, вероятно, не будет кэширован
- Реализация клиентской части регулярного выражения, я думаю, что страница будет загружаться тогда, но я сомневаюсь, что на этой стороне клиента будетможет быть лучше, чем делать это на стороне сервера, это может даже заблокировать браузер
Приложение - ASP.NET website (.net 3.5 в настоящее время переходит на 4 скоро), используя SQL Server 2005/8 (в зависимости от сайта клиента) и NHibernate.