1

我对 CodeIgniter 还很陌生,目前正在开发几个站点。我敢肯定,人们可能对此有不同的看法,但就原因达成普遍共识和解释会很有用。

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

对于 CI,规范是包含一个通用的页脚和页眉,但是如果我们将所有页面的所有 JS 放在这个页脚中,我们就会调用每个页面上不需要的东西。

解决此问题/设置此问题的最佳方法是什么?

4

4 回答 4

4

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

来自GitHub 项目

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');

我过去确实实现了类似的东西,但是这个库看起来很有希望,而且比我自己构建的努力少得多。如果我是你,我会明确地检查一下。

于 2013-03-07T14:31:05.120 回答
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>";
    }
}
?>

控制器

// 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>

不用说,但可以随意定制它以满足您的需求。

于 2013-03-07T14:43:29.983 回答
1

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

我的观点是,一旦主页被加载,脚本就会被缓存,因此额外的权重并不会真正影响网站性能(尤其是对于流量较低的网站)。

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

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

要点:如果您有一个繁忙的站点并且性能很关键,则将逐页脚本加载到您的控制器中,并在全局 JS 文件之外为每个页面维护一个 JS 文件(对于 CSS 也是如此)。

如果您的站点不那么繁忙,只需根据需要加载主页模板(或通用页眉和页脚文件)中的所有脚本和 CSS 文件。

话虽如此,我宁愿花几分钟正确编码,避免在两年后请求重大站点升级时处理大混乱。

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

于 2013-03-07T14:51:27.273 回答
0

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

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

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

于 2013-03-07T14:23:07.737 回答