我刚刚使用PHP API与FileMaker Server建立了第一个远程连接,并且发生了一些奇怪的事情。
第一次连接和响应大约需要5秒钟,如果我之后立即重新加载,我会在0.5秒内得到响应。
我可以在大约60秒左右得到一个快速响应(暂时没有时间,但似乎至少一分钟但不到5分钟),然后它回到需要5秒才能得到回应。 (之后又快了)
有没有办法确保它总是快速响应?
答案 0 :(得分:2)
我无法就速度差异的来源给出一个确切的答案,但我同意NATH关于缓存的概念。这可能是由于FileMaker Server如何处理在服务器端缓存结果以及何时清除缓存的结果。
除此之外,还有一些有助于了解在速度方面使用FileMaker进行自定义Web发布时的一些事项:
在特定布局上的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
方法编辑它们。 e.g:
$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();
}
由于您已经拥有记录,因此您可以对其进行操作并在需要时提交它们。
我这样说,而不是为了一个目的抓住它们,然后再从数据库中抓取它们,然后对记录进行更新。
这不是原始问题的答案,但由于FileMaker的API与其他API有点不同,并且它没有最好的文档,但我提到了它。
答案 1 :(得分:0)
我不认为它与缓存有关。此外,通过XML访问时也是如此。 Haven没有对ODBC进行过测试,但我认为这也是一个问题。
与FileMaker Server和您的计算机建立连接后,FileMaker Server会使此连接保持活动状态约3分钟。您可以在FM Server Admin Console的客户端列表中看到该连接。初始连接需要几秒钟的时间来设置(取决于连接的其他数量),然后任何进一步的查询都是快速的。如果您再次运行您的应用,它将重复使用该连接,并在很短的时间内提供结果。
您可以在不同的应用程序中执行完全不同的查询(在不同的表上),但只要您在同一台计算机上执行第二个查询并使用相同的凭据,FileMaker Server将重用现有连接并立即提供结果。这意味着它不是由于缓存,而是FMServer最初建立连接所需的时间。
在我们的案例中,我们使用Web服务器进行FileMaker PHP API调用。我们每隔2分钟设置一个cron来保持连接活动,这几乎消除了所有延迟。
答案 2 :(得分:0)
您可以删除一些延迟。 确保您通过PHP访问的布局非常简单,没有不必要或缓慢的计算,很少布局对象等。当PHP引擎首次访问该布局时,它需要加载它。 还要检查可以运行的布局和文件脚本触发器,IIRC在建立连接时调用OnFirstWindowOpen脚本触发器。
答案 3 :(得分:0)
回答这个问题可能为时已晚,但我会在此发帖,以防其他人看到此内容。
我在使用FileMaker Server进行外部身份验证时发现了这种情况。第一个查询建立与Active Directory的连接,这需要一些时间,然后后续查询很快,因为FMS已经找到了身份验证。如果可以,请在FileMaker文件中使用本地身份验证进行PHP访问,并确保它位于帐户列表中的任何外部身份验证之上。 FileMaker从上到下运行auth列表,因此这将确保FMS在尝试外部身份验证请求之前成功验证您的Web查询,从而使身份验证过程非常快。