2015-10-27 3 views
0

У нас есть приложение, встроенное в Symfony2 с AngularJS. Производительность приложения ухудшается с увеличением числа пользователей.Увеличение производительности Symfony2 с помощью приложения angularJS

Веб-страницы приложений необходимо постоянно обновлять; Кроме того, есть некоторые модальности, необходимо обновить. В настоящее время я полагаюсь на регулярные запросы Ajax. Чтобы обновить страницу, я отправляю 2 запроса Ajax каждые 2 секунды. Всякий раз, когда пользователь подтягивает модальную версию, приложение перестает обновлять страницу, отправляет запрос Ajax для получения данных для модального и затем непрерывно отправляет запрос Ajax каждые 2 секунды для обновления этого модального. после закрытия пользователем модальное приложение возобновляет Ajax-запросы для страницы.

Поскольку эти сценарии повторяются до 100 рабочих станций; Сервер становится занятым, и запрос Ajax занимает больше времени. Обычно запрос Ajax для модалов занимает около 1 секунды, но как только сервер получает занятый запрос занимает от 2 до 3 секунд, что является значительной задержкой для пользователей.

После погуглить долго, я наткнулся на несколько решений, но не уверены, какое решение лучше всего, как я не могу попробовать и проверить каждый из них:

Мой первый раствор включает долго опроса поддержанию регулярного Ajax просит обновить страницу и использовать длинные опросы для обновления модальных данных, поскольку они не часто меняются. Недостатком этого является длительный опрос от первого клиента, который заставит сервер занят, что вызовет задержку для других клиентов. В дополнение к задержке серверу будет сложно найти отмененный или прерванный длительный опрос.

Веб-сокеты Сетевые сокеты - хороший соперник, но Apache не поддерживает его. Для этой проблемы я могу использовать Ratchet, но IE-9 по умолчанию не поддерживает его. Для этого существует несколько полиполков; но запросы все еще обрабатываются в очереди. Таким образом, время, сохраненное при повторном использовании соединения, не будет иметь положительного эффекта.

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

Многопоточность PHP теперь способен запускать несколько потоков. У меня может быть поток для каждого запроса Ajax, но эта настройка создаст большое количество потоков, поскольку PHP не подходит для сбора мусора, это может привести к утечке памяти.

Я также рассматриваю комбинацию длинного опроса и многопоточности или события отправки сервера и многопоточности.

Наша окружающая среда имеет некоторые ограничения, такие как

  • Мы должны поддерживать все браузеры, но IE-9 предназначен один.
  • Рабочие станции варьируются от тонких клиентов до ПК до виртуальных рабочих столов.
  • Количество пользователей колеблется в течение дня.
  • Кроме того, мы используем Угловое приложение, на самом деле не одностраничное приложение.
  • Приложение работает постоянно на интеллектуальных экранах.
  • Мы хотим предварительно загрузить данные для Модалей, чтобы пользователи не дождались появления модальности.

Я считаю, что я смотрю на все возможные решения. Дайте мне знать, если я пропустил.

Каждое предложение не приветствуется

+0

Если вы хотите, у вас сотни пользователей, почему бы просто не добавить сервер или два, чтобы увеличить нагрузку? –

+0

Алистер Бульман; Хорошая идея, но я не могу продолжать добавлять все больше и больше серверов. Добавление большего количества серверов является дорогостоящим, и число пользователей, получающих доступ к нему, может увеличиваться или уменьшаться в зависимости от времени суток. Добавление большего количества серверов не приведет к ускорению работы приложения, но это увеличит обслуживание для нас. – Rajkaran07

ответ

0

Im не уверены, о том, где ваша проблема, но если и использовать Аякс постоянно обновляют каждый 2s это может быть и есть много запроса в одно времени от одного клиента, поэтому уры сервера имеет жесткий время. Я предпочитаю использовать, чтобы не делать запрос каждые 2 с, но после ответа (успех или нет) добавьте еще один запрос с временем ожидания 2 с, так что сделайте цепочку запросов и получите только один от одного клиента. Следующее - производительность на сервере ур, потому что 1-3s отвечает, время велико, работает на prod env, см. Профайлер и посмотрите, что займет так много времени, возможно, используя веточку, для запроса json и т. Д.

+0

sedziwoj: Запросы Ajax уже привязаны. В любой момент времени в ожидающем состоянии есть максимум 3 запроса Ajax. Я могу сжать все запросы в один, но сервер займет больше времени на обработку и на все вместе. Сервер занимает много времени, чтобы ответить в напряженный день; Я знаю, в чем проблема. Сервер ожидает синхронных запросов, но Ajax является асинхронным и от нескольких клиентов. – Rajkaran07

+0

Так что вам не нужно много запросов, только сервер не обрабатывает его. –

+0

Так что вам не нужно много запросов, только сервер не обрабатывает его. Если вы делаете меньше запросов за один раз, это не дает многого, потому что некоторые будут ждать окончания запроса других. U может делать постоянное одно соединение (например, в Android), и если что-то изменит u получить информацию и сделать запрос повторно подключиться, но я не знаю, есть ли некоторые библиотеки для него и работает ли он на apache. U может использовать nginx с php-fpm, это должно дать некоторый импульс в производительности. Я думаю, что большинство из них помогает оптимизировать обработку времени, чтобы сделать ответ, и вы можете добавить кеш, чтобы не генерировать один и тот же контент несколько раз, и добавить тайм-тайм, так что вы создаете только каждый новый контент. –

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

  • Нет связанных вопросов^_^