Ошибки тайм-аута с Google Slides API и ужасная производительность записи

Я добавляю к презентациям десятки слайдов с помощью простого скрипта приложения:

  var presentation_to = SlidesApp.openById(presentation_to_id);
  var presentation_from = SlidesApp.openById(presentation_from_id);
  var slide = presentation_from.getSlideById(slide_id);      
  var newSlide = presentation_to.appendSlide(slide); 

Для этого у меня есть конечная точка API сценария приложения.

Я начал с одного сценария приложения, который перебирал все идентификаторы слайдов, но у него была ужасная производительность, и время ожидания истекало через 5 минут. Я разделил свои вызовы сценария приложения API, чтобы запрашивать один слайд за раз, с распараллеливанием (поэтому я выполняю несколько запросов, чтобы добавить слайд в ту же презентацию сразу).

Когда на слайдах есть большие изображения, я все равно получаю следующее:

Google::Apis::TransmissionError: execution expired

Неужели appendSlide() производительность настолько плохая, что я хочу сделать это невозможно, или есть способ заставить это работать, не дожидаясь 1 часа, чтобы сгенерировать одну презентацию из 50 слайдов?

PS: Вы найдете прикрепленные журналы скрипта. Каждая строка предназначена для добавления ОДНОГО слайда к презентации (всегда одно и то же место назначения). Время выполнения и количество ошибок просто зашкаливают. Производительность просто ограничена Google или есть способ обойти эту проблему?


person Alb Dum    schedule 29.07.2020    source источник
comment
Добавьте минимальный воспроизводимый пример.   -  person Rubén    schedule 29.07.2020
comment
Хотя я подумал, что вы, возможно, захотите снизить стоимость процесса вашего скрипта, чтобы правильно понять ваш вопрос, могу ли я спросить вас о взаимосвязи между вашей текущей проблемой и вашим скриптом в вашем вопросе? Судя по сообщению об ошибке, вы можете запустить скрипт Google Apps с помощью ruby. Но я не могу понять вашу детальную ситуацию. Это из-за моих слабых навыков. Я глубоко извиняюсь за это.   -  person Tanaike    schedule 30.07.2020
comment
Ознакомьтесь с использованием метода пакетного обновления.   -  person Cooper    schedule 30.07.2020
comment
@ Rubén четырех строк кода достаточно, чтобы показать эффект, но для просмотра журналов вам потребуется создать сценарий с этими строками на script.google.com. Затем цель - импортировать слайд с тяжелой картинкой и несколько раз запустить скрипт приложения. Проблема в том, что я вызываю этот скрипт как конечную точку API много раз параллельно, потому что мне нужно добавить много слайдов в конкретную презентацию. Cooper batchUpdate, к сожалению, не обрабатывает appendSlide () :( Похоже, что есть порог производительности для этой функции: /   -  person Alb Dum    schedule 01.08.2020


Ответы (1)


Соображения

Используя встроенный класс SlideApp Apps Script, вы в основном создаете вызов API каждый раз, когда запускаете метод .appendSlide(). Это вызовет большие накладные расходы на сеть, когда ваш скрипт вставит много слайдов.

Обычно это решается с помощью пакетных запросов через Advanced Google Services. К сожалению, нет способа создать запрос на копирование страницы, который можно было бы вставить в пакетную операцию. Если это действительно важно для вашего рабочего процесса, вам следует подумать о запросе функции.

Ссылка

API слайдов

person Alessandro    schedule 04.08.2020