避免多次加载jquery

时间:2012-04-04 07:26:04

标签: javascript jquery html

使用Google Page Speed我可以看到Jquery UI和Jquery以及其他js-library似乎多次加载,即使我只在页面中包含它们一次: enter image description here

我该如何避免这种情况?

更新

我的代码看起来像这样(我删除了html的主要部分,留下了所有的javascript内容):

<!doctype html>
<html lang="en" class="no-js" xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#"
xmlns:fb="http://www.facebook.com/2008/fbml" >
<head id="hdHead"><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><title>
    My Page
</title>
    <!--Utils-->
    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mysite" /><meta name="viewport" content="width=980,initial-scale=1.0,maximum-scale=1.0,user-scalable=yes" />
    <!-- For iPhone 4 with high-resolution Retina display: -->
    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/css/touch/gfx/hs-icons/h/apple-touch-icon.png" />
    <!-- For first-generation iPad: -->
    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/css/touch/gfx/hs-icons/m/apple-touch-icon.png" />
    <!-- For non-Retina iPhone, iPod Touch, and Android 2.1+ devices: -->
    <link rel="apple-touch-icon-precomposed" href="/css/touch/gfx/hs-icons/l/apple-touch-icon-precomposed.png" />
    <!-- For nokia devices: -->
    <link rel="shortcut icon" href="/css/touch/gfx/hs-icons/l/apple-touch-icon.png" /><link rel="shortcut icon" href="/css/gfx/favicon.ico" />
    <!-- W3C way of 2005 for XHTML1.0 http://www.w3.org/2005/10/howto-favicon -->
    <link rel="icon" type="image/png" href="/css/gfx/myspot.ico" />
    <!--Styles-->
    <link href="/plugins/jqueryui/css/custom-theme/jquery-ui-1.8.13.custom.css" rel="stylesheet" type="text/css" /><link rel="stylesheet" href="/css/desktop/myspot.min.css?v=2803" />
    <!--[if lt IE 9]>
    <link rel="stylesheet" href="/css/desktop/myspotoldie.css?v=0114" />
    <![endif]-->
    <!--[if IE]>
    <link rel="stylesheet" href="/css/desktop/myspotie.css?v=0114" />
    <![endif]-->
    <!--scripts (more in page bottom-->
    <script src="/scripts/libs/modernizr-1.7.min.js" type="text/javascript"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.11/jquery-ui.min.js"
        type="text/javascript"></script>
    <script type="text/javascript">
        if (typeof jQuery == 'undefined') {
            console.log("no jquery");
            document.write(unescape('%3Cscript src="/scripts/libs/jquery-1.7.min.js"%3E%3C/script%3E'));
        }
        if (typeof jQuery.ui == 'undefined') {
            console.log("no jquery ui");
            document.write(unescape('%3Cscript src="plugins/jqueryui/jquery-ui-1.8.11.min.js"%3E%3C/script%3E'));
        }
        var defText = 'Restaurant ved åen...';
    </script>
    <script src="/scripts/desktop/behavior.min.js?v=2803" type="text/javascript"></script>
    <script type="text/javascript" src="/scripts/libs/jquery.cookie.js"></script>

    <!--do not move recordOutboundLink to bottom -->
    <script type='text/javascript'>
        var googletag = googletag || {};
        googletag.cmd = googletag.cmd || [];
        (function () {
            var gads = document.createElement('script');
            gads.async = true;
            gads.type = 'text/javascript';
            var useSSL = 'https:' == document.location.protocol;
            gads.src = (useSSL ? 'https:' : 'http:') +
'//www.googletagservices.com/tag/js/gpt.js';
            var node = document.getElementsByTagName('script')[0];
            node.parentNode.insertBefore(gads, node);
        })();
</script>

<script type='text/javascript'>
    googletag.cmd.push(function () {
        googletag.defineSlot('/1025597/Place_main_bottom', [468, 60], 'div-gpt-ad-1328824112752-0').addService(googletag.pubads());
        googletag.defineSlot('/1025597/Place_sidebar_bottom', [160, 600], 'div-gpt-ad-1328824112752-1').addService(googletag.pubads());
        googletag.defineSlot('/1025597/Place_sidebar_middle', [234, 60], 'div-gpt-ad-1328824112752-2').addService(googletag.pubads());
        googletag.defineSlot('/1025597/Search_main_bottom', [468, 60], 'div-gpt-ad-1328824112752-3').addService(googletag.pubads());
        googletag.defineSlot('/1025597/Search_sidebar_1', [234, 60], 'div-gpt-ad-1328824112752-4').addService(googletag.pubads());
        googletag.defineSlot('/1025597/Search_sidebar_2', [234, 60], 'div-gpt-ad-1328824112752-5').addService(googletag.pubads());
        googletag.defineSlot('/1025597/Search_sidebar_3', [234, 60], 'div-gpt-ad-1328824112752-6').addService(googletag.pubads());
        googletag.defineSlot('/1025597/Search_sidebar_4', [234, 60], 'div-gpt-ad-1328824112752-7').addService(googletag.pubads());
        googletag.defineSlot('/1025597/Search_sidebar_5', [234, 60], 'div-gpt-ad-1328824112752-8').addService(googletag.pubads());
        googletag.pubads().enableSingleRequest();
        googletag.enableServices();
    });
</script>


    <script type="text/javascript">
        //Tabs
        jQuery(document).ready(function () {
            jTabs = jQuery("#tabs").tabs({

                select: function (event, ui) {
                    try {
                        var newhasharr = ui.tab.toString().split("#");
                        window.location.hash = newhasharr[1];
                    }
                    catch (err) {
                    }
                }
            });
            LoadTabFromHash();
            function LoadTabFromHash() {
                try {
                    var hash = window.location.hash.replace('#', '');
                    if (hash != '') {
                        jTabs.tabs("select", hash);
                    }
                }
                catch (err) {
                }
            }
            jQuery(".jclickatab").click(function (ev) {
                ev.preventDefault();
                var hash = jQuery(this).attr("href").replace("#", "");
                if (hash != '') {
                    jTabs.tabs("select", hash)
                }
            });
        });
    </script>

        <script type="text/javascript" src="http://yandex.st/jquery/fancybox/1.3.4/jquery.fancybox.min.js"></script>
</head>

<body>

    <form method="post" action="/mypage" onsubmit="javascript:return WebForm_OnSubmit();" id="Form1">
<div class="aspNetHidden">
</div>

<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
ChangeColourOfInvalidControls();
return true;
}
//]]>
</script>

    <div id="fb-root">
    </div>
    <script type="text/javascript">
    window.fbAsyncInit = function () {
        FB.init({
            appId: '139505527456',
            channelUrl: '//www.myspot.dk/channel.html',
            status: true,
            cookie: true,
            xfbml: true  
        });
    };

    // Load the SDK Asynchronously
    (function (d) {
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; }
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/da_DK/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
    } (document));
    </script>


    <div id="container" class="placepage">

            <!-- AddThis Buttons BEGIN -->
            <div class="addthis_toolbox addthis_default_style addthis_32x32_style">
                <a class="addthis_button_facebook_like" fb:like:layout="button_count" fb:like:width="105">
                </a>
            </div>
            <div class="addthis_toolbox addthis_default_style addthis_32x32_style">
                <a class="addthis_button_google_plusone"></a>
            </div>
            <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=myspot"></script>
            <!-- AddThis Buttons END -->
        </div>
<script>
    jQuery(document).ready(function () {
        TidyUpPlaceImages();

        jQuery(".mainplacepix a").fancybox({
            'type': 'image',
            'transitionIn': 'elastic',
            'transitionOut': 'elastic',
            'speedIn': 600,
            'speedOut': 200,
            'titlePosition': 'over',
            'overlayShow': false,
            'showNavArrows': true
        });
    });
    function TidyUpPlaceImages() {
        var mainImageHeight = jQuery(".mainplacepix a:first").height();
        var thumbsHeight = 0;
        jQuery(".mainplacepix a:gt(0)").each(function (index) {
            thumbsHeight += jQuery(this).height();
            if (thumbsHeight <= mainImageHeight) {
                jQuery(this).show();
            }
            else {
                return;
            }
        });
    }
</script>

<script type="text/javascript">

jQuery(document).ready(function () {
    jQuery('#txtReviewBody').keyup(function(event) {
        if(jQuery(this).val().length>50 && !jQuery('#reviewparametercontainer').is(":visible")) {
            jQuery('#reviewparametercontainer').slideDown();
            _gaq.push(['_trackEvent', 'Reviews', 'LenghtAbove50', 'empty']);
        }
    }).blur(function() {
        if(jQuery(this).val().trim().length<1) {
            jQuery('#reviewparametercontainer').slideUp();
            _gaq.push(['_trackEvent', 'Reviews', 'BlurWithoutWriting', 'empty']);
        }
    });
    jQuery(".writeReviewDatePicker").datepicker(
    {
    maxDate: new Date()
    });
})

</script>

<script type="text/javascript">
    var reviewErrorMess = 'Some error';
    var ratingErrorMess = 'Some error';
    var reviewScriptErrorMess = 'Some error';
    function validateReviewForm() {
        var imValid = true;
        var reviewlength = jQuery('#txtReviewBody').val().length;
        var myspotrating = jQuery('#rating input[type="hidden"]').val().length;
        if (reviewlength < 2) {
            setErrorFeedbackToTheRight(jQuery('#txtReviewBody'), reviewErrorMess);
            imValid = false;
        }
        else {
            if (jQuery('#txtReviewBody').val().indexOf('<') > -1) {
                setErrorFeedbackToTheRight(jQuery('#txtReviewBody'), reviewScriptErrorMess);
                imValid = false;
            }
        }
        if (rating < 1) {
            setErrorFeedbackToTheRight(jQuery('#rating'), ratingErrorMess);
            imValid = false;
        }

        return imValid;
    }
    jQuery(document).ready(function () {
        jQuery('#ratingmyspot.error').live('click', function () {
            removeErrorFeedback(jQuery(this));
        });
        jQuery('textarea.error').live('keyup', function () {
            removeErrorFeedback(jQuery(this));
        });
        jQuery('#ddlTypes').change(function (ev) {
            FilterReviewParams(jQuery(this).val());
        });
        FilterReviewParams(jQuery('#ddlTypes').val());
    });
    function FilterReviewParams(categoryId) {
        var selector = '#reviewParameters .ratingcontrol.' + categoryId;
        var jAll = jQuery('#reviewParameters .ratingcontrol:visible');
        if (jAll.length > 0) {
            jAll.hide({
                duration: 1000,
                complete: function () {
                    jQuery(selector).show(1000);
                }
            });
        }
        else {
            jQuery(selector).show(1000);
        }

    }
</script>



<script type="text/javascript">
    jQuery(document).ready(function () {
        jQuery('#listOfOffers input[type="submit"]').button();
        if (jQuery(".offersFromDateTimePicker").length > 0) {
            jQuery(".offersFromDateTimePicker").datetimepicker({
                onSelect: function (selectedDate, sender) {
                    setMinDateTime(selectedDate, ".offersEndDateTimePicker");
                }
            });
            var minDate = jQuery(".offersFromDateTimePicker").val();
            jQuery(".offersEndDateTimePicker").datetimepicker({
                minDate: minDate
            });
        }
    });
</script>
<script type="text/javascript">
    jQuery(document).ready(function () {
        jQuery('#placepageevents input[type="submit"]').button();

        if (jQuery(".eventsFromDateTimePicker").length > 0) {
            jQuery(".eventsFromDateTimePicker").datetimepicker({
                onSelect: function (selectedDate, sender) {
                    setMinDateTime(selectedDate, ".eventsEndDateTimePicker");
                }
            });
            var minDate = jQuery(".eventsFromDateTimePicker").val();
            jQuery(".eventsEndDateTimePicker").datetimepicker({
                minDate: minDate
            });
        }
    });
</script>
        <script type="text/javascript">
            jQuery(document).ready(function () {
                jQuery(".aboutplaceimages a").fancybox({
                    'type': 'image',
                    'transitionIn': 'elastic',
                    'transitionOut': 'elastic',
                    'speedIn': 600,
                    'speedOut': 200,
                    'titlePosition': 'over',
                    'overlayShow': false,
                    'showNavArrows': true
                });
            });
        </script>
        </footer>


    <script src="/scripts/libs/jquery.highlightFade.js" type="text/javascript"></script>
    <script src="/plugins/jqueryui/jquery-ui-timepicker-addon.js" type="text/javascript"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript" src="/scripts/desktop/mygmap.js"></script>
    <script type="text/javascript" src="/scripts/desktop/place.min.js?v=0310a"></script>


    </script>
     <script type='text/javascript'>
        jQuery.ajax({
            url: 'http://demo.easyrec.org:8080/api-js/easyrec.js',
            dataType: "script",
            success: function () {
                if (typeof (easyrec_sendAction) != "undefined") {
                    easyrec_sendAction("view",
                    {
                        itemId: "48863",
                        itemUrl: "/mypage",
                        itemDescription: "Mypage",
                    });
                }
            }
        }); 
    </script>

    <link rel="stylesheet" href="/plugins/jquery.fancybox-1.3.4/fancybox/jquery.fancybox-1.3.4.css"
    type="text/css" media="screen" />
    <script src="/plugins/jqueryui/jquery.ui.datepicker-da.js"     type="text/javascript"></script>
             <script type="text/javascript" src="/scripts/libs/jquery.lazyload.min.js"></script>
    <script type="text/javascript">
        jQuery(document).ready(function () {
            jQuery("img.lazy").lazyload();
        });

</script>



<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
    theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


</form>
</body>
</html>

感谢,

托马斯

2 个答案:

答案 0 :(得分:1)

在解决方案中搜索Jquery.min.js文件,并确保它没有被引用两次。如果您使用母版页或模板,请确保未在该页面上以及您当前正在查看的页面上定义它。

答案 1 :(得分:1)

显然你正在使用/加载jquery,jquery-ui等多个版本,这绝对不是最理想的

例如:

  • jquery-1.7.min.js
  • jquery.min.js(Version 1.7.1)
  • jquery-ui.min.js(Version 1.8.11)
  • ...

此外,以下块似乎已过时,因此请尝试将其删除并从服务器加载js文件,而不是谷歌。

<script type="text/javascript">
    if (typeof jQuery == 'undefined') {
        console.log("no jquery");
        document.write(unescape('%3Cscript src="/scripts/libs/jquery-1.7.min.js"%3E%3C/script%3E'));
    }
    if (typeof jQuery.ui == 'undefined') {
        console.log("no jquery ui");
        document.write(unescape('%3Cscript src="plugins/jqueryui/jquery-ui-1.8.11.min.js"%3E%3C/script%3E'));
    }
    var defText = 'Restaurant ved åen...';
</script>

你正在使用许多第三方库,所以我无法保证,他们也加载了jquery