在CodeIgniter中放置JS脚本

时间:2013-03-07 14:08:49

标签: javascript performance codeigniter

我是CodeIgniter的新手,目前正在开发几个网站。我相信人们可能对此有不同的看法,但对于为什么会有用的一般共识和解释。

在没有CI等框架的情况下进行开发时,您可以将各种JS操作(侦听器,jQuery调用等)放在页面的页脚中。

对于CI,常规是包括一个共同的页脚和&标题,但如果我们把所有页面的所有JS放在这个页脚中,我们就会调用每个页面上不需要的东西。

解决这个问题的最佳方法是什么?设置它?

4 个答案:

答案 0 :(得分:4)

我对此没有任何经验,但对于我的下一个项目,我可能会尝试Carabiner

来自GitHub project

  

Carabiner管理javascript和CSS资产。它的反应会有所不同,具体取决于它是在生产环境还是开发环境中。在生产环境中,它将组合,缩小和缓存资产。 (随着文件的更改,将生成新的缓存文件。)在开发环境中,它只包含对原始资产的引用。

Carabiner允许你做类似

的事情
// add a js file
$this->carabiner->js('scripts.js');

// add a css file
$this->carabiner->css('reset.css');

在控制器中添加css或js文件,然后在页眉或页脚中输出

// display css
$this->carabiner->display('css');

//display js
$this->carabiner->display('js');

我过去曾经实现了类似的功能,但是这个库看起来很有前途,而且比构建自己的库要少得多。如果我是你,我会明确地检查出来。

答案 1 :(得分:2)

使用应用程序框架不是破坏前端代码的借口。无论谁告诉你“使用CI,标准是包含一个共同的页脚和标题”是一个懒惰的开发者。

我过去做过的事情是这样的:

<强> MY_html_helper.php

<?php
function js($js)
{
    $js_base_path = '';

    if(is_array($js))
    {
        foreach($js as $script_src)
        {
            if(strpos($script_src, 'http://') === false && strpos($script_src, 'https://') === false)
            {
                $js_base_path = base_url() . 'js/';
            }

            echo "<script src=\"{$js_base_path}{$script_src}\"></script>";
        }
    }
    else
    {
        if(strpos($js, 'http://') === false && strpos($js, 'https://') === false)
        {
            $js_base_path = base_url() . 'js/';
        }
        echo "<script src=\"{$js_base_path}{$js}\"></script>";
    }
}
?>

<强> CONTROLLER

// many scripts
$this->load->view('_footer', array('js'=>array('whatever.js', 'plugin.js')));

// or a single script
$this->load->view('_footer', array('js'=>'jquery.cycle.lite.js'));

查看

<?php
if(isset($js))
{
    $this->load->helper('html');
    js($js);
}
?>

<script src="/js/script.js"></script>

不言而喻,但可以根据自己的需要进行自定义。

答案 2 :(得分:1)

我构建的许多网站都不那么繁忙,优先考虑的是易于维护。对于这些情况,我只需加载我需要的所有脚本,通常是jQuery核心和图像旋转器的相关插件等等。

我的观点是,一旦加载了主页,脚本就会被缓存,因此额外的权重并不会对网站性能造成太大影响(特别是对于流量较低的网站)。

但是,更大的问题与jQuery操作有关,这些操作因页面而异。在CodeIgniter中,我在模板类型的方法中使用嵌套视图来呈现页面。我经常发现自己在页面内容部分后面的<script>标记中放入了特定于页面的jQuery操作,但在我的页脚部分之前。不是最好的,但至少我的jQuery动作接近相关的页面元素(通常是表单)。理想情况下,我会创建一个特定于每个页面的javascript文件,并从相关的CodeIgniter控制器加载它。一旦网站/应用程序稳定,我通常会将此作为从第1版到第2版重构的一部分。

顺便说一句,我更关心的是保持我的CSS文件有条理和模块化。我的CSS比我的JS文件更容易出现混乱。

Take-Away:如果您的网站繁忙且性能至关重要,请将逐页脚本内容加载到控制器中,并为全局维护每个页面的JS文件JS文件(类似于CSS)。

如果您的网站不太忙,只需根据需要在主页面模板(或公共页眉和页脚文件)中加载所有脚本和CSS文件。

话虽如此,我宁愿花几分钟时间对事情进行编码,避免在要求重大网站升级的两年后处理重大事件。

作为专业人士,我们努力提高我们的技能和部署策略,但并非每个网站项目都能完美执行,因为所有预算都是有限的,时间有限。在一天结束时,我们会在工作完成后获得报酬,即使不是100%完美。

答案 3 :(得分:0)

我想说你可以做一些事情。您可以将许多不同的页脚链接到不同的脚本,并更改​​控制器中的页脚链接(例如footer-home.php或footer-about.php)。然后只需在标题中保留常规脚本链接。

您还可以为特定页面创建个人脚本,并将它们包含在页面的正文部分(home.php或者在页眉和页脚之间挤压的任何内容)。

我想这取决于脚本的重量以及它们的使用频率。