1

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

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

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

1 ответ1

2

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .