مدتی است که دسترسی به شبکه جهانی اینترنت با اختلال مواجه شده و شبکه ملی اطلاعات جایگزین آن شده است. در این شرایط، تقریباً تمامی سرویس های اینترنتی بین المللی از جمله گوگل، شبکه های اجتماعی و سایر وب سایت های خارجی در دسترس نیستند. با این حال، وب سایت های داخلی که سرورهاست آن ها در شرکت های داخل کشور میزبانی می شود، همچنان بالا می آیند. اما بسیاری از مدیران سایت ها متوجه شده اند که سایتشان با مشکل کندی شدید مواجه شده است.
این مشکل کندی در اکثر مواقع ارتباطی به زیرساخت سرور و هاستینگ ندارد، بلکه به دلیل نحوه کدنویسی و وابستگی این سایت ها به منابع خارجی است.
دلیل اصلی کندی سایت ها چیست؟
در بسیاری از وب سایت ها، کدهایی در قالب یا افزونه ها وجود دارد که هنگام بارگذاری سایت، سعی می کنند اطلاعاتی را از منابع خارجی دریافت کنند. به عنوان مثال می توان به فونت های گوگل، کدهای جاوا اسکریپت، سیستم گراواتار، اتصال به API های بین المللی و موارد مشابه اشاره کرد.
از آنجایی که اینترنت بین الملل قطع است، مرورگر کاربر و سرور سایت برای دریافت این فایل ها به منابع خارجی درخواست می فرستند. اما چون این منابع در دسترس نیستند، مرورگر منتظر می ماند تا زمان مجاز درخواست به پایان برسد که اصطلاحا به آن Timeout می گویند. این انتظار باعث می شود که لود شدن یک سایت از حالت عادی که 2 الی 3 ثانیه است، به حدود یک دقیقه یا حتی بیشتر افزایش یابد.
برای حل این مشکل باید با قرار دادن کدهایی در سایت، از ارسال درخواست به منابع خارجی جلوگیری کنیم. با این کار، سرعت سایت به صورت قابل ملاحظه ای افزایش یافته و سایت در عرض چند ثانیه بارگذاری می شود. در ادامه کدهای مورد نیاز برای دو سیستم مدیریت محتوای پرکاربرد یعنی وردپرس و جوملا را بررسی می کنیم.
راهکار افزایش سرعت برای سایت های جوملا
در سیستم مدیریت محتوای جوملا، برای مسدود کردن این درخواست ها باید کدهایی را در فایل htaccess. هاست خود وارد کنید.
دقت داشته باشید که اگر وارد این فایل شوید، احتمالا در خطوط ابتدایی عبارت RewriteEngine On را مشاهده می کنید. اگر این خط وجود داشت، نیازی به تکرار آن نیست و باید کدهای زیر را در خطوط بعدی آن قرار دهید:
RewriteCond %{REQUEST_URI} .(css|js|woff|woff2|ttf|otf|eot|svg|png|jpg|jpeg|gif)$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_HOST} !^%{HTTP_REFERER} [NC]
RewriteRule .* - [F]
اما اگر RewriteEngine On در فایل .htaccess نباشد باید این کد را نیز به ابتدای سطر کدها اضافه کنیم.
همچنین برای جلوگیری از لود منابع خارجی توسط مرورگر، باید کد زیر را در انتهای همان فایل htaccess. قرار دهید:
<IfModule mod_headers.c>
Header always set Content-Security-Policy “default-src ‘self’; img-src ‘self’ data:; font-src ‘self’; script-src ‘self’; style-src ‘self’ ‘unsafe-inline’; connect-src ‘self’;”
</IfModule>
نکته بسیار مهم در مورد جوملا:
لازم به ذکر است که سایت های جوملایی و تنظیمات هاستینگ های مختلف ممکن است رفتارهای متفاوتی در برابر این کدها داشته باشند. در برخی موارد ممکن است ظاهر سایت شما کمی تغییر کند یا به هم بریزد.
برای مثال، در برخی سایت ها با قرار دادن تمامی کدهای بالا هیچ مشکلی پیش نمی آید و سایت با سرعت عالی (کمتر از 2 ثانیه) لود می شود. اما در سایتی دیگر با همان قالب روی یک هاست متفاوت، ممکن است ظاهر سایت به کلی به هم بریزد. اگر با چنین مشکلی مواجه شدید، پیشنهاد می کنیم بخش اول کدها را پاک کنید و تنها بخش دوم (تگ IfModule و کدهای داخل آن) را در انتهای فایل htaccess. قرار دهید. در کل این روش در جوملا قطعا جواب می دهد، اما برای رسیدن به بهترین نتیجه و حفظ ظاهر قالب، باید کمی با کدها آزمون و خطا کنید.
راهکار افزایش سرعت برای سایت های وردپرس
در سیستم مدیریت محتوای وردپرس نیازی به ویرایش فایل htaccess. برای این منظور نیست. شما باید وارد پوشه قالب فعال سایت خود شوید و فایلی به نام functions.php را پیدا کنید. (ممکن است در برخی قالب های خاص نام این فایل custom functions یا موارد مشابه باشد).
فایل را در حالت ویرایش باز کرده، کدهای زیر را در انتهای آن قرار دهید و فایل را ذخیره کنید:
add_filter(‘pre_http_request’, function(false,false, parsed_args, $url) {
$blocked_urls = [
‘https://my.elementor.com/api/v1/’,
‘https://my.elementor.com/api/v2/’,
‘https://connect.elementor.com/’,
‘https://assets.elementor.com’,
‘https://api.wordpress.org/plugins/update-check/1.1/’,
‘https://api.wordpress.org/plugins/’,
‘http://api.wordpress.org/plugins/’,
‘https://plugins.svn.wordpress.org/woocommerce/’,
‘https://secure.gravatar.com’,
‘https://updates.themepunch-ext-c.tools’,
‘https://xtemos.com/wp-json/xts/v1/’
];
foreach (blockedurlsasblocked_urls as blocked) {
if (strpos(url,url, blocked) === 0) {
error_log('BLOCKED: ’ . $url);
return new WP_Error(‘blocked’, 'درخواست مسدود شد: ’ . $url);
}
}
return $false;
}, 10, 3);
add_filter(‘style_loader_src’, function($href) {
$hrefs = [
‘pixel.wp.com’,
‘stats.wp.com’,
‘gravatar.com’,
];
foreach( hrefsashrefs as hrefd ){
if (strpos(href,href, hrefd) !== false) {
error_log( ‘href block :’ . $hrefd );
return false;
}else{
error_log( $href );
}
}
return $href;
}, 10);
add_filter(‘script_loader_src’, function($src) {
$blocked = [
‘pixel.wp.com’,
‘stats.wp.com’,
‘gravatar.com’,
];
foreach (blockedasblocked as domain) {
if (strpos(src,src, domain) !== false) {
error_log('script block: ’ . $src);
return false;
}
}
return $src;
}, 10);
add_filter( ‘woocommerce_tracks_enabled’, ‘__return_false’ );
add_filter(‘pre_get_avatar’, ‘__return_false’);
با قرار دادن این کدها، تمامی درخواست های وردپرس به مخازن خارجی، افزونه هایی مانند المنتور و ووکامرس، فونت های گوگل و سیستم آواتار متوقف می شود. با انجام این کارها سرعت لود سایت و همچنین سرعت ورود به پیشخوان مدیریت وردپرس به شدت افزایش خواهد یافت.
