У меня есть конкретный c сценарий использования, когда в пользовательском интерфейсе должна происходить некоторая логика проверки c (по различным деловым причинам [...]). Массив может содержать до нескольких десятков или до нескольких сотен тысяч элементов (1-400К). Внешний интерфейс основан на Angular.
Первым шагом является проверка на наличие дубликатов (и сохранение их в другом массиве [...]). Это достигается с помощью следующего:
validateTargets(targets: string[]): ValidationResultObject[] {
let result: ValidationResultObject[];
let dups: string[] = [];
var uniques = targets.filter( (item,index) => {
if (targets.indexOf(item) === index) {
return targets.indexOf(item) === index
}
else {
dups.push(targets[index])
}
}
//other validation logic goes here
return result;
}
Проблема заключается в очевидном зависании пользовательского интерфейса, когда он работает против чего-либо выше 50К. В настоящее время я поставил выше в качестве обратного вызова в другой функции в setTimeout
, чтобы по крайней мере позволить пользовательскому интерфейсу запускать счетчик, пока страница зависает:)
Я видел несколько способов, как люди советуют, как разработать код, позволяющий пользовательскому интерфейсу реагировать (или хотя бы перерисовывать); тем не менее, мой случай немного сложен, так как я имею дело с дубликатами.
Я думал разбить массив на куски и запустить над Array.filter
часть в al oop в setTimeout
(для пользовательского интерфейса ) НО мне позже нужно сравнить куски с самим собой, так что это просто продлевает лог c! Я не чувствую себя достаточно комфортно, чтобы экспериментировать с работниками, поскольку в организации есть браузеры, которые их не поддерживают.
У кого-нибудь есть идеи, как это решить? Нет, это невозможно переместить в бэкэнд: (
С уважением