异步加载Coldfusion javascript?

时间:2016-10-09 01:17:12

标签: javascript asynchronous coldfusion

每当页面加载Coldfusion时,它会加载许多默认的Coldfusion javascripts。当我运行Goolge PageSpeed工具时,它总是抱怨渲染阻止JavaScript。显然,Coldfusion在加载页面时有很多javascript,例如

...scripts/ajax/yui/yahoo-dom-event/yahoo-dom-event.js
...scripts/ajax/yui/aniax/yui/autocomplete/autocomplete-min.js
...scripts/ajax/yui/autocomplete/autocomplete-min.js
...scripts/ajax/messages/cfmessage.js
...scripts/ajax/package/cfajax.js
...scripts/ajax/package/cfautosuggest.js
...scripts/cfform.js
...scripts/masks.js

这些都被认为是渲染阻止脚本。我找不到任何关于如何使它们无渲染阻塞的信息,因为显然我不能将async =“async”参数添加到Coldfusion脚本中,这是我看不到的。如何使Coldfusion脚本无渲染阻塞或者我坚持使用它?

有人可以点灯吗?

1 个答案:

答案 0 :(得分:0)

如果您真的想对此做些什么而不是重写您的UI代码,您实际上可以在将缓冲区输出到客户端并修改之前从缓冲区获取输出。您的修改可以像删除硬编码的脚本标记列表并将其替换为您在webroot中托管的自定义脚本文件一样简单。自定义脚本文件只是所有其他脚本文件的内容组合在一起。

要做到这一点:

  1. 在application.cfc的onRequestEnd中,您可以调用var outputBuffer = getPageContext().popBody().getBuffer(),它将返回要发送给客户端的正文。
  2. outputBuffer上运行替换,查找这些脚本标记并通过正则表达式删除它们。你需要跟踪你是否真的删除了任何用作下一步标志的标志。
  3. 最后,如果已经替换的标志为true,则会使用新的主脚本标记附加到输出。执行此操作后,缓冲区将自动刷新到客户端。
  4. 我相信Adobe不再更新脚本文件,因此您基本上不必担心版本化主脚本文件以清除浏览器缓存。

    编辑/注意:绝对避免使用CF UI的东西,但我们现在还不知道你的情况。如果你有数百或数千小时的重写时间,那么显然重写它可能不是那时实用的东西。