Мы будем постоянно дорабатывать наш SDK, но браузеры кэшируют скрипты, если разработчик не дал других инструкций. Мы должны сами задать время, на которое можно кешировать нашу библиотеку, через заголовок Expires, например, час — адекватное время. С кешированием на фронтенде разобрались, теперь поговорим про бэкенд. Как уже обсуждали выше, обслуживание запросов со сторонних виджетов может создавать ощутимую нагрузку просто от количества сайтов, где виджеты установлены. Но чаще всего данные для всех пользователей в этих виджетах одинаковые, нет смысла запускать приложение, а тем более ходить в базу данных за ними на каждый запрос. Такие запросы вообще дальше nginx можно не пропускать, настроив кеширование на нем.
Забыли упомянуть что iframe это еще и изоляция стилей. Если просто вставлять свой html на страницу то можно слегка заколебаться писать правила с !important которые будут оверрайдить проблемные места в местах пересечения с клиентским css.
Что-то сложнее одной кнопки на сторонний сайт нереально без iframe, согласен. Даже сам тэг iframe нужно хорошенько обнулить :)