WordPress.org

Make WordPress Core

Changeset 10442


Ignore:
Timestamp:
01/26/09 12:59:10 (5 years ago)
Author:
azaozz
Message:

Improvements to the script loader: allows plugins to queue scripts for the front end head and footer, adds hooks for server side caching of compressed scripts, adds support for ENFORCE_GZIP constant (deflate is used by default since it's faster), see #8628, fixes #8884

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/template.php

    r10424 r10442  
    33963396 
    33973397/** 
    3398  * Test support for compressed JavaScript and CSS 
     3398 * Test support for compressing JavaScript from PHP 
    33993399 * 
    34003400 * Outputs JavaScript that tests if compression from PHP works as expected 
     
    34073407function compression_test() { 
    34083408?> 
    3409     <script type="text/javascript" src="load-scripts.php?test=1"></script> 
     3409    <script type="text/javascript" src="load-scripts.php?test=1<?php echo ( defined('ENFORCE_GZIP') && ENFORCE_GZIP ) ? '&c=gzip' : ''; ?>"></script> 
    34103410    <script type="text/javascript"> 
    34113411    /* <![CDATA[ */ 
  • trunk/wp-admin/load-scripts.php

    r10372 r10442  
    9393        exit(''); 
    9494 
    95     if ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') && function_exists('gzencode') ) { 
     95    $out = 'var wpCompressionTest = 1;'; 
     96    $force_gzip = ( isset($_GET['c']) && 'gzip' == $_GET['c'] ); 
     97 
     98    if ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'deflate') && function_exists('gzdeflate') && ! $force_gzip ) { 
     99        header('Content-Encoding: deflate'); 
     100        $out = gzdeflate( $out, 3 ); 
     101    } elseif ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') && function_exists('gzencode') ) { 
    96102        header('Content-Encoding: gzip'); 
    97         $out = gzencode( 'var wpCompressionTest = 1;', 3 ); 
     103        $out = gzencode( $out, 3 ); 
     104    } else { 
     105        exit(''); 
    98106    } 
    99      
    100     if ( ! isset($out) ) 
    101         exit(''); 
    102      
     107 
    103108    header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' ); 
    104109    header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); 
     
    119124require(ABSPATH . '/wp-includes/version.php'); 
    120125 
    121 $compress = ( isset($_GET['c']) && 1 == $_GET['c'] ); 
     126$compress = ( isset($_GET['c']) && $_GET['c'] ); 
     127$force_gzip = ( $compress && 'gzip' == $_GET['c'] ); 
    122128$expires_offset = 31536000; 
    123129$out = ''; 
     
    138144header("Cache-Control: public, max-age=$expires_offset"); 
    139145     
    140 if ( $compress && ! ini_get('zlib.output_compression') && function_exists('gzencode') ) { 
     146if ( $compress && ! ini_get('zlib.output_compression') ) { 
    141147    header('Vary: Accept-Encoding'); // Handle proxies 
    142     if ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') ) { 
     148    if ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'deflate') && function_exists('gzdeflate') && ! $force_gzip ) { 
     149        header('Content-Encoding: deflate'); 
     150        $out = gzdeflate( $out, 3 ); 
     151    } elseif ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') && function_exists('gzencode') ) { 
    143152        header('Content-Encoding: gzip'); 
    144153        $out = gzencode( $out, 3 ); 
  • trunk/wp-admin/load-styles.php

    r10372 r10442  
    9898    exit; 
    9999 
    100 $compress = ( isset($_GET['c']) && 1 == $_GET['c'] ); 
    101 $rtl = ( isset($_GET['rtl']) && 1 == $_GET['rtl'] ); 
     100$compress = ( isset($_GET['c']) && $_GET['c'] ); 
     101$force_gzip = ( $compress && 'gzip' == $_GET['c'] ); 
     102$rtl = ( isset($_GET['dir']) && 'rtl' == $_GET['dir'] ); 
    102103$expires_offset = 31536000; 
    103104$out = ''; 
     
    127128header("Cache-Control: public, max-age=$expires_offset"); 
    128129     
    129 if ( $compress && ! ini_get('zlib.output_compression') && function_exists('gzencode') ) { 
     130if ( $compress && ! ini_get('zlib.output_compression') ) { 
    130131    header('Vary: Accept-Encoding'); // Handle proxies 
    131     if ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') ) { 
     132    if ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'deflate') && function_exists('gzdeflate') && ! $force_gzip ) { 
     133        header('Content-Encoding: deflate'); 
     134        $out = gzdeflate( $out, 3 ); 
     135    } elseif ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') && function_exists('gzencode') ) { 
    132136        header('Content-Encoding: gzip'); 
    133137        $out = gzencode( $out, 3 ); 
  • trunk/wp-includes/class.wp-scripts.php

    r10367 r10442  
    2727    var $print_html = ''; 
    2828    var $print_code = ''; 
    29     var $src = ''; 
     29    var $ext_handles = ''; 
     30    var $ext_version = ''; 
    3031    var $default_dirs; 
    3132 
     
    100101            if ( $this->in_default_dir($srce) ) { 
    101102                $this->print_code .= $this->print_scripts_l10n( $handle, false ); 
    102                 $this->concat .= $handle . ','; 
    103                 $this->concat_version .= $ver; 
     103                $this->concat .= "$handle,"; 
     104                $this->concat_version .= "$handle$ver"; 
    104105                return true; 
     106            } else { 
     107                $this->ext_handles .= "$handle,"; 
     108                $this->ext_version .= "$handle$ver"; 
    105109            } 
    106110        } 
     
    111115        } 
    112116 
    113         $this->src .= "$src,"; 
    114117        $src = add_query_arg('ver', $ver, $src); 
    115118        $src = clean_url(apply_filters( 'script_loader_src', $src, $handle )); 
     
    147150    } 
    148151 
    149     function all_deps( $handles, $recursion = false ) { 
     152    function all_deps( $handles, $recursion = false, $group = false ) { 
    150153        $r = parent::all_deps( $handles, $recursion ); 
    151154        if ( !$recursion ) 
     
    182185        return false; 
    183186    } 
     187 
     188    function reset() { 
     189        $this->do_concat = false; 
     190        $this->print_code = ''; 
     191        $this->concat = ''; 
     192        $this->concat_version = ''; 
     193        $this->print_html = ''; 
     194        $this->ext_version = ''; 
     195        $this->ext_handles = ''; 
     196    } 
    184197} 
  • trunk/wp-includes/class.wp-styles.php

    r10357 r10442  
    4242        if ( $this->do_concat ) { 
    4343            if ( $this->in_default_dir($this->registered[$handle]->src) && !isset($this->registered[$handle]->extra['conditional']) && !isset($this->registered[$handle]->extra['alt']) ) { 
    44                 $this->concat .= $handle . ','; 
    45                 $this->concat_version .= $ver; 
     44                $this->concat .= "$handle,"; 
     45                $this->concat_version .= "$handle$ver"; 
    4646                return true; 
    4747            } 
     
    8989    } 
    9090 
    91     function all_deps( $handles, $recursion = false ) { 
     91    function all_deps( $handles, $recursion = false, $group = false ) { 
    9292        $r = parent::all_deps( $handles, $recursion ); 
    9393        if ( !$recursion ) 
  • trunk/wp-includes/default-filters.php

    r10377 r10442  
    165165 
    166166// Actions 
     167add_action('wp_head', 'wp_enqueue_scripts', 1); 
    167168add_action('wp_head', 'feed_links_extra', 3); 
    168169add_action('wp_head', 'rsd_link'); 
     
    171172add_action('publish_future_post', 'check_and_publish_future_post', 10, 1); 
    172173add_action('wp_head', 'noindex', 1); 
    173 add_action('wp_head', 'wp_print_styles', 9); 
    174 add_action('wp_head', 'wp_print_scripts'); 
     174add_action('wp_head', 'wp_print_styles', 8); 
     175add_action('wp_head', 'wp_print_head_scripts', 9); 
    175176add_action('wp_head', 'wp_generator'); 
     177add_action('wp_footer', 'wp_print_footer_scripts'); 
    176178if(!defined('DOING_CRON')) 
    177179    add_action('init', 'wp_cron'); 
     
    183185add_action('do_robots', 'do_robots'); 
    184186add_action('sanitize_comment_cookies', 'sanitize_comment_cookies'); 
    185 add_action('admin_print_scripts', 'wp_print_head_scripts', 20); 
    186 add_action('admin_print_footer_scripts', 'wp_print_footer_scripts', 20); 
    187 add_action('admin_print_styles', 'wp_print_admin_styles', 20); 
     187add_action('admin_print_scripts', 'print_head_scripts', 20); 
     188add_action('admin_print_footer_scripts', 'print_footer_scripts', 20); 
     189add_action('admin_print_styles', 'print_admin_styles', 20); 
    188190add_action('init', 'smilies_init', 5); 
    189191add_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 ); 
  • trunk/wp-includes/script-loader.php

    r10441 r10442  
    527527 
    528528/** 
    529  * Print the script queue in the HTML head. 
     529 * Prints the script queue in the HTML head on admin pages. 
    530530 * 
    531531 * Postpones the scripts that were queued for the footer. 
    532  * wp_print_footer_scripts() has to be called in the footer to print these scripts. 
    533  * 
    534  * @since unknown 
     532 * print_footer_scripts() is called in the footer to print these scripts. 
     533 * 
     534 * @since 2.8 
    535535 * @see wp_print_scripts() 
    536536 */ 
    537 function wp_print_head_scripts() { 
    538     do_action( 'wp_print_scripts' ); 
     537function print_head_scripts() { 
     538    if ( ! did_action('wp_print_scripts') ) 
     539        do_action('wp_print_scripts'); 
     540 
    539541    global $wp_scripts, $concatenate_scripts; 
    540542 
     
    542544        $wp_scripts = new WP_Scripts(); 
    543545 
    544     if ( ! isset($concatenate_scripts) ) 
    545         script_concat_settings(); 
    546  
     546    script_concat_settings(); 
    547547    $wp_scripts->do_concat = $concatenate_scripts; 
    548548    $wp_scripts->do_head_items(); 
     
    551551        _pring_scripts(); 
    552552 
    553     $wp_scripts->do_concat = false; 
    554     $wp_scripts->print_code = $wp_scripts->concat = $wp_scripts->concat_version = $wp_scripts->print_html = $wp_scripts->src = ''; 
     553    $wp_scripts->reset(); 
    555554    return $wp_scripts->done; 
    556555} 
    557556 
    558557/** 
    559  * Print the scripts that were queued for the footer. 
    560  * 
    561  * @since unknown 
    562  */ 
    563 function wp_print_footer_scripts() { 
     558 * Prints the scripts that were queued for the footer on admin pages. 
     559 * 
     560 * @since 2.8 
     561 */ 
     562function print_footer_scripts() { 
    564563    global $wp_scripts, $concatenate_scripts; 
    565564 
     
    567566        return array(); // No need to run if not instantiated. 
    568567 
    569     if ( ! isset($concatenate_scripts) ) 
    570         script_concat_settings(); 
    571  
     568    script_concat_settings(); 
    572569    $wp_scripts->do_concat = $concatenate_scripts; 
    573570    $wp_scripts->do_footer_items(); 
     
    576573        _pring_scripts(); 
    577574 
    578     $wp_scripts->do_concat = false; 
    579     $wp_scripts->concat = $wp_scripts->concat_version = $wp_scripts->print_code = $wp_scripts->print_html = $wp_scripts->src = ''; 
     575    $wp_scripts->reset(); 
    580576    return $wp_scripts->done; 
    581577} 
     
    585581 
    586582    $zip = $compress_scripts ? 1 : 0; 
     583    if ( $zip && defined('ENFORCE_GZIP') && ENFORCE_GZIP ) 
     584        $zip = 'gzip'; 
    587585 
    588586    if ( !empty($wp_scripts->concat) ) { 
     
    596594        } 
    597595 
    598         $ver = md5("$wp_scripts->concat" . "$wp_scripts->concat_version"); 
    599         $src = $wp_scripts->base_url . "/wp-admin/load-scripts.php?c={$zip}&load=" . rtrim($wp_scripts->concat, ',') . "&ver=$ver"; 
     596        $ver = md5("$wp_scripts->concat_version"); 
     597        $src = $wp_scripts->base_url . "/wp-admin/load-scripts.php?c={$zip}&load=" . trim($wp_scripts->concat, ', ') . "&ver=$ver"; 
    600598        echo "<script type='text/javascript' src='$src'></script>\n"; 
    601599    } 
     
    603601    if ( !empty($wp_scripts->print_html) ) 
    604602        echo $wp_scripts->print_html; 
    605  
    606 } 
    607  
    608 function wp_print_admin_styles() { 
     603} 
     604 
     605/** 
     606 * Prints the script queue in the HTML head on the front end. 
     607 * 
     608 * Postpones the scripts that were queued for the footer. 
     609 * wp_print_footer_scripts() is called in the footer to print these scripts. 
     610 * 
     611 * @since 2.8 
     612 */ 
     613function wp_print_head_scripts() { 
     614    if ( ! did_action('wp_print_scripts') ) 
     615        do_action('wp_print_scripts'); 
     616 
     617    global $wp_scripts; 
     618     
     619    if ( !is_a($wp_scripts, 'WP_Scripts') ) 
     620        return array(); // no need to run if nothing is queued 
     621     
     622    return print_head_scripts(); 
     623} 
     624 
     625/** 
     626 * Prints the scripts that were queued for the footer on the front end. 
     627 * 
     628 * @since 2.8 
     629 */ 
     630function wp_print_footer_scripts() { 
     631    return print_footer_scripts(); 
     632} 
     633 
     634/** 
     635 * Wrapper for do_action('wp_enqueue_scripts') 
     636 *   
     637 * Allows plugins to queue scripts for the front end using wp_enqueue_script(). 
     638 * Runs first in wp_head() where all is_home(), is_page(), etc. functions are available. 
     639 * 
     640 * @since 2.8 
     641 */ 
     642function wp_enqueue_scripts() { 
     643    do_action('wp_enqueue_scripts'); 
     644} 
     645 
     646function print_admin_styles() { 
    609647    global $wp_styles, $concatenate_scripts, $compress_css; 
    610648 
     
    612650        $wp_styles = new WP_Styles(); 
    613651 
    614     if ( ! isset($concatenate_scripts) ) 
    615         script_concat_settings(); 
    616  
     652    script_concat_settings(); 
    617653    $wp_styles->do_concat = $concatenate_scripts; 
    618654    $zip = $compress_css ? 1 : 0; 
     655    if ( $zip && defined('ENFORCE_GZIP') && ENFORCE_GZIP ) 
     656        $zip = 'gzip'; 
    619657 
    620658    $wp_styles->do_items(false); 
     
    622660    if ( apply_filters('print_admin_styles', true) ) { 
    623661        if ( !empty($wp_styles->concat) ) { 
    624             $ver = md5("$wp_styles->concat" . "$wp_styles->concat_version"); 
    625             $rtl = 'rtl' === $wp_styles->text_direction ? 1 : 0; 
    626             $href = $wp_styles->base_url . "/wp-admin/load-styles.php?c={$zip}&rtl={$rtl}&load=" . rtrim($wp_styles->concat, ',') . "&ver=$ver"; 
     662            $dir = $wp_styles->text_direction; 
     663            $ver = md5("$wp_styles->concat_version{$dir}"); 
     664            $href = $wp_styles->base_url . "/wp-admin/load-styles.php?c={$zip}&dir={$dir}&load=" . trim($wp_styles->concat, ', ') . "&ver=$ver"; 
    627665            echo "<link rel='stylesheet' href='$href' type='text/css' media='all' />\n"; 
    628666        } 
     
    640678    global $concatenate_scripts, $compress_scripts, $compress_css; 
    641679 
    642     $concatenate_scripts = defined('CONCATENATE_SCRIPTS') ? CONCATENATE_SCRIPTS : true; 
    643     if ( $concatenate_scripts && -1 == get_option('concatenate_scripts') ) 
    644         $concatenate_scripts = false; 
    645  
    646     $compress_scripts = defined('COMPRESS_SCRIPTS') ? COMPRESS_SCRIPTS : true; 
    647     if ( $compress_scripts && ! get_option('can_compress_scripts') ) 
    648         $compress_scripts = false; 
    649  
    650     $compress_css = defined('COMPRESS_CSS') ? COMPRESS_CSS : true; 
    651     if ( $compress_css && ! get_option('can_compress_scripts') ) 
    652         $compress_css = false; 
     680    if ( ! isset($concatenate_scripts) ) { 
     681        $concatenate_scripts = defined('CONCATENATE_SCRIPTS') ? CONCATENATE_SCRIPTS : true; 
     682        if ( ! is_admin() || ( $concatenate_scripts && -1 == get_user_option('concatenate_scripts') ) ) 
     683            $concatenate_scripts = false; 
     684    } 
     685 
     686    if ( ! isset($compress_scripts) ) { 
     687        $compress_scripts = defined('COMPRESS_SCRIPTS') ? COMPRESS_SCRIPTS : true; 
     688        if ( $compress_scripts && ! get_option('can_compress_scripts') ) 
     689            $compress_scripts = false; 
     690    } 
     691 
     692    if ( ! isset($compress_css) ) { 
     693        $compress_css = defined('COMPRESS_CSS') ? COMPRESS_CSS : true; 
     694        if ( $compress_css && ! get_option('can_compress_scripts') ) 
     695            $compress_css = false; 
     696    } 
    653697} 
    654698 
Note: See TracChangeset for help on using the changeset viewer.