Test a JS file to see if it compresses well.

Paramètres

array $filenames_info: Array of filenames and info from advagg_get_info_on_file().

array $compressors: (Optional) List of compressors to test.

Return value

array Info about the file.

2 calls to advagg_js_compress_run_mutiple_tests()
advagg_js_compress_advagg_get_info_on_files_alter dans advagg_js_compress/advagg_js_compress.advagg.inc
Implements hook_advagg_get_info_on_files_alter().
advagg_js_compress_redo_files dans advagg_js_compress/advagg_js_compress.module
Get all js files and js files that are not compressed.

Fichier

advagg_js_compress/advagg_js_compress.advagg.inc, line 791

Code

function advagg_js_compress_run_mutiple_tests(array $filenames_info, array $compressors = array()) {
    // Get the info on this file.
    module_load_include('inc', 'advagg', 'advagg');
    $compressor_list = advagg_js_compress_get_enabled_compressors(array(), -1);
    // Build list of compressors.
    if (empty($compressors)) {
        $compressors = $compressor_list;
    }
    // Prevent PHP from running out of time if working with a lot of files.
    if (count($filenames_info) > 5) {
        // Set to max time if running from the command line.
        if (drupal_is_cli()) {
            drupal_set_time_limit(0);
        }
        else {
            $max_execution_time = ini_get('max_execution_time');
            if ($max_execution_time != 0) {
                $current_time = 5;
                if (is_callable('getrusage')) {
                    $dat = getrusage();
                    $current_time = $dat["ru_utime.tv_sec"];
                }
                $max_time = max(30, ini_get('max_execution_time'));
                $time_left = $max_time - $current_time;
                // Give every file 3 seconds.
                drupal_set_time_limit(count($filenames_info) * 3 + $time_left);
            }
        }
    }
    $return = array();
    foreach ($filenames_info as $filename => $info) {
        if (!module_exists('httprl') || !httprl_is_background_callback_capable()) {
            $return[$filename] = advagg_js_compress_run_test($filename, $info, $compressors);
            continue;
        }
        // Setup this run.
        $results = array();
        if (empty($info)) {
            $info = advagg_get_info_on_file($filename, FALSE, FALSE);
        }
        // Set to 0 if file doesn't exist.
        if (empty($info['content_hash'])) {
            foreach ($compressor_list as $key => $name) {
                $results[$key] = array(
                    'code' => 0,
                    'ratio' => 0,
                    'name' => $name,
                );
            }
            $return[$filename] = $results;
            continue;
        }
        $results =& $return[$filename];
        // Set to "-1" so if php bombs, the file will be marked as bad.
        foreach ($compressor_list as $key => $name) {
            $results[$key] = array(
                'code' => -1,
                'ratio' => 0,
                'name' => $name,
            );
        }
        // Get cache id.
        $cache_id = 'advagg:js_compress:info:' . $info['filename_hash'];
        $cache_id .= !empty($info['content_hash']) ? ':' . $info['content_hash'] : '';
        // Setup callback options array.
        $callback_options = array(
            array(
                'function' => 'advagg_js_compress_test_file',
                'return' => &$results,
            ),
            $filename,
            $compressors,
            $cache_id,
        );
        // Queue up the request.
        httprl_queue_background_callback($callback_options);
    }
    if (module_exists('httprl') && httprl_is_background_callback_capable()) {
        // Execute request.
        httprl_send_request();
        foreach ($return as $filename => &$results) {
            if (!empty($results)) {
                // If we have one bad set, we need to retest all.
                foreach ($results as $key => $value) {
                    if ($value['code'] == -1) {
                        unset($results);
                        $results = array();
                        break;
                    }
                }
            }
            // If php bombs out, try each compressor individually.
            if (empty($results)) {
                foreach ($compressor_list as $key => $name) {
                    $info = $filenames_info[$filename];
                    $cache_id = 'advagg:js_compress:info:' . $info['filename_hash'];
                    $cache_id .= !empty($info['content_hash']) ? ':' . $info['content_hash'] : '';
                    $sub_result = array();
                    $sub_result[$key] = '';
                    // Setup callback options array.
                    $callback_options = array(
                        array(
                            'function' => 'advagg_js_compress_test_file',
                            'return' => &$sub_result,
                        ),
                        $filename,
                        array(
                            $key => $name,
                        ),
                        $cache_id,
                    );
                    // Queue up the request.
                    httprl_queue_background_callback($callback_options);
                    // Execute request.
                    httprl_send_request();
                    if (!empty($sub_result[$key])) {
                        $results[$key] = $sub_result[$key];
                    }
                    else {
                        // Set to "-1" as php bombed, the file will be marked as bad.
                        $results[$key] = array(
                            'code' => -1,
                            'ratio' => 0,
                            'name' => $name,
                        );
                    }
                }
            }
        }
        unset($results);
    }
    return $return;
}