FileMaker PHP API — почему начальное соединение такое медленное?

Я только что установил свое первое удаленное соединение с FileMaker Server, используя PHP API, и происходит что-то немного странное.

Первое соединение и ответ занимает около 5 секунд, если я сразу же после нажатия кнопки перезагрузки получаю ответ в течение 0,5 секунды.

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

Есть ли способ гарантировать, что это всегда быстрый ответ?

0

Решение

Я не могу дать вам точный ответ о том, откуда может возникнуть разница в скорости, но я бы согласился с понятием NATH о кэшировании. Вероятно, это связано с тем, как FileMaker Server обрабатывает кэширование результатов на стороне сервера и когда очищает этот кэш.

В дополнение к этому, пара вещей, которые полезно знать при использовании пользовательских веб-публикаций с FileMaker, когда дело касается скорости:

Поля на вашем макете будут определять, сколько данных извлекается

Когда вы выполняете поиск в PHP API по определенной раскладке, например:

$request = $fm->newFindCommand('myLayout');
$request->addFindCriterion('name', $myname);
$result = $request->execute();

Возвращаются данные со всех полей, доступных на my layout раскладка.

В терминах SQL, приведенный выше запрос эквивалентен:

SELECT * FROM myLayout WHERE `name` = ?; // and the $myname variable is bound to ?

Поиск FileMaker вернет все доступные поля / столбцы. Вы определяете возвращаемые столбцы, размещая нужные поля в макете. Чтобы получить правду * выберите все из таблицы, вы бы включили все поля таблицы в свой макет.

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

Когда у вас есть записи, держитесь за них, чтобы вы могли редактировать их

Используя приведенный выше пример, если вы знаете, что вам нужно внести изменения в эти записи где-то внизу строки в вашем php, сохраните записи в переменной и используйте setField а также commit методы их редактирования. например.:

$request = $fm->newFindCommand('my layout');
$request->addFindCriterion('name', $myname);
$result = $request->execute();
$records = $result->getRecords();
...
// say we want to update a flag on each of the records down the line in our php code
foreach($records as $record){
$record->setField('active', true);
$record->commit();
}

Поскольку у вас уже есть записи, вы можете использовать их и при необходимости фиксировать.

Я говорю это вместо того, чтобы захватить их один раз для одной цели, а затем снова извлечь их из базы данных, а потом вносить изменения в записи.

Это не совсем ответ на ваш первоначальный вопрос, но, поскольку API FileMaker немного отличается от других, и у него нет лучшей документации, хотя я бы упомянул об этом.

2

Другие решения

Есть некоторые задержки, которые вы можете устранить.
Убедитесь, что макеты, к которым вы получаете доступ через PHP, очень просты, нет ненужных или медленных вычислений, мало объектов макетов и т. Д. Когда механизм PHP впервые обращается к этому макету, он должен загрузить его.
Также проверьте наличие триггеров макета и сценария файла, которые могут быть запущены. IIRC триггер сценария OnFirstWindowOpen вызывается при установлении соединения.

0

Я не думаю, что это связано с кэшированием. Кроме того, то же самое при доступе через XML. Не проверял ODBC, но я предполагаю, что это тоже проблема.

Как только соединение установлено с FileMaker Server и вашим компьютером, FileMaker Server поддерживает это соединение в течение примерно 3 минут. Вы можете увидеть соединение в списке клиентов в консоли администратора FM-сервера. Первоначальное подключение занимает несколько секунд, чтобы установить (в зависимости от того, сколько других подключено), а затем ЛЮБЫЕ дальнейшие запросы молниеносно. Если вы снова запустите приложение, оно будет повторно использовать это соединение и даст результаты за очень короткое время.

Вы можете выполнять совершенно разные запросы (для разных таблиц) в другом приложении, но если вы выполняете второй запрос на том же компьютере и используете те же учетные данные, FileMaker Server будет повторно использовать существующее соединение и мгновенно предоставлять результаты. Это означает, что это происходит не из-за кэширования, а из-за того, что FMServer сначала устанавливает соединение.

В нашем случае мы используем веб-сервер для вызовов API-интерфейса FileMaker PHP. Мы установили cron каждые 2 минуты, чтобы поддерживать связь, что в значительной степени устранило все задержки.

0

Наверное, уже слишком поздно, чтобы ответить на этот вопрос, но я пишу здесь на случай, если кто-то еще увидит это.

Я видел это при использовании внешней аутентификации с FileMaker Server. Первый запрос устанавливает соединение с Active Directory, что занимает некоторое время, а затем последующие запросы выполняются быстро, поскольку FMS выяснила аутентификацию. Если вы можете, используйте локальную аутентификацию в своем файле FileMaker для доступа к PHP и убедитесь, что она находится выше любой внешней аутентификации в вашем списке учетных записей. FileMaker запускает список авторизации сверху вниз, поэтому это гарантирует, что FMS успешно аутентифицирует ваш веб-запрос, прежде чем попытается выполнить запрос на внешнюю аутентификацию, что сделает процесс аутентификации очень быстрым.

0
По вопросам рекламы [email protected]