【问题标题】:CakePHP GET request failing only part of the timeCakePHP GET 请求仅在部分时间失败
【发布时间】:2013-04-23 02:40:02
【问题描述】:

我遇到了一个奇怪的情况,我不太确定从哪里开始寻找。我在前端有一个 knockout.js 表单,在后端有 CakePHP。

截至目前,我将一些 JSON 数据从一个 knockout.js 表单发送到 CakePHP。这个 PHP 做了一些处理,然后将结果以 JSON 格式回显到剔除的 javascript 文件中。

好吧,问题是当我通过 CakePHP 设置这个 PHP 时,它似乎只工作了 1/4 的时间。当我在我的 webroot 中有这个 PHP 文件(只是一个标准文件,与 Cake 无关,因为敲除毕竟与后端无关)时,它 100% 的时间都可以工作。

所以这是两个数据流

Fails frequently: knockout.html -> knockout.js -> CakePHP Controller -> echo in CakePHP view-> knockout.js -> knockout.html

Works 100%: knockout.html -> knockout.js -> PHP in webroot, echo from the same page -> knockout.js -> knockout.html

我只会在我的 webroot 中使用 PHP 文件,但我必须查询数据库以获取一些信息,我希望将所有查询保留给 Cake 而不是外部源。

CakePHP 方法是否可能因为没有足够快地返回结果而花费太长时间而失败?

edit-我更改了控制器,因此没有计算,它只是将一些 JSON 编码的文本传递给视图。这不会产生任何错误,并且 100% 的时间都有效。那么,是否可以肯定地说 CakePHP 花费了太长时间导致错误?我知道一个框架比普通的 PHP 需要更长的时间,但是为什么这会导致它失败呢?我没有做任何激烈的计算。

【问题讨论】:

  • 你能简单解释一下你在做什么样的计算吗?它涉及数据库查询吗?也许通过 requestAction 调用另一个动作?
  • @Headshota 首先我从我的数据库中抓取一个项目,然后我使用 PHPquery 从另一个站点抓取一些内容(其中 3 个实例),这可以理解,这可能需要很短的时间。但是,我不明白为什么 CakePHP 和标准 PHP 文件有如此大的不同。我什至尝试通过将该变量设置为等于预期值并将其用于 PHPquery 来消除 db 查询,但它偶尔仍然会失败,这让我相信 CakePHP 不适用于 PHPquery。
  • @Headshota 我应该澄清一下,我只从数据库中抓取一次内容,然后使用 PHPquery 从外部源抓取项目 3 次。
  • 在我看来这是一个 PHPquery 问题。你有没有在框架之外测试过相同的功能,我很确定,你会得到相同的结果。
  • @Headshota 是的,正如我上面所描述的(查看我制作的小流程图了解更多细节)我在 Cake 之外使用了完全相同的 PHP,它 100% 的时间都可以工作。我没有直接调用 cakephp(比如 cake/items/123),而是直接调用位于我的 webroot 中的文件(items.php?item=123)。

标签: php javascript cakephp knockout.js


【解决方案1】:

我让它以一种非常迂回的方式工作。它现在 100% 的时间都在工作,但我对自己的工作方式并不满意。

正如我所解释的,我在 ItemsController 中使用 PHPQuery。我采用了所有这些逻辑,并在蛋糕结构之外创建了一个单独的 PHP 文件,并且就在我的 webroot 中。因此,它不会为相应的操作调用我的 ItemsController 函数,而是调用 webroot 中的文件。我从这个文件访问数据库,查找我需要的内容,然后执行 PHPQuery 任务。

很奇怪。在 CakePHP 之外 100% 工作。在 CakePHP 函数中使用时失败超过 50% 的时间。我不明白,但至少它正在工作。

【讨论】:

  • 只是想知道,您究竟在使用 PhpQuery 做什么?直接通过 JavaScript/jQuery 获取外部数据不是更快吗?通过 PHP 为每个请求获取外部数据似乎需要很多开销,除非您正在缓存结果
  • 我想这可能是我使用 PHP 的部分原因是为了隐藏一些代码并且因为我必须查询数据库(使用 PHP)。如果我没记错的话,每个人都可以看到 Javascript(至少是一个 .js 文件)
  • 嗯,我注意到 PhpQuery 自 2010 年以来没有收到任何更新。在大多数情况下缓存外部请求是可取的(当然取决于您期望这些外部数据更改的频率)。还要考虑 PHP 的内置 Dom 函数,根据您的要求,这可能足以满足您的目的。请参阅文档DomDocument::loadHTML() 和这个问题How to parse and process HTML/XML
猜你喜欢
  • 1970-01-01
  • 2021-11-05
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多