2015-02-24 4 views
1

Я работаю с очень большим корпоративным приложением, написанным на Java, которое запрашивает базу данных Oracle SQL. Мы используем JavaScript на передней панели и всегда ищем способы улучшить работу приложения с большим использованием.AJAX/производительность поиска JavaScript лучше, чем Java/Oracle

Проблема, с которой мы имеем прямо сейчас, заключается в том, что мы отправляем запрос через Java, что приводит к 39 000 записей. Это создает значительную нагрузку на сервер и заставляет браузер зависать. Я должен упомянуть, что данные относительно статичны (только изменения примерно раз в год), и мы могли бы использовать карту xml или что-то подобное (плоский файл), так как мы знаем точные результаты, которые будут возвращаться каждый раз.

Запрос, однако, по-прежнему занимает 1,5-2 минуты для загрузки, что неприемлемо. Я хотел посмотреть, есть ли какие-либо предложения относительно того, как оптимизировать этот сценарий, особенно если это можно сделать быстрее с JavaScript (или jQuery) и использовать AJAX для подключения к db. Или, мы идем по этой проблеме, все неправильно?

+0

Обычно это зависит от вашего запроса sql, из которого вы извлекаете данные. Вы пытались оптимизировать свой запрос? –

+0

Если результаты не меняются, почему бы не кэшировать их в вашем явном уровне? –

+0

Звучит для меня, что вы просто занимаетесь пропускной способностью (на нескольких уровнях). 39K будет представлять собой XX байтов данных со скоростью передачи Y. Подкачка на стороне сервера, похоже, является общей реализацией, чтобы предотвратить это. –

ответ

1

Вы хотите, чтобы определить, является ли медлительность из-за:

  1. запрос выполняется в базе данных
  2. сети является медленным возвращением 39K записей
  3. Кода JavaScript, работающим с 39K записей после Аякса заполняется

Если вы можете запустить запрос в sqlplus или toad, это устранит веб-уровень и сеть вместе. Если это медленно, то настройте запрос, проверив индексы.

Если после добавления соответствующих индексов запрос все еще медленный, вы можете предварительно сформировать результаты запроса и сохранить результаты в таблице или создать материализованное представление.

После того, как запрос выполняется хорошо из sqlplus, добавьте сеть обратно в уравнение. Запустите его из своего веб-браузера и посмотрите, какие надбавки добавляются.

Если он все еще медленный, вам нужно определить, является ли проблема аксией данных или если медленность возникает после того, как страница что-то делает с данными (т. Е. Заполняет сетку данных через javascript).

Если медленность связана с тем, что браузер ожидает данных, то вы хотите удостовериться, что он когда-либо был получен только один раз. Вы можете сделать это, установив заголовки кеша в запрос ajax для кэширования результата в течение 1 года. Или вы можете сохранить результаты в localstorage.

Если медлительность связана с браузером, работающим с 39 тыс. Строк (т. Е. Перемещением данных в сетку данных), у вас есть несколько вариантов.

  1. найти лучший подход или библиотеку
  2. использование постраничной

Вы можете найти проблемы с производительностью от каждой из этих областей. Скорее всего, запрос просто нужно настроить, добавив индексы или предварительно запросив данные и сохранив их, решит проблему.

Другое дело, если вам действительно нужны 39 тысяч строк за один раз. Если вы можете, разбивайте страницы на уровне db, чтобы вы возвращали 100 строк на страницу.

+0

Отличная информация - спасибо! – dihakz

Смежные вопросы