20 روش برای کاهش مصرف CPU در وردپرس بدون نیاز به بروزرسانی و ارتقا هاست – قسمت اول
امروز روش های کاهش مصرف CPU در وردپرس را بررسی می کنیم، یکی از مشکلات فضاهای اشتراکی برای وب سایتها کمبود منابع میباشد. ممکن است بر روی یک فضای اشتراکی، وب سایتی وجود داشته باشد که منابع بیشتری را نسبت به بقیه وب سایتها استفاده کند که باعث می شود دیگر وب سایتها با کمبود منابع و در نتیجه کندی مواجه شوند.
کندی وب سایت علاوه برا اینکه کاربران را از سایت شما ناامید میکند باعث میشود که رتبه خوبی در موتورهای جستجو بدست نیاورید.
اولین گزینه برای رفع مشکل تغییر فضای میزبانی و تهیه فضا با امکانات بهتر و بیشتر میباشد ولی این روش هزینه بیشتری را به شما یا سازمان شما تحمیل میکند از این رو باید به فکر روشهای جایگزین باشید و وب سایت خود را با روشهای بهتری بهینه نمایید. در صورتی که نیاز به هاست وردپرس با کیفیت بالا دارید مقاله راهنمای انتخاب بهترین شرکت هاست را مشاهده کنید.
اگر شما هم یک وب سایت وردپرسی دارید با روشهایی که در ادامه گفته میشود می توانید وب سایت خود را بدون تغییر فضای میزبانی بهینه نمایید.
روشهای بهینه سازی وب سایت
-
فشرده سازی تصاویر و حذف متادیتاهای اضافه تصاویر (JPEG PNG Metadata )
یکی از مشکلات وب سایتها استفاده از تصاویر سنگین و غیر بهینه شده میباشد که بزرگترین معضلات در لود صفحات وب می باشد. با حذف کردن بخشی از متادیتا ها از تصاویر میتواند اندازه تصویر را کوچکتر و حجم ان را پایین بیاورد. نرم افزارها ، افزونه ها و وب سایت های مختلفی هستند که میتوانند تصاویر را به صورت بهینه فشرده سازی کنند.
PNG Gauntlet (رایگان): از این نرم افزار رایگان می توانید برای فشرده سازی فایلهای png و gif استفاده کنید.
Stripper (رایگان) : با استفاده از این نرم افزار می توانید متادیتاهای غیرضروری را از فایلهای JPEG/ JPG/ PNG/ JFIF را بدون افت کیفیت تصویر حذف کنید و حجم تصویر را پایین آورید.
JPEGmini: یکی از بهترین نرم افزارهای فشرده سازی میباشد که به صورت حرفه ای بدون افت کیفیت تصویر، حجم آن را کم می کند. این نرم افزار رایگان نمی باشد.
در وردپرس هم افزونه های زیادی وجود دارد که به شما کمک می کند تا تصاویر را بهینه کنید، این افزونه ها تصاویر را فشرده نمی کنند صرفا با حذف بخشی از متادیتاها آنها را بهینه می کنند.
CW Image Optimizer
Imagify Image Optimizer (افزونه پیشنهادی)
EWWW Image Optimizer
ShortPixel Image Optimizer
-
استفاده از CDN در وردپرس
امروزه تکنولوژیهای موازی سازی برای سرعت بخشیدن به وبسایتها بسیار کاربردی میباشد. CDN ها می توانند با میزبانی تصاویر وب سایتها میزان استفاده و لود CPU را به صورت چشمگیری کاهش دهد. CDN به عنوان یک شبکه توزیع محتوا شناخته میشود که معمولا تصاویر را در چندین سرور در سراسر جهان میزبانی می کند و از این رو زمانی که کاربری درخواستی را برای مشاهده وب سایت ارسال میکند و از نزدیکترین سرور به کاربر پاسخ داده می شود.
به صورت بین المللی پنج CDN برای وردپرس پیشنهاد می شود که برای وبلاگ های کوچک مناسب هستند.
Amazon CloudFront CDN ( غیررایگان )
CloudFlare ( رایگان توصیه شده)
MaxCDN [ Now StackPath ] (نرخ ثابت)
Jetpack Photon by WordPress (رایگان)
CoralCDN (رایگان / اپن سورس)
در مورد دانلودهای موازی، این بدان معنی است که سرور CDN توانایی ارائه تصاویر از طریق چندین زیر دامنه را دارد. برای مثال، نمایش تصویر از طریق 4 زیردامنه مانند image01.domain.com ، image02.domain.com ، image03.domain.com و image04.domain.com سریعتر خواهد بود.
CloudFlare فراتر از CDN است، همچنین یک پروکسی معکوس (Reverse proxy) و Cache است که CSS و بسیاری دیگر از فایلها را فشرده و ترکیب میکند.
-
نحوه ارائه محتوای استاتیک از یک دامنه بدون کوکی
ارائه تصاویر بدون کوکی های که به آن متصل شده است نیاز به ارائه تصاویر از طریق CDN یا زیر دامنه دارد.
معمولا به صورت images.your.domain.comاست باید برای وردپرس مشخص کنید که کوکی ها را از دامنه www.your-domain.com بارگذاری کند و کوکی ها را از images.your.domain.com حذف کند. سپس کد زیر را در wp-config.php وارد نمایید.
Define(‘COOKIE_DOMAIN’, ‘www.your-domain.com’);/
-
کش کردن و بهینه سازی CSS و فشرده سازی فایلهای جاوا اسکریپت
یکی از معضلات لود وب سایتها فایلهای css و js میباشد، با بهینه کردن این فایلها و حذف کدها و خط های خالی اضافه می توانید اندازه فایلها را تا 50% کاهش دهید. زیرا با هر بازدید از سایت فایل style.css بارگیری میشود که در صرفه جویی در پهنای باند کمک خواهد کرد.
روشهای مختلفی برای فشرده کردن و ادغام فایلهای css وجود دارد سریعترین روش برای فشرده سازی این فایلها در وردپرس استفاده از افزونه های کش می باشد. از معروفترین و کاربردی ترین افزونه ها می توان به افزونه های زیر اشاره کرد:
W3 Total Cache (بسیار پیچیده)
WP Super Cache بوسیلهی WordPress با بهینه سازی خودکار (توصیه شده)
WP Rocket Cache [ (۴۰ دلار یکساله برای یک سایت)
Cache Enabler (رابط کاربری فوق العاده ساده)
-
بهینه سازی پایگاه داده MySQL
وب سایت های وردپرسی معمولا بعد از گذشت مدت زمانی با مشکل بهم ریختگی دیتابیس و انبوه اطلاعات بلااستفاده مواجه میشوند. به صورت معمول با حذف یک افزونه / تم از وب سایت وردپرسی برخی از اطلاعات و دیتاها بر روی دیتابیس باقی می ماند.
بهینه سازی جداول در دیتابیس می تواند به شکل چشم گیری سرعت سایت شما را بهبود بخشد. افزونه های زیادی برای بهینه سازی دیتابیس در مارکتهای وردپرس وجود دارد از بین این افزونه ها دو افزونه wp-optimize و wp-sweep می تواند به شما کمک کند تا بهینه سازی بهتری بر روی دیتابیس داشته باشید.
-
حذف داده های اضافی از MYSQL به صورت دستی
گاهی ممکن است افزونه های بهینه سازی باعث به وجود آمدن مشکلاتی در دیتابیس و سایت شود می توانید به صورت دستی هم بهینه سازی را انجام دهید.
یکی از جداولی که باعث کندی سایت می شود جدول متاهای نظرات میباشد. با استفاده از دستور sql زیر می توانید متاهای مازاد را حذف کنید.
DELETE FROM wp_commentmeta WHERE comment_id NOT IN ( SELECT comment_id FROM wp_comments )
افزونه Akismet که به صورت پیش فرض در پلاگین های وردپرس و همراه با وردپرس بر روی سایت کپی می شود و می توانید آن را فعال کنید. این افزونه به شما کمک میکند که سایت خود را از اسپمر محفوظ کنید. اما این افزونه رکوردهای مختلفی مانند IP و موارد دیگری را ذخیره میکند که به مرور باعث سنگین شدن جدول متای نظرات خواهد شد.
با دستور زیر می توانید متاهای جدول نظرات را حذف کنید.
DELETE FROM wp_commentmeta WHERE meta_key LIKE "%akismet%"
حذف اطلاعات Comment Agent : به طور پیش فرض افرادی که در سایت شما نظر می دهند مقدار اطلاعات در خصوص مرورگر، IP و … ذخیره میشود این داده ها برای ما و وب سایت کاربردی ندارد و بیشتر برای ابزارهای آنالیز مانند Google Analytics کاربردی هستند از این رو می توانید این اطلاعات را به روش دستی حذف نمایید.
Update wp_comments set comment_agent ='' ;
Mass Close Trackbacks و Ping در پست ها دیگر استفاده نمی شوند،بله ، پینگ و پیگیری به طور رسمی از بین رفته اند و باید با بستن همه کانال های پینگ همراه با بقیه ویژگی های اضافی اقدام شود.
UPDATE wp_posts SET ping_status = 'closed';
زمانی استفاده از تگ ها برای جذب مخاطب و موتورهای جستجو در وب سایت ها بسیار موثر و کاربردی بود. به مرور زمان که موتورهای جستجو تکنولوژی های متفاوت و پیشرفته ای را ارائه کردند استفاده از تگ ها در وب سایتها کمرنگتر شد. از این رو شما می توانید تگهای که زائد و بلااستفاده هستند و به هیچ نوشته ای مرتبط نمی باشد را از دیتابیس خود حذف نمایید.
DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE count = 0 ); DELETE FROM wp_term_taxonomy WHERE term_id not IN (SELECT term_id FROM wp_terms); DELETE FROM wp_term_relationships WHERE term_taxonomy_id not IN (SELECT term_taxonomy_id FROM wp_term_taxonomy);
حذف feed: یکی دیگر از ویژگی های منسوخ شده در سایت های ورپرسی های مختلف می باشد.
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_transient%_feed_%')
حذف بازبینی های پست ها و متاداده های آن: یکی از ویژگی های خوب در وردپرس، ذخیره بازبینی ها و ویرایش پستها و برگه ها می باشد. اما در طولانی مدت این اطلاعات باعث سنگینی دیتابیس شده و مشکلاتی را به وجود می اورد. برای حذف و یا عدم ذخیره سازی این اطلاعات در دیتابیس می توانید از روش زیر استفاده نمایید.
DELETE a,b,c FROM wp_posts a WHERE a.post_type = 'revision' LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id); 7-
استفاده از متد lazy load در بارگیری تصاویر و فیلم ها در Lazy load یا بارگزاری تنبل تا زمانی که کاربر اقدام به بازدید از سایر بخشهای یک سایت یا اپلیکیشن نکرده باشد، آن بخش برای کاربران بارگذاری نمیشود تا زمانی که کاربر بخواهد از آنها بازدید کند. این روش سبب میشود تا بخشهای مختلف یک صفحه به صورت بخش بخش بارگذاری شوند و سرعت بارگذاری سایت را افزایش میدهد. همچنین باتوجه به اینکه بخشهای اضافی و مشاهده نشده هنوز بارگذاری نشدهاند، ترافیک کمتری را از کاربران دریافت میکند.
امروزه قالبهای زیادی از وردپرس این متد را دارا هستند اگر حالت حرفه ای تری را مد نظر داشته باشید می توانید از افزونه های مختلفی برای این روش استفاده کنید. فقط باید بدانید که این افزونه ها ممکن است با بخش های از کارکرد سایت تداخل داشته باشد.
- Lazy Load by WP Rocket
- BJ Lazy Load
- a3 Lazy Load (توصیه شده)
-
فشرده سازی Gzip
معمولا متد Gzip بر روی هاستینگهای میزبانی فعال می باشد. این متد به صورت اتومات محتوای سایت شما را فشرده میکند و حجم فایلها را کاهش میدهد از این رو باعث پایین امدن کاهش بار بر cpu می شود. در صورتی که این امکان بر روی وب سایت شما فعال نبود می توانید با افزونه هایی نظیر wp super cache آن را فعال نمایید. در روش gzip معمولا 60 تا 75% حجم فایل کمتر خواهد شد.
در صورتی که نخواهید برای gzip افزونه ای را نصب کنید می توانید با قرارداد کد زیر در فایل header.php قالب سایت خود gzip را برای نمایش سایت خود فعال نمایید.
<?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start();>
همچنین می توانید این کد ساده gzip را در پرونده htaccess خود وارد نمایید.
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding AddOutputFilterByType DEFLATE application/atom+xml \ application/javascript \ application/json \ application/rss+xml \ application/vnd.ms-fontobject \ application/x-font-ttf \ application/xhtml+xml \ application/xml \ font/opentype \ image/svg+xml \ image/x-icon \ text/css \ text/html \ text/plain \ text/x-component \
-
فعال کردن Cache وردپرس
از نسخه 2 وردپرس به بعد ویژگی به وردپرس تحت عنوان WordPress Object Cache اضافه شد ولی به صورت پیش فرض فعال نمی باشد، اگر افزونه ای که برای کش است در وردپرس نصب کنید این ویژگی فعال می شود.
برای فعال کردن کش در وردپرس به صورت دستی فایل wp-config.php را باز کنید و کد زیر را وارد نمایید فایل را ذخیره کرده و یک پوشه در wp-content تحت عنوان cache بسازید و سپس دسترسی پوشه cashe را به 755 یا 777 تغییر دهید.
define('ENABLE_CACHE', TRUE);
همانطور که می دانید کش کردن محتوا باید یک زمان انقضا داشته باشد تا اگر در سایت شما تغییراتی حاصل شده بود کاربر بتواند سایت را با تغییرات جدید ببیند. کد زیر را بعد از کد فعال سازی کش وارد نمایید.
define(‘CACHE_EXPIRATION_TIME’, 3600);
اگر از افزونه های کش استفاده می کنید نیازی به وارد کردن کدهای گفته شده نخواهید داشت. جهت جلوگیری از تداخل اگر این کدها را در فایل wp-config دارید و افزونه های کش را هم نصب کرده اید حتما این کدها را پاک نمایید.
در انتهای موضوع کش باید بدانید انتخاب درست یک قالب خوب به شما کمک به سزایی در سرعت بارگذاری وب سایت خواهد داشت. در صورتی که بخواهید یک قالب را تست کنید و میزان کوئری های که در قالب اتفاق می افتد را ببینید می توانید از کد زیر استفاده کنید.
<?php echo $wpdb->num_queries; ?>q, <?php timer_stop(1); ?>s
-
تنظیمات Cache, Expire Header و Cookie ها.
بیشتر پلاگین ها تنظیمات مربوط به کش، کوکی ها و زمان انقضا و بررسی این موارد را انجام میدهند و نیازی نیست که شما به صورت دستی این تنظیمات را انجام دهید. زمانی که وب سایت در مرورگر بارگذاری میشود ابتدا کش و کوکی ها را بررسی میکند در صورتی که مدت زمان زیادی از آخرین بازدید وب سایت گذشته باشد فایلهای جدید را از وب سرور دانلود می کند. کد زیر شامل برای بررسی زمان انقضا کش و کوکی ها در هدر می باشد.
توجه : این کد برای وب سرویس Apache می باشد و برای Ngnix کار نمی کند. کد زیر را در htaccess وارد نمایید.
# ---------------------------------------------------------------------- # Expire Header # ---------------------------------------------------------------------- # Use UTF-8 encoding for anything served text/plain or text/html AddDefaultCharset UTF-8 # Force UTF-8 for a number of file formats < IfModule mod_mime.c > AddCharset UTF-8 .atom .css .js .json .rss .vtt .xml < /IfModule > # FileETag None is not enough for every server. < IfModule mod_headers.c > Header unset ETag < /IfModule > # Since we’re sending far-future expires, we don’t need ETags for static content. # developer.yahoo.com/performance/rules.html#etags FileETag None # Send CORS headers if browsers request them; enabled by default for images. < IfModule mod_setenvif.c > < IfModule mod_headers.c > # mod_headers, y u no match by Content-Type?! < FilesMatch "\.(cur|gif|png|jpe?g|svgz?|ico|webp)$" > SetEnvIf Origin ":" IS_CORS Header set Access-Control-Allow-Origin "*" env=IS_CORS < /FilesMatch > < /IfModule > < /IfModule > # Allow access to web fonts from all domains. < FilesMatch "\.(eot|otf|tt[cf]|woff2?)$" > < IfModule mod_headers.c > Header set Access-Control-Allow-Origin "*" < /IfModule > < /FilesMatch > < IfModule mod_alias.c > < FilesMatch "\.(html|htm|rtf|rtx|txt|xsd|xsl|xml)$" > < IfModule mod_headers.c > Header unset Pragma Header append Cache-Control "public" Header unset Last-Modified < /IfModule > < /FilesMatch > < FilesMatch "\.(css|htc|js|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$" > < IfModule mod_headers.c > Header unset Pragma Header append Cache-Control "public" < /IfModule > < /FilesMatch > < /IfModule > # Expires headers (for better cache control) < IfModule mod_expires.c > ExpiresActive on # Perhaps better to whitelist expires rules? Perhaps. ExpiresDefault "access plus 1 month" # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5) ExpiresByType text/cache-manifest "access plus 0 seconds" # Your document html ExpiresByType text/html "access plus 0 seconds" # Data ExpiresByType text/xml "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds" # Feed ExpiresByType application/rss+xml "access plus 1 hour" ExpiresByType application/atom+xml "access plus 1 hour" # Favicon (cannot be renamed) ExpiresByType image/x-icon "access plus 1 week" # Media: images, video, audio ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access 1 year" ExpiresByType image/jpeg "access 1 year" ExpiresByType video/ogg "access plus 1 month" ExpiresByType audio/ogg "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/webm "access plus 1 month" # HTC files (css3pie) ExpiresByType text/x-component "access plus 1 month" # Webfonts ExpiresByType application/x-font-ttf "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType application/x-font-woff "access plus 1 month" ExpiresByType application/x-font-woff2 "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" # CSS and JavaScript ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" < /IfModule > # Gzip compression < IfModule mod_deflate.c > # Active compression SetOutputFilter DEFLATE # Force deflate for mangled headers < IfModule mod_setenvif.c > < IfModule mod_headers.c > SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding # Don’t compress images and other uncompressible content SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png|rar|zip|exe|flv|mov|wma|mp3|avi|swf|mp?g|mp4|webm|webp)$ no-gzip dont-vary < /IfModule > < /IfModule > # Compress all output labeled with one of the following MIME-types < IfModule mod_filter.c > AddOutputFilterByType DEFLATE application/atom+xml \ application/javascript \ application/json \ application/rss+xml \ application/vnd.ms-fontobject \ application/x-font-ttf \ application/xhtml+xml \ application/xml \ font/opentype \ image/svg+xml \ image/x-icon \ text/css \ text/html \ text/plain \ text/x-component \ text/xml < /IfModule > < IfModule mod_headers.c > Header append Vary: Accept-Encoding < /IfModule > < /IfModule > # ---------------------------------------------------------------------- # Fonts # ---------------------------------------------------------------------- # Add correct content-type for fonts AddType application/vnd.ms-fontobject .eot AddType font/ttf .ttf AddType font/otf .otf AddType font/x-woff .woff AddType image/svg+xml .svg # Compress compressible fonts AddOutputFilterByType DEFLATE font/ttf font/otf image/svg+xml # Add a far future Expires header for fonts ExpiresByType application/vnd.ms-fontobject "access plus 1 year" ExpiresByType font/ttf "access plus 1 year" ExpiresByType font/otf "access plus 1 year" ExpiresByType font/x-woff "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" # ---------------------------------------------------------------------- # No Cookies # ---------------------------------------------------------------------- < FilesMatch "\.(js|css|jpg|png|jpeg|gif|xml|json|txt|pdf|mov|avi|otf|woff|ico|swf)$" > RequestHeader unset Cookie Header unset Cookie Header unset Set-Cookie < /FilesMatch >
ادامه مقاله را در لینک زیر مشاهده کنید
20 روش برای کاهش مصرف CPU در وردپرس بدون نیاز به بروزرسانی و ارتقا هاست- قسمت دوم
دیدگاهتان را بنویسید