加载多个Java脚本

时间:2013-05-08 作者:Simon Cooper

我需要加载三个Javascript脚本-

  • imagesLoaded.js
  • lazyload-1.8.4.js
  • cd.js
cd.js 包含使用imagesLoaded.jslazyload-1.8.4.js.

是全部加载还是单独加载?

function add_my_script() {
  wp_enqueue_script(
    \'imagesLoaded\',
    get_template_directory_uri() . \'/js/imagesLoaded.js\', 
    array(\'jquery\'),
    \'lazyload\',
    get_template_directory_uri() . \'/js/lazyload-1.8.4.js\',
    array(\'jquery\'),
    \'cd\',
    get_template_directory_uri() . \'/js/cd.js\',
    array(\'jquery\')                     
  );
}   
add_action( \'wp_enqueue_scripts\', \'add_my_script\' );
有效的代码
            add_action( \'wp_enqueue_scripts\', \'add_my_script\' );

            function add_my_script() {
                wp_register_script(\'imagesLoaded\',get_template_directory_uri() . \'/js/imagesLoaded.js\', array(\'jquery\'),true);
                wp_register_script(\'lazyload\',get_template_directory_uri() . \'/js/lazyload-1.8.4.js\', array(\'jquery\'),true);
                wp_register_script(\'cd\',get_template_directory_uri() . \'/js/cd.js\', array(\'jquery\',\'imagesLoaded\',\'lazyload\'),true);
                wp_enqueue_script(\'imagesLoaded\');
                wp_enqueue_script(\'lazyload\');
                wp_enqueue_script(\'cd\');
            }

3 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我尽我所能格式化了代码,一旦格式化,它显然是非常破碎的。wp_enqueue_script 采用5个参数。你有9个。前五项中有几项是错误的。我希望你会看到错误,如果你debugging enabled.

您似乎试图将所有脚本都排在同一个队列中wp_enqueue_script. 你不能那样做。也许这就是你要问的,但问题并不十分清楚。

function add_my_script() {
  wp_enqueue_script(
    \'imagesLoaded\',
    get_template_directory_uri() . \'/js/imagesLoaded.js\', 
    array(\'jquery\')
  );
  wp_enqueue_script(
    \'lazyload\',
    get_template_directory_uri() . \'/js/lazyload-1.8.4.js\',
    array(\'jquery\')
  );
  wp_enqueue_script(
    \'cd\',
    get_template_directory_uri() . \'/js/cd.js\',
    array(\'jquery\',\'imagesLoaded\',\'lazyload\')                     
  );
}   
add_action( \'wp_enqueue_scripts\', \'add_my_script\' );
我还补充道imagesloadedlazyload 作为的依赖项cd, 我认为这是正确的。我不知道imagesloaded 取决于lazyload 或者反过来,但是如果您要注册/排队(您应该这样做),那么请正确地使用依赖项杂耍。这是该系统最棒的地方之一。

SO网友:Chip Bennett

作为@s\\u ha\\u dum答案的必然结果,您还可以注册具有分层声明依赖项的脚本,然后将最终脚本排队。大概是这样的:

function add_my_script() {

    // Register first script, dependent on jQuery
     wp_register_script(
         \'imagesLoaded\',
         get_template_directory_uri() . \'/js/imagesLoaded.js\', 
         array( \'jquery\' )
     );

    // Register second script, dependent on first script
     wp_register_script(
         \'lazyload\',
         get_template_directory_uri() . \'/js/lazyload-1.8.4.js\',
         array( \'imagesLoaded\' )
      );

    // Enqueue third script, dependent on second script
     wp_enqueue_script(
         \'cd\',
         get_template_directory_uri() . \'/js/cd.js\',
         array( \'lazyload\' )                     
     );
}   
add_action( \'wp_enqueue_scripts\', \'add_my_script\' );
从功能上来说,这真的没有什么区别;这主要是偏好的问题。我喜欢为每个脚本显式声明所有依赖项,但这种方法更为简捷。

SO网友:user2116497

var scrArr = [
    [ get_template_directory_uri() . \'/js/imagesLoaded.js\',false],
    [ get_template_directory_uri() . \'/js/lazyload-1.8.4.js\',true],
    [ get_template_directory_uri() . \'/js/cd.js\',true]
];

var scrArrSrl = []; // js Serial   Load Array
var scrArrPrl = []; // js Parallel Load Array

while (scrArr.length) {
    var scrArrEl = scrArr.shift();
    if (scrArrEl[1]) {
        scrArrSrl.push(scrArrEl[0]);
    } else {
        scrArrPrl.push(scrArrEl[0]);
    }
}

creScrSrl = function(src,id,par,typ) {
    id = id || src.split(\'/\').pop().split(\'.\').slice(0,-1).join(\'.\');
    var newScr = document.getElementById(id);
    if (!newScr) {
        newScr = document.createElement(\'script\');
        newScr.id=id;
        if (!!typ) {newScr.type = typ};
        newScr.src = src;
        par = par || document.head;
        newScr.onload = function () {
            if (scrArrSrl.length) {creScrSrl(scrArrSrl.shift())}
        }
        par.appendChild(newScr);
    } 
}

creScrPrl = function(src,id,par,typ) {
    id = id || src.split(\'/\').pop().split(\'.\').slice(0,-1).join(\'.\');
    var newScr = document.getElementById(id);
    if (!newScr) {
        newScr = document.createElement(\'script\');
        newScr.id=id;
        if (!!typ) {newScr.type = typ};
        newScr.src = src;
        par = par || document.head;
        par.appendChild(newScr);
    } 
}

creScrSrl(scrArrSrl.shift());

while (scrArrPrl.length) {creScrPrl(scrArrPrl.shift())}
就我而言,cd.js 将等到lazyload-1.8.4.js 已加载。但是lazyload-1.8.4.js 不会等待imagesLoaded.js 负载所以cd.js 不会等待imagesLoaded.js 也是,因为他们之间没有链条。

我在代码中使用它,它可以工作,但速度不是很快。

onLoadInit.js File in GitHub, 我使用同样的逻辑。

Timeline for Performance

如果你需要更快的速度,我想你应该使用Promise,CustomEvent

结束

相关推荐

加载下一代图库时出现JavaScript错误

我正在使用NextGEN Gallery 和NextGEN GalleryView. (Editors Note: Not sure what this sentence means)<但是我无法获取那些被隐藏的图像。当我检查css和js文件时,当我签入firebug时,所有文件都包括在内。下面显示了错误:jQuery.timer is undefined ...for: http://192.168.1.210/hotel.com/wp-content/plugins/nggGallery