Я создал и развернул приложение React (назовем его приложением A) на S3 и включил для него «Статический хостинг». Ранее это приложение работало на экземпляре EC2 с использованием Node. Недавно кто-то из команды развернул другое приложение React (B) на S3, и именно тогда я прочитал, что S3 может быть хорошим вариантом для простого развертывания статического контента, поэтому я подумал о переносе приложения A на S3. Однако после развертывания приложения я вижу, что требуется слишком много времени (10-15 секунд), чтобы даже получить страницу входа. После того, как я войду, опыт не так уж и плох, но медлительность все еще очевидна. Это был не тот случай, когда он работал на экземпляре EC2.
Для пояснения: все эти приложения на основе React, включая приложения A и B, предназначены для использования только в сети компании, а все пользователи - только из региона США. Приложение A получает изображения (и другие данные) из других приложений на основе React (приложения B и C, оба размещены только на S3) и из другого приложения (запущенного на экземпляре EC2).
Я читал о проблемах производительности и наткнулся на параметры content-encoding
и cache-control
, которые можно использовать при загрузке сборки на S3. Я сжал файлы CSS и JS с помощью GZIP, а также добавил метаданные для content-encoding
, однако я не заметил заметной разницы в загрузке страницы. Я оставил параметр cache-control
(я установил его на max-age=31536000
, потому что приложение A имело хэшированные имена файлов), потому что после добавления этого параметра я получал пустую страницу (не знаю почему) после входа в приложение , Я также проверил производительность сайта с помощью GTMetrix (снимок прилагается). В этом отчете вы заметите, что он по-прежнему показывает, что сжатие можно улучшить, однако рекомендации на самом деле относятся к приложению B, к которому подключается это приложение A. Я думаю, что это область улучшения для меня. Я также проверил с разработчиком, и он сказал мне, что он не использовал сжатие внутри приложения (приложение A), хотя я сжал его при загрузке на S3.
Я прочитал много статей, в которых люди использовали S3 с CloudFront или другими CDN. Я не уверен, каков правильный подход к моей проблеме, поскольку я делаю такое развертывание впервые. Я также должен принять во внимание стоимость, прежде чем предлагать S3 в качестве метода развертывания для других сред (QA, UAT, PROD).
Учитывая, что пользователи приложения будут в пределах только сети компании, у меня есть следующие запросы:
1) Можно ли избежать подхода CloudFront / CDN или это единственный способ решить эту проблему?
2) Если статический хостинг на S3 в порядке, можно ли внести некоторые изменения в общую настройку, чтобы загруженные изображения (из другого приложения C React, размещенного на S3) не маршрутизировались через Интернет, что позволило сэкономить на стоимости?
Я только что проверил размер корзины S3 для приложения React C, в котором находится большинство изображений. На данный момент общий размер сегмента составляет около 200 МБ, а максимальный размер файла, который я мог видеть для изображения, составлял около 100 КБ (большинство находится в этом диапазоне). Пожалуйста, дайте мне знать, если для предоставления предложения требуется больше данных.