измерение скорости загрузки ruby

275
Elaheh kamaliha

Я кеширую результат запроса в файл на стороне сервера. Когда отправляется новый запрос, веб-служба ищет его в одном из кэшированных файлов. Если это так, он отправит файл. Если нет, он сгенерирует результат и отправит его клиенту. Теперь, когда он отправляет кэшированный файл, загрузка происходит намного быстрее (по сравнению с генерацией результата и отправкой его в строковом формате). Под временем загрузки я подразумеваю (общее время ожидания ответа пользователем) - (время, потраченное на обработку на сервере)

Ты хоть представляешь, в чем причина? Или какое-то предположение, как я могу это выяснить?

веб-сервис написан на ruby, а клиент на javascript.

1

1 ответ на вопрос

2
tadman

Отправка файла обрабатывается операционной системой. Он просто запихивает содержимое в сокет и не требует дополнительных затрат от вашего приложения. Это буквально огонь и забыть.

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

Затем, как только клиент получил результат, он должен прочитать его из сокета, преобразовать его в объекты Ruby, возможно, в модели, которые несут еще больше накладных расходов, и передать этот объект результата обратно запрашивающему методу. Если вы затем повторно сериализуете его в результат, он должен пройти процесс повторного копирования этих данных в выходной поток.

Итак, в итоге, чтение из существующего файла: ноль считываний, ноль копий.

Чтение из базы данных: одно чтение, две копии.

спасибо тэдман. Я должен отметить, что я уже вычитаю время, проведенное на сервере. А также, когда клиент получает его, я вычисляю время, прежде чем он что-то сделает (например, преобразование в объекты, ...). Фактически, данные отправляются в формате JSON в обоих случаях. Elaheh kamaliha 11 лет назад 0