Ajax回调最快的方法/实现是什么?


18

我有一张地图,它通过ajax在各种/众多的地图事件上加载标记。当前,我为我的hook_menu()项目定义了一个自定义页面回调,该回调将打印json / js。

由于我的页面回调不返回任何内容而仅打印内容,因此Drupal不会呈现完整的模板,菜单等,因此允许我使用JavaScript 返回页面。

尽管这确实可行,但我相信Drupal仍然可以完全启动,这意味着我要减少很多开销。

我一直在研究高性能JavaScript回调处理程序,该处理程序自称为“高性能JavaScript回调处理程序”,简而言之,它看起来像是在js.php向您index.php定向请求并自定义/限制/优化默认情况下的Drupal引导程序。

不幸的是,js项目还没有D7版本(请在此处发布),这使我们进入了一个开始……

在Drupal中实现Ajax回调的最快方法是什么?

Answers:


8

我为我的hook_menu()项目定义了一个自定义页面回调,该回调将打印json / js。

这就是Drupal 6所提供的。在Drupal 7的AJAX框架可以做多一点比。是的,它引导了Drupal,但是它也免费提供了许多功能。简而言之,您可以将ajax_deliver()用作页面传递方法,并将命令发送到浏览器。

...可以通过向按钮和链接添加类来启用Ajax。通过将“ use-ajax”类添加到链接,该链接将通过Ajax调用加载。使用此方法时,链接的href可以包含“ / nojs /”作为路径的一部分。当Ajax框架发出请求时,它将把它转换为'/ ajax /'。然后,服务器可以轻松判断此请求是通过实际的Ajax请求发出还是处于降级状态,并进行适当的响应。

但是,如果您出于性能原因想避开该框架,那么没有什么可以阻止您直接从javascript调用模块中的php文件。您不会得到Drupal的好处,但是您也可以完全控制该页面。


谢谢!无论性能如何,我真的应该使用Ajax框架(现在我知道它)b / c在这种情况下可能会对ajax页面请求过程进行任何改进:)
–lectblake

2
看一下示例模块,它们将对您有很大帮助,该框架面向表单,但可以在任何地方使用。我已经对“ use-ajax”类做了一些编辑。
杰里米·法兰西

3
有时直接调用PHP文件是可以的。您甚至可以使该文件包含bootstrap.inc,然后将api.drupal.org/api/drupal/includes--bootstrap.inc/function/…调用到所需的特定级别。
greggles

4

有点晚了,但是特别是如果您使用该ajax回调进行轮询(例如,检查新消息),则有一个有趣的选择:Drupal node.js集成

除了轮询以外,它还允许您构建一个类似事件的系统,在该系统中,用户(即页面上的JS)保持与node.js服务器的开放连接。如果发生任何事情,您可以通过node.js直接通知所有用户。


永远不要太迟,没有很棒的建议-甚至从未想过将node.js用于此类事情,但突然间就有意义了,谢谢!
埃雷布雷克

3

由于您想在Drupal中实现Ajax回调,因此使用JS模块看起来是一个不错的选择。我只是快速浏览了一下代码,这基本上就是我所建议的内容(但更多地关注细节)。维护者也是Drupal顶级开发人员之一。

如果您需要使用其他模块的API,则似乎必须使用module_load_include()或更手动的include 'sites/all/modules/contrib/...';方法。

您正在谈论的这个问题最近一直是一个热门话题。Dries在DrupalCon Chicago的主题演讲中谈到了Drupal 8如何需要更好的API来执行回调和非HTML输出格式。


因此,简而言之-继续研究JS.php和do / project / js吗?我将开始就D7版本的问题提出申诉。感谢您的视频!
electblake

是的,真遗憾,JS项目尚未移植到D7。可惜它很难获得轻量级的页面请求。
马特·柯林斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.