避免在页面中多次包含样式表/外部js的最佳方法

时间:2011-07-22 08:41:12

标签: php javascript external server-side-includes

我必须清理/维护一些旧的PHP站点文件。有许多主要的PHP页面,包括()其他基于规则的PHP文件。其中一些包含如下所示的行:

<link href="css/styles.css" rel="stylesheet" type="text/css">
<script language="javascript" src="js/functions.js"></script>

在构建php页面之后的某些时间,这些外部文件在同一页面中被多次包含。

这不仅仅是从php包含中移除这些外部文件链接的简单情况,因为有时放置php包含,它是唯一的情况。

是否通过php或js进行某种检查以避免多次出现外部文件?

谢谢:)

5 个答案:

答案 0 :(得分:2)

作为一个简单的黑客,将这些CSS和JS文件添加到PHP文件中,并将require_once放到PHP文件中。这样,只有在尚未包含文件的情况下才会包含该文件。

答案 1 :(得分:0)

据我所知,没有简单的方法可以做到这一点,你可以重新考虑整个代码库,使服务器端包含逻辑只发生在一个文件而不是整个应用程序中。

如果你打开缓存并设置正确的标题,我相信一旦外部文件已经被缓存,浏览器就不会在后续请求同一文件时尝试重新下载。

答案 2 :(得分:0)

您可以在变量中记录某个文件的导入(例如上面示例中的“styles.css”)(例如$ styles_loaded = true或更好,$ LoadedImports ['styles'] = true)并检查in all包含该变量的值。这样你就会知道是否要导入某个文件。或者像andreas建议的那样重构。

答案 3 :(得分:0)

你可以使用PHP并在包含文件时定义常量,如果你总是只在PHP中加载它们,或者也许是javascript。

这可以作为PHP解决方案使用:

function checkJSLoad($var){
    if(!defined($var)){
        define($var, 1);
        return false;
    } else {
        return true;
    }
}

function javascriptLoad($location, $defined = ''){
    if(!$defined) { $defined = 'JS_' . $location; }

    if( !checkJSLoad($defined) ){
        return '<script type="text/javascript" src="'.$location.'"></script>';
    }   
}

然后你可以像这样调用它:javascript_load('/ jquery.js','jquery');这将回显出js文件的正确标记。

你可以用css做类似的事情

答案 4 :(得分:0)

使用http://api.jquery.com/jQuery.getScript/动态加载JS 或其他图书馆的类似功能。

在js中定义变量$ MY_LIBRARY_IDENTIFIER 如果已定义,则跳过其他加载js