Я использовал PHP для создания HTML-страницы, которая компилирует список точек данных и выталкивает их в массив, объявляет массив в заголовке, а также echo - огромный список ввода формы объекты в тело. Список, с которым я работаю, составляет менее 15 000 строк, которые помещаются в 1 массив.Страница зависает, слишком много, чтобы искать
Я более или менее создал окно поиска, когда при размывании() предполагается, что действие должно выполняться, функция Javascript должна искать по массиву и скрывать непревзойденные параметры формы и отображать совпадения. Кажется, что это работает до 5000, но если я пропустил все элементы массива 15000, он зависает и зависает.
Я в настоящее время принимаю его на свободном месте в то время как я проверяю ... вот ссылка на фактическую страницу TEST PAGE that hangs up
Я в том числе фрагмента кода JS с вырезанным массивом таким образом Вы не Вам нужно прокручивать тысячи строк.
\t \t <script type="text/javascript" >
\t \t \t
\t \t \t var array_ICDDx = new Array('[ICD Code] Diagnosis','[001.0] Cholera due to vibrio cholerae','[001.1] Cholera due to vibrio cholerae el tor','[001.9] Cholera, unspecified','[002.0] Typhoid fever','[002.1] Paratyphoid fever A','[002.2] Paratyphoid fever B','[002.3] Paratyphoid fever C','[002.9] Paratyphoid fever, unspecified','[003.0] Salmonella gastroenteritis','[003.1] Salmonella septicemia','[003.20] Localized salmonella infection, unspecified','[003.21] Salmonella meningitis','[003.22] Salmonella pneumonia','[003.23] Salmonella arthritis','[003.24] Salmonella osteomyelitis',[...GOES ON FOREVER ~15000 ARRAY VALUES...]);
\t \t \t
\t \t \t function searchICDDx(ICDDx,line_start,line_end) {
\t \t \t \t for (var a = line_start; a < line_end; a++) {
\t \t \t \t \t var ICDDx_check = array_ICDDx[a].toLowerCase();
\t \t \t \t \t var Row = "R" + a;
\t \t \t \t \t if (ICDDx_check.search(ICDDx) >= 0) {
\t \t \t \t \t \t document.getElementById(Row).style.display = "block";
\t \t \t \t \t }
\t \t \t \t \t else {
\t \t \t \t \t \t document.getElementById(Row).style.display = "none";
\t \t \t \t \t }
\t \t \t \t }
\t \t \t \t if (line_end < array_ICDDx.length) {
\t \t \t \t \t line_end += 1000;
\t \t \t \t \t if (line_end > array_ICDDx.length) { line_end = array_ICDDx.length; }
\t \t \t \t \t var timer = setTimeout(searchICDDx(ICDDx,a,line_end),100);
// \t \t \t \t \t searchICDDx(ICDDx,a,line_end);
\t \t \t \t }
// \t \t \t \t else if (line_end >= array_ICDDx.length) {
// \t \t \t \t \t clearTimeout(timer);
\t \t \t \t \t return;
// \t \t \t \t }
\t \t \t }
\t \t \t
\t \t \t function searchICD() {
\t \t \t \t var find_ICD = Coder.elements['ICD'].value;
\t \t \t \t if (find_ICD != "") {
\t \t \t \t \t document.Coder.Dx.value = "";
\t \t \t \t \t find_ICD = find_ICD.toLowerCase();
\t \t \t \t \t searchICDDx(find_ICD,1,1000);
\t \t \t \t }
\t \t \t }
\t \t \t function searchDx() {
\t \t \t \t var find_Dx = Coder.elements['Dx'].value;
\t \t \t \t if (find_Dx != "") {
\t \t \t \t \t document.Coder.ICD.value = "";
\t \t \t \t \t find_Dx = find_Dx.toLowerCase();
\t \t \t \t \t searchICDDx(find_Dx,1,1000);
\t \t \t \t }
\t \t \t }
\t \t \t
\t \t </script>
Это не кажется, проблема с код не работает. Как я уже упоминал, если я ограничиваю поиск только 1000 значениями массивов, то это, похоже, работает, это массивное количество значений массива, которое убивает страницу.
Любые предложения? Спасибо заранее!
Обработка больших наборов данных внутри браузера станет проблемой в какой-то момент, несмотря ни на что. Однако в вашем коде может быть потенциал для оптимизации. Прежде всего, вы не должны использовать 'search', который будет выполнять _правильное соответствие expression_, которое, насколько я вижу, вам не нужно. Вместо этого используйте 'indexOf'. – CBroe
Во-вторых, применение 'toLowerCase' снова в каждом поиске может быть не самым быстрым способом - возможно, было бы лучше, если бы вы определили это значение один раз заранее и сохранили его как дополнительное свойство ваших записей. (Но поскольку это увеличит размер данных для хранения в памяти, это нужно было бы увидеть, если это действительно улучшит производительность.) Если оба эти действия не приведут к улучшению, вы можете дополнительно рассмотреть возможность использования _web workers_ для этого. – CBroe
И, возможно, лучшей лучшей идеей может быть не пересылка этого количества данных клиенту в первую очередь - но вместо этого выполнить поиск на автокомплекте на сервере и передать только результаты этого клиенту. – CBroe