Test a JS file to see if it compresses well.

Paramètres

string $filename: Path and filename of JS file.

array $info: (Optional) advagg_get_info_on_file().

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

Return value

array info about the file.

5 calls to advagg_js_compress_run_test()
advagg_js_compress_advagg_get_js_file_contents_alter dans advagg_js_compress/advagg_js_compress.advagg.inc
Implements hook_advagg_get_js_file_contents_alter().
advagg_js_compress_advagg_save_aggregate_alter dans advagg_js_compress/advagg_js_compress.advagg.inc
Implements hook_advagg_save_aggregate_alter().
advagg_js_compress_run_mutiple_tests dans advagg_js_compress/advagg_js_compress.advagg.inc
Test a JS file to see if it compresses well.
hook_advagg_changed_files dans ./advagg.api.php
Let other modules know about the changed files.
hook_advagg_get_js_file_contents_alter dans ./advagg.api.php
Allow other modules to modify this files contents.

Fichier

advagg_js_compress/advagg_js_compress.advagg.inc, line 688

Code

function advagg_js_compress_run_test($filename, array $info = array(), array $compressors = array()) {
    // Get the info on this file.
    module_load_include('inc', 'advagg', 'advagg');
    if (empty($info)) {
        $info = advagg_get_info_on_file($filename, FALSE, FALSE);
    }
    $cache_id = 'advagg:js_compress:info:' . $info['filename_hash'];
    $cache_id .= !empty($info['content_hash']) ? ':' . $info['content_hash'] : '';
    $compressor_list = advagg_js_compress_get_enabled_compressors(array(), -1);
    // Build list of compressors.
    if (empty($compressors)) {
        $compressors = $compressor_list;
    }
    // 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,
            );
        }
    }
    else {
        // 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,
            );
        }
        $run_locally = TRUE;
        // Run this via httprl if possible.
        if (module_exists('httprl') && httprl_is_background_callback_capable()) {
            $run_locally = FALSE;
            // 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);
            // Execute request.
            httprl_send_request();
            // If php bombs out, try each compressor individually.
            foreach ($results as $key => $value) {
                if ($value['code'] == -1) {
                    $sub_result = array();
                    $sub_result[$key] = $value;
                    // Setup callback options array.
                    $callback_options = array(
                        array(
                            'function' => 'advagg_js_compress_test_file',
                            'return' => &$sub_result,
                        ),
                        $filename,
                        array(
                            $key => $value['name'],
                        ),
                        $cache_id,
                    );
                    // Queue up the request.
                    httprl_queue_background_callback($callback_options);
                    // Execute request.
                    httprl_send_request();
                    $results[$key] = $sub_result[$key];
                }
            }
            // Try locally if all return back -1 (something wrong with httprl).
            foreach ($results as $key => $value) {
                if ($value['code'] != -1) {
                    $run_locally = TRUE;
                    break;
                }
            }
        }
        if ($run_locally) {
            // Save results, so if PHP bombs, this file is marked as bad.
            // CACHE_PERMANENT isn't good here. Use 2 weeks from now + 0-45 days.
            // The random 0 to 45 day addition is to prevent a cache stampeed.
            cache_set($cache_id, $results, 'cache_advagg_info', round(REQUEST_TIME + 1209600 + mt_rand(0, 3888000), -3));
            // Test the file.
            $results = advagg_js_compress_test_file($filename, $compressors, $cache_id);
        }
    }
    // Save and return results.
    // Save results, so if PHP bombs, this file is marked as bad.
    // CACHE_PERMANENT isn't good here. Use 2 weeks from now + 0-45 days.
    // The random 0 to 45 day addition is to prevent a cache stampeed.
    cache_set($cache_id, $results, 'cache_advagg_info', round(REQUEST_TIME + 1209600 + mt_rand(0, 3888000), -3));
    return $results;
}