کسانی که افزونه minify رو میشناسند و استفاده می کنند این مطلب براشون مفید هست.افزونه minify برای فشرده سازی فایل های js و کدهای html به کار میره و تقریباً بین 20 تا 60 درصد حجم فایل های جاوااسکریپت رو کم می کنه در لود صفحه میتونه مؤثر باشه.
من این افزونه را در سایتی که هاستش در ایران هست نصب کردم. اما دیدم کار نمیکنه.
کدهاش رو بررسی کردم و دیدم از سرویسی از گوگل استفاده می کنه که در این آدرس هست:
closure-compiler.appspot.com/compile
این سایت در ایران باز نمیشه! چون تحریم هستیم. چند راه به ذهنم اومد:
1- دانلود اسکریپت فشرده سازی js و نصب اون روی سرور که لازمه اش اجرای جاوا هست.
2- فشرده سازی در سایتی که سرورش خارج از ایران هست و کپی فایل ها و دیتابیس مربوطه به سایت داخل ایران
3- ایجاد یک واسط بین سایت و گوگل که این واسط در سرور خارج از ایران باشه.
راه سوم را با کلی آزمون و خطا طی کردم و نتیجه اش این شد:
یک زیر دامنه درست کردم در هاست خودم و یک فایل index.php در اون ایجاد کردم با محتوای زیر:
<?php
$js_code = urlencode(trim($_POST['js_code']));
$postdata = _minify_get_post_fields($js_code);
$a = _minify_send_request($postdata);
echo json_encode($a);
function _minify_send_request($post_data) {
if (function_exists('curl_init')) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "closure-compiler.appspot.com/compile");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_POST, true);
$response = json_decode(curl_exec($curl));
//$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
return $response;
}
}
function _minify_get_post_fields($js_code) {
$post_data_array = array();
$post_data_array[] = 'js_code=' . $js_code;
$post_data_array[] = 'compilation_level=WHITESPACE_ONLY';
$post_data_array[] = 'output_format=json';
$post_data_array[] = 'warning_level=QUIET';
$post_data_array[] = 'use_closure_library=' . true;
$post_data_array[] = 'output_info=warnings';
$post_data_array[] = 'output_info=errors';
$post_data_array[] = 'output_info=compiled_code';
$post_data_array[] = 'output_info=statistics';
/* Prepare POST request query string */
return implode('&', $post_data_array);
}
?>
بعد در فایل minify.admin.inc در افزونه minify آدرس curl رو به همون زیر دامنه ایجادی خودم تغییر دادم:
function _minify_send_request($post_data) {
if (function_exists('curl_init')) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "MY SUBDOMAIN ADDRESS");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_POST, true);
$response = json_decode(curl_exec($curl));
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
return array('response' => $response, 'http_code' => $httpcode);
}
}
منظورم این خط هست:حدودا خط 287:
curl_setopt($curl, CURLOPT_URL, "MY SUBDOMAIN ADDRESS");
آدرس زیر دامنه خودتون رو وارد کنید.
با این کار افزونه minify به جای استفاده مستقیم از سرویس گوگل درخواست خود را به سرور خارجی شما ارسال میکنه و در سرور خارجی درخواست شما به سمت گوگل ارسال میشه و گوگل متوجه دیگه این درخواست را رد نمی کنه.