Sai*_*akR 1 php asynchronous cakephp cakephp-1.3
在Google的PageSpeed报告中,有一些阻止Javascript需要异步.从这篇文章我知道我必须将async属性放在我的脚本标记中:
<script async src="http://third-party.com/resource.js"></script>
Run Code Online (Sandbox Code Playgroud)
在cakePHP中,我无法完全实现这一点,我只能得到:
<script async="async" src="http://third-party.com/resource.js"></script>
Run Code Online (Sandbox Code Playgroud)
使用Html的脚本方法如下:
$html->script(array('jsfile1', 'jsfile2'), array('async' => 'async'));
Run Code Online (Sandbox Code Playgroud)
我尝试了array('async')但它在脚本标签中打印出0 ='0'
我怎么能让它只async在脚本标签中打印.另外,我怎么能在css的链接标签中提供它呢?
注意:我使用CakePHP 1.3x
检查源代码表明没有办法实现这样的标记,因为很明显属性的格式是%s="%s".
如果你真的需要这个我认为现在最简单的方法是HtmlHelper通过扩展核心来提供你自己的定制HtmlHelper,并覆盖这个_formatAttribute功能:
注意:这仅适用于CakePHP 1.3.x,并且它非常混乱,因为它无法className在helpers数组中指定.CakePHP 2.x提供了一种更简洁的覆盖默认核心助手的方法,但它不是OP想要的,所以我不会把它放在这里
创建app/views/helpers/custom_html.php:
<?php
App::import('Helper', 'Html');
class CustomHtmlHelper extends HtmlHelper {
function __formatAttribute($key, $value, $escape = true) {
if (in_array($key, array('async', 'defer'))) {
return $key;
}
return parent::__formatAttribute($key, $value, $escape);
}
}
Run Code Online (Sandbox Code Playgroud)在你app_controller.php或任何需要它的主控制器中,使用CustomHtmlHelperby:
var $helpers = array('CustomHtml');
Run Code Online (Sandbox Code Playgroud)在您看来,您现在可以开始使用async或defer标记.如果您认为合适,请随意扩展此阵列.
echo $this->CustomHtml->script('test', array('async' => 'async'));
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1757 次 |
| 最近记录: |