Hippo
September 17th, 2012, 15:02
راهکارهای افزایش سرعت جوملا
با وجود این که جوملا! یکی از انعطاف پذیرترین و قدرتمندترین سیستمهای مدیریت محتوای در دسترس است، از ناحیه زمان اجرا و عملکرد (Performance) میتواند شما را با دشواریهایی روبهرو کند. چند کار وجود دارد که شما میتوانید با انجام دادنِ آن سرعت سایت خود را افزایش دهید. سطح عملکرد قابل قبول به وسیله هر بسته هاستینگ میتواند انجام شود تا زمانی که بهترین عملکرد میتواند بر روی سرور تمام اختصاصی( Lighttpd که بسیار سریعتر از Apache است) دیده شود. برای برخی از مدیرها، ارتقاء به یک سرور تمام اختصاصی ممکن است کار مناسب و به صرفهای نباشد.
بهینهسازی قالب:
ما بحث را با یکی از معمولترین(و زیانآورترین) مشکلاتی که من تا به حال در جوملا (یا هر سایت دیگری) دیدهام، آغاز میکنیم. هزاران هزار قالب که مشخصاً برای جوملا ساخته شدهاند، وجود دارد و بیشتر آنها بسیار زیبا به نظر میرسند ولی بیشتر آنها خطاهای سختی در عملکرد دارند. مشکل اینجاست که قالبهایی وجود دارند که بیش از 70 تصویر جدا در صفحه را نمایش میدهند. هر تصویر یک درخواست جدید را به وجود میآورد (که به بین 1/ 0تا 1 ثانیه به تأخیر شبکه اضافه میکند) که حتماً باید Download شوند. مشکل آنجایی بدتر میشود که تصاویر کوچک (با توجه به اندازه data) نیستند و هنگامی که آنها بهینـهسازی نشدهاند. یک سایت بزرگ وجود دارد که به شما کمک میکند تشخیص بدهید چه بهینه سازی قالبی باید انجام بشود و اطمینان کسب کنید که بعد از هر تغییر بزرگ می توانید سایتتان را از این طریق اجرا کنید (TheWebsite Analyzer)
بعضی اوقات، Gzip:
رمز گذاری صفحات شما با Gzip در ٪90موارد جواب می دهد...اگر پردازشگر سرور شما سریعتر از پهنای باند شماست (با تأکید: ٪90 موارد)، فعالسازی Gzip compression حقیقتاً سرعت سایت شما را افزایش خواهد داد.من آن را میگویم زیرا Gzip کردن صفحات به یک CPU پرقدرت نیاز دارد. اگر سایت شما سریع بالا نمیآید،Gzip را فعال کنید(مخصوصاً در سرورهای با سرعت بالا). احتمالاً اگر به نتیجه نرسیدید یا از هاست اخطار CPU دریافت کردید، Gzip را غیرفعال کنید. این کار میتواند به شما آسیب زند، اما اکثر اوقات این کار به شما کمک می کند. تنها راه فهمیدن، امتحان کردن آن است.
تمامی کامپوننتها، کامپوننتهای خوبی نیستند:
اگر به پوشه امکانات جوملا نگاهی بیندازید. کامپوننتی را پیدا خواهید کرد که تمام خواستههای شما را برآورده میکند (در بیشتر قسمت ها). مشکل این جا است که بعضی از این کامپوننتها واقعاً بی تأثیر هستند و کندی سایت شما را ناگهان بیشتر می کند. اگر شما به دنبال یک راه آسان برای شناسایی کامپوننتهای کند هستید که ممکن است از آنها استفاده هم میکنید، می خواهید، کامپوننت my page caching راا نصب کنید، اما caching را فعال نکنید(بگذارید تا صفحه را با زمان طولانی ضبط کند برای هرURL).بعد از یک هفته یا بیشتر، به سراغ فهرستی که تولید شده بروید وURL های کند را پیدا کنید.آن کامپوننتها به شما نشان خواهند داد که کدامشان از بقیه کندتر هستند. اگر می توانید آنهایی که خیلی کند هستند را حذف کنید و از محصول دیگری استفاده کنید.
آمار شاید خوب به نظر برسند، اما...:
آنها از SQL Queryهای فراوانی استفاده میکنند تا کارشان را انجام دهند که خیلی هم ارزشمند نیستند! اگر شما آمار خوبی میخواهید از تحلیلگر Google برای شمارش بازدید کنندگان خود استفاده کنید و کامپوننتهای اضافی دوری کنید. آنها آمار و ارقام خوبی را به شما نمایش میدهند اما همراه با خطایی بزرگ در عملکرد! تنها آمارگیرندهای که ارزش نگهداشتن دارد search queryها هستند (درconfig جوملا) اگر شما به وبسرور دسترسی دارید، همچنین میتوانید آمار ورود به سایت را از طریق سرور غیرفعال کنید (این عمل بسیار موثر است و تنها راهی است که اگر سرور بهکندی بالا میآید، به شما کمک کند.)
مامبوتها بهراستی بسیار قدرتمند هستند اما کند...:
نگاهی بیندازید و ببینید از چه مامبوتهایی استفاده میکنید. اگر از هیچکدام از آنها استفاده نمیکنید، خود را از دست آنها رها کنید (تنها غیرفعال کردن آنها کافی نیست، بلکه آنها را حذف کنید). هر بار که شما صفحه ای را بالا می آورید، مامبوتها 20 تا 30 برابر بیشتر خوانده میشوند. اگر کد ٪100 موثر و مورد احتیاج نیست، این تلف کردن انرژی است. به این معنا نیست که اگر شما از مامبوت استفاده می کنید، هنوز و همچنان باید آنها را نگه داشت. بعضی از مامبوتها هستند که به خاطر کند کردن سایت، شناخته شده هستند. یکی از آنها All Videos Plugin است. این یک راه حل عالی است اما برای تکمیل باید از مقدار فراوانی Query استفاده کنید.
SEF، سرور دوستانهای (Server Friendly) نیست:
یکی از بهترین کارهایی که شما می توانید برای سایت خود انجام دهید، این است که کاری کنید تا URLها بهتر و زیباتر به نظر برسند. هستهی جوملا کار را به شکل قابل قبولی انجام میدهد اما کامپوننتهای اضافی کارآمدی هستند که می توانند URLهای سایت شما را بسیار زیباتر کنند.تنها مشکلی که این کامپوننتها دارند عملکرد غیردوستانه آنها است (آنها از هزاران Query استفاده می کنند). من استفاده از OpenSEF را به بقیه ترجیح می دهم و همانطور که به نظر می آید می تواند ترکیبی از قدرت، انعطاف پذیری و عملکرد است. همیشه به یاد داشته باشید که استفاده از SEF URLs یک معاوضه است.یک URL ظاهر زیباتری به یک موتور جستجو می دهد که می تواند استفاده کنندگان را به هدفشان برساند، اما برای بالا آمدن سایت زمان بیشتری لازم است. پیش از فعال سازی SEF URLها به آن خوب فکر کنید. کاری که شما میتوانید انجام دهید، بهینهسازی پایگاه داده است به صورت دورهای به وسیله حذف کردن URLهای نامعتبر و منتشرنشده از پایگاه داده OpenSEF است (یک گزینه در بخش مدیریت OpenSEF)
تاحد امکان ذخیرهسازی (caching) را فعال کنید:
اگر می توانید، ذخیرهسازی محتوای هستهی جوملا را فعال کنید، این کار به شما سرعت بیشتری میدهد وقتی شما در حال نظاره محتوا و ماژولها هستید (لازم نیست هر زمان که صفحه بالا می آید مامبوتها را پردازش کنید). اگر شما واقعاً می خواهید که سرعت را برای کاربران ثبت نشده افزایش دهید، نگاهی به کامپوننت ذخیرهسازی صفحه بیاندازید که می تواند کل صفحات را ذخیره سازد. احتمالاً این بهترین کاری است که شما می توانید برای پیدا کردن کاربران ثبت نشده، انجام دهید (بیشتر کاربران برای ٪95 از وبسایتها).این به این معنا نیست که شما میتوانید بقیه این بهینهسازیها را فراموش کنید و به خاطر این که کاربران ثبت شده همچنان همان سایت ذخیرهنشده را خواهند دید.
یافتن Queryهای بد:
از پیکربندی کلی جوملا، خطازدایی را فعال سازید.سپس به سایت نگاه کنید و مرتب بودن Queryهای پایگاه داده را بررسی کنید. شما میخواهید این تعداد در کمترین حد خود باشند (کمتر از 30، ترجیحا، اما کمتر از 50 هم اکتفا میکند). با نگاه کردن به Queryهای بازگشتی آغاز کنید (آنها را دوباره و دوباره مرتب کنید). شما باید قادر باشید تا بگویید که کدام امکان در حال تولید Query است، تنها با توجه به جدولی که به آن مینگرید. (برای مثال *Select* از _job_openset_configمتعلق به OpenSEF است). دو راه برای مواجهه با Queryهای در حال اجرا وجود دارد. شما میتوانید آن امکان را غیرفعال کنید یا با گسترشدهنده تماس بگیرد تا آن امکان را بهینهسازی کند (چه گسترشدهنده خود امکان یا یک گسترشدهنده قراردادی مانند من).
از پلهای ارتباطی دوری کنید:
یکی از محبوبترین متدها برای اضافه کردن توابع جدید به جوملااز طریق یک پل ارتباطی است.این کار شامل تغییراتی سطحی هسته جوملا و یا نرم افزارهای دیگر هم می شود (مانند SMF و یا Gallery2) برای فراهم ساختن تابعی از هردوی آنها. از لحاظ ظاهری، زیبا به نظر میرسد زیرا نرم افزارهای دیگر بسیار تصفیه شدهتر و دارای تابعهای بیشتری نسبت به امکانات قابل دسترسی جوملاهستند اما درزیر یک داستان متفاوت دارد.مشکل این جاست که آنها دو سیستم جدا و مستقل از یکدیگر هستند. این به این معنا است که هر کدام باید هسته خود را بارگذاری (شامل frameworks، مدیریت کاربران و غیره). این یک خطای بزرگ است زیرا شما برای صفحه، عملاً دو صفحه را بارگذاری میکنید. برای عملکرد با ارزشتر،از دست دادن توابع بسیار کوچک در رفتن از SMF به سوی چیزی چون fireboard بسیار خوب است.
بهینهسازی پایگاه داده:
یکی از چیزهایی که نصب جوملا را تحت فشار قرار می دهد سرور پایگاه داده است. دو راه اصلی وجود دارد که پایگاه داده را بهینهسازی کنید. بهینهسازی جدولها و بهینهسازی شِما (Schema). فرق آنها این است که جدولها نشان دهنده چگونگی ذخیره کردن جدولها در داده است و شِما نشان دهنده این که آنها چطور باید ذخیره شوند.شِما فقط باید یک بار بهینهسازی شود در حالی که جدولها باید مرتبا ًبهینهسازی شوند (تا وقتی که داده اضافه شود، تنظیم شود و حذف شود).برای بهینهسازی جدولها به phpmyAdmin بروید، همه جدولها را انتخاب کنید و بر روی بهینهسازی کلیک کنید.
در پایان نسخه پشتیبان تهیه کنید و سرور را مشاهده کنید:
شما باید مرتباً از سایت خود نسخه پشتیبان بگیرید و آنها را از پروسه تولید سرور بیرون بکشید. شما ممکن است به این فکر بییفتید «این چه ارتباطی با عملکرد شما دارد؟»، این به تمام عملکرد ارتباط دارد. بدون پشتیبان رایج، اگر نصب، به روز رسانی یا tweak به درستی انجام نگرفت، شما چگونه میخواهید سایت خود را ذخیره نمایید؟ یک کاهش سرعت ناگهانی می تواند شرایط برای هک شدن که باعث تزریق شدن رمزهای خرابکار به هسته می شود را فراهم سازد (متا ُسفانه امکان دارد).چه اتفاقی خواهد افتاد اگر سرور تصمیم به زدن گلوله کند؟ بهترین راه برای تهیه نسخه پشتیبان با یک automated script می باشد(تا شما نتوانید فراموش کنید).نمونه های خوبی از آن در کل اینترنت وجود دارد.(این می تواند شامل control panel شما هم شود اگر یکی از آنها دارید). به یاد داشته باشید قبل از انجام هر کاری در سایت خود، نخست از آن یک نسخه پشتیبان تهیه کنید.
با وجود این که جوملا! یکی از انعطاف پذیرترین و قدرتمندترین سیستمهای مدیریت محتوای در دسترس است، از ناحیه زمان اجرا و عملکرد (Performance) میتواند شما را با دشواریهایی روبهرو کند. چند کار وجود دارد که شما میتوانید با انجام دادنِ آن سرعت سایت خود را افزایش دهید. سطح عملکرد قابل قبول به وسیله هر بسته هاستینگ میتواند انجام شود تا زمانی که بهترین عملکرد میتواند بر روی سرور تمام اختصاصی( Lighttpd که بسیار سریعتر از Apache است) دیده شود. برای برخی از مدیرها، ارتقاء به یک سرور تمام اختصاصی ممکن است کار مناسب و به صرفهای نباشد.
بهینهسازی قالب:
ما بحث را با یکی از معمولترین(و زیانآورترین) مشکلاتی که من تا به حال در جوملا (یا هر سایت دیگری) دیدهام، آغاز میکنیم. هزاران هزار قالب که مشخصاً برای جوملا ساخته شدهاند، وجود دارد و بیشتر آنها بسیار زیبا به نظر میرسند ولی بیشتر آنها خطاهای سختی در عملکرد دارند. مشکل اینجاست که قالبهایی وجود دارند که بیش از 70 تصویر جدا در صفحه را نمایش میدهند. هر تصویر یک درخواست جدید را به وجود میآورد (که به بین 1/ 0تا 1 ثانیه به تأخیر شبکه اضافه میکند) که حتماً باید Download شوند. مشکل آنجایی بدتر میشود که تصاویر کوچک (با توجه به اندازه data) نیستند و هنگامی که آنها بهینـهسازی نشدهاند. یک سایت بزرگ وجود دارد که به شما کمک میکند تشخیص بدهید چه بهینه سازی قالبی باید انجام بشود و اطمینان کسب کنید که بعد از هر تغییر بزرگ می توانید سایتتان را از این طریق اجرا کنید (TheWebsite Analyzer)
بعضی اوقات، Gzip:
رمز گذاری صفحات شما با Gzip در ٪90موارد جواب می دهد...اگر پردازشگر سرور شما سریعتر از پهنای باند شماست (با تأکید: ٪90 موارد)، فعالسازی Gzip compression حقیقتاً سرعت سایت شما را افزایش خواهد داد.من آن را میگویم زیرا Gzip کردن صفحات به یک CPU پرقدرت نیاز دارد. اگر سایت شما سریع بالا نمیآید،Gzip را فعال کنید(مخصوصاً در سرورهای با سرعت بالا). احتمالاً اگر به نتیجه نرسیدید یا از هاست اخطار CPU دریافت کردید، Gzip را غیرفعال کنید. این کار میتواند به شما آسیب زند، اما اکثر اوقات این کار به شما کمک می کند. تنها راه فهمیدن، امتحان کردن آن است.
تمامی کامپوننتها، کامپوننتهای خوبی نیستند:
اگر به پوشه امکانات جوملا نگاهی بیندازید. کامپوننتی را پیدا خواهید کرد که تمام خواستههای شما را برآورده میکند (در بیشتر قسمت ها). مشکل این جا است که بعضی از این کامپوننتها واقعاً بی تأثیر هستند و کندی سایت شما را ناگهان بیشتر می کند. اگر شما به دنبال یک راه آسان برای شناسایی کامپوننتهای کند هستید که ممکن است از آنها استفاده هم میکنید، می خواهید، کامپوننت my page caching راا نصب کنید، اما caching را فعال نکنید(بگذارید تا صفحه را با زمان طولانی ضبط کند برای هرURL).بعد از یک هفته یا بیشتر، به سراغ فهرستی که تولید شده بروید وURL های کند را پیدا کنید.آن کامپوننتها به شما نشان خواهند داد که کدامشان از بقیه کندتر هستند. اگر می توانید آنهایی که خیلی کند هستند را حذف کنید و از محصول دیگری استفاده کنید.
آمار شاید خوب به نظر برسند، اما...:
آنها از SQL Queryهای فراوانی استفاده میکنند تا کارشان را انجام دهند که خیلی هم ارزشمند نیستند! اگر شما آمار خوبی میخواهید از تحلیلگر Google برای شمارش بازدید کنندگان خود استفاده کنید و کامپوننتهای اضافی دوری کنید. آنها آمار و ارقام خوبی را به شما نمایش میدهند اما همراه با خطایی بزرگ در عملکرد! تنها آمارگیرندهای که ارزش نگهداشتن دارد search queryها هستند (درconfig جوملا) اگر شما به وبسرور دسترسی دارید، همچنین میتوانید آمار ورود به سایت را از طریق سرور غیرفعال کنید (این عمل بسیار موثر است و تنها راهی است که اگر سرور بهکندی بالا میآید، به شما کمک کند.)
مامبوتها بهراستی بسیار قدرتمند هستند اما کند...:
نگاهی بیندازید و ببینید از چه مامبوتهایی استفاده میکنید. اگر از هیچکدام از آنها استفاده نمیکنید، خود را از دست آنها رها کنید (تنها غیرفعال کردن آنها کافی نیست، بلکه آنها را حذف کنید). هر بار که شما صفحه ای را بالا می آورید، مامبوتها 20 تا 30 برابر بیشتر خوانده میشوند. اگر کد ٪100 موثر و مورد احتیاج نیست، این تلف کردن انرژی است. به این معنا نیست که اگر شما از مامبوت استفاده می کنید، هنوز و همچنان باید آنها را نگه داشت. بعضی از مامبوتها هستند که به خاطر کند کردن سایت، شناخته شده هستند. یکی از آنها All Videos Plugin است. این یک راه حل عالی است اما برای تکمیل باید از مقدار فراوانی Query استفاده کنید.
SEF، سرور دوستانهای (Server Friendly) نیست:
یکی از بهترین کارهایی که شما می توانید برای سایت خود انجام دهید، این است که کاری کنید تا URLها بهتر و زیباتر به نظر برسند. هستهی جوملا کار را به شکل قابل قبولی انجام میدهد اما کامپوننتهای اضافی کارآمدی هستند که می توانند URLهای سایت شما را بسیار زیباتر کنند.تنها مشکلی که این کامپوننتها دارند عملکرد غیردوستانه آنها است (آنها از هزاران Query استفاده می کنند). من استفاده از OpenSEF را به بقیه ترجیح می دهم و همانطور که به نظر می آید می تواند ترکیبی از قدرت، انعطاف پذیری و عملکرد است. همیشه به یاد داشته باشید که استفاده از SEF URLs یک معاوضه است.یک URL ظاهر زیباتری به یک موتور جستجو می دهد که می تواند استفاده کنندگان را به هدفشان برساند، اما برای بالا آمدن سایت زمان بیشتری لازم است. پیش از فعال سازی SEF URLها به آن خوب فکر کنید. کاری که شما میتوانید انجام دهید، بهینهسازی پایگاه داده است به صورت دورهای به وسیله حذف کردن URLهای نامعتبر و منتشرنشده از پایگاه داده OpenSEF است (یک گزینه در بخش مدیریت OpenSEF)
تاحد امکان ذخیرهسازی (caching) را فعال کنید:
اگر می توانید، ذخیرهسازی محتوای هستهی جوملا را فعال کنید، این کار به شما سرعت بیشتری میدهد وقتی شما در حال نظاره محتوا و ماژولها هستید (لازم نیست هر زمان که صفحه بالا می آید مامبوتها را پردازش کنید). اگر شما واقعاً می خواهید که سرعت را برای کاربران ثبت نشده افزایش دهید، نگاهی به کامپوننت ذخیرهسازی صفحه بیاندازید که می تواند کل صفحات را ذخیره سازد. احتمالاً این بهترین کاری است که شما می توانید برای پیدا کردن کاربران ثبت نشده، انجام دهید (بیشتر کاربران برای ٪95 از وبسایتها).این به این معنا نیست که شما میتوانید بقیه این بهینهسازیها را فراموش کنید و به خاطر این که کاربران ثبت شده همچنان همان سایت ذخیرهنشده را خواهند دید.
یافتن Queryهای بد:
از پیکربندی کلی جوملا، خطازدایی را فعال سازید.سپس به سایت نگاه کنید و مرتب بودن Queryهای پایگاه داده را بررسی کنید. شما میخواهید این تعداد در کمترین حد خود باشند (کمتر از 30، ترجیحا، اما کمتر از 50 هم اکتفا میکند). با نگاه کردن به Queryهای بازگشتی آغاز کنید (آنها را دوباره و دوباره مرتب کنید). شما باید قادر باشید تا بگویید که کدام امکان در حال تولید Query است، تنها با توجه به جدولی که به آن مینگرید. (برای مثال *Select* از _job_openset_configمتعلق به OpenSEF است). دو راه برای مواجهه با Queryهای در حال اجرا وجود دارد. شما میتوانید آن امکان را غیرفعال کنید یا با گسترشدهنده تماس بگیرد تا آن امکان را بهینهسازی کند (چه گسترشدهنده خود امکان یا یک گسترشدهنده قراردادی مانند من).
از پلهای ارتباطی دوری کنید:
یکی از محبوبترین متدها برای اضافه کردن توابع جدید به جوملااز طریق یک پل ارتباطی است.این کار شامل تغییراتی سطحی هسته جوملا و یا نرم افزارهای دیگر هم می شود (مانند SMF و یا Gallery2) برای فراهم ساختن تابعی از هردوی آنها. از لحاظ ظاهری، زیبا به نظر میرسد زیرا نرم افزارهای دیگر بسیار تصفیه شدهتر و دارای تابعهای بیشتری نسبت به امکانات قابل دسترسی جوملاهستند اما درزیر یک داستان متفاوت دارد.مشکل این جاست که آنها دو سیستم جدا و مستقل از یکدیگر هستند. این به این معنا است که هر کدام باید هسته خود را بارگذاری (شامل frameworks، مدیریت کاربران و غیره). این یک خطای بزرگ است زیرا شما برای صفحه، عملاً دو صفحه را بارگذاری میکنید. برای عملکرد با ارزشتر،از دست دادن توابع بسیار کوچک در رفتن از SMF به سوی چیزی چون fireboard بسیار خوب است.
بهینهسازی پایگاه داده:
یکی از چیزهایی که نصب جوملا را تحت فشار قرار می دهد سرور پایگاه داده است. دو راه اصلی وجود دارد که پایگاه داده را بهینهسازی کنید. بهینهسازی جدولها و بهینهسازی شِما (Schema). فرق آنها این است که جدولها نشان دهنده چگونگی ذخیره کردن جدولها در داده است و شِما نشان دهنده این که آنها چطور باید ذخیره شوند.شِما فقط باید یک بار بهینهسازی شود در حالی که جدولها باید مرتبا ًبهینهسازی شوند (تا وقتی که داده اضافه شود، تنظیم شود و حذف شود).برای بهینهسازی جدولها به phpmyAdmin بروید، همه جدولها را انتخاب کنید و بر روی بهینهسازی کلیک کنید.
در پایان نسخه پشتیبان تهیه کنید و سرور را مشاهده کنید:
شما باید مرتباً از سایت خود نسخه پشتیبان بگیرید و آنها را از پروسه تولید سرور بیرون بکشید. شما ممکن است به این فکر بییفتید «این چه ارتباطی با عملکرد شما دارد؟»، این به تمام عملکرد ارتباط دارد. بدون پشتیبان رایج، اگر نصب، به روز رسانی یا tweak به درستی انجام نگرفت، شما چگونه میخواهید سایت خود را ذخیره نمایید؟ یک کاهش سرعت ناگهانی می تواند شرایط برای هک شدن که باعث تزریق شدن رمزهای خرابکار به هسته می شود را فراهم سازد (متا ُسفانه امکان دارد).چه اتفاقی خواهد افتاد اگر سرور تصمیم به زدن گلوله کند؟ بهترین راه برای تهیه نسخه پشتیبان با یک automated script می باشد(تا شما نتوانید فراموش کنید).نمونه های خوبی از آن در کل اینترنت وجود دارد.(این می تواند شامل control panel شما هم شود اگر یکی از آنها دارید). به یاد داشته باشید قبل از انجام هر کاری در سایت خود، نخست از آن یک نسخه پشتیبان تهیه کنید.