راجع به کارایی دروپال

من چندین سال است که دروپال کار می‌کنم و همیشه از آن خیلی راضی بودم.
اما یک نکته‌ی تعجب بر انگیز این بود که در همه‌ی این مدت عقیده داشتم که کارایی و سرعت دروپال خیلی بیشتر از Wordpress و Joomla و ... است.
و برای این عقیده دلیل هم داشتم و تجربه هم کرده بودم.

اما مدتی است که به عکس شده بود و همه‌ی سایت های دروپالی ای که داشتم، همگی و دست جمعی با هم دست به یکی کرده بودند (!) و با هم کند شده بودند :)
فرقی هم نمی کرد که کدام سایت است. سایت هایی که روی سیستم ویندوز خودم داشتم، سایت هایی که روی VirtualBox و با Ununtu داشتم، سایت هایی که آنلاین بودند و بر روی سرور Debian بودند، سایت هایی که بر روی Directadmin و Centos داشتم، همه و همه به شدت کند شده بودند!...
جریان خیلی مشکوک می زد و .... :) بگذریم.

حالا به این نتیجه رسیدم که تقصیر از خود من بوده و دیدگاه من راجع به دروپال اشتباه بوده...

الان میتوانم بگویم که دروپال به طور کلی سیستم کندی است. نمی دانم که از وردپرس یا جوملا کندتر است یا خیر. چون من با این ها زیاد کار نکرده ام.

از مسائل شخصی که بگذریم، چند تا نکته هست که ممکن است برای دیگران مفید باشد. راجع به کارایی دروپال موارد زیر قابل ذکر است:

کلا دروپال سیستم سریعی نیست. البته می توان آن را سریع هم کرد. اما کلا چون دروپال برای توسعه داده شدن ساخته شده، لذا برنامه نویسی و توسعه ی آن آسان است. اما چنین سیستمی نمی تواند سریع هم باشد.
البته اشتباه هم نکنید، خود هسته ی دروپال به قدر کافی سریع است. من که می گویم دروپال کند است، منظورم دروپال توسعه داده شده و سفارشی شده است که کلی ماژول بر روی آن نصب شده باشد.

برای یک سایت سریع، باید حداکثر 100 تا ماژول فعال داشته باشید. هرچه تعداد ماژول ها کمتر باشد بهتر است. اگر فقط 40 الی 60 تا ماژول فعال داشته باشید، سایت مانند نور سریع خواهد بود...
بنا به تجربه‌ی من، تا 100 عدد ماژول قابل تحمل است، اما اگر از صد تا بیشتر شد، سایت کند می‌شود و باید برای سرعت بخشیدن به آن، میزان رم سرور رو افزایش بدهید، apc استفاده کنید، ترجیحا از هارد ssd استفاده کنید و سرعت cpu را افزایش دهید و ..
البته حرفه‌ای های این کار، می گویند که تا 150 تا ماژول خوب است و از 150 به بالا کند میشود (به نقل از omega8.cc)

1 - برای سرعت بخشیدن به دروپال، اول از همه تعداد ماژول ها را کاهش دهید و ماژول های غیر ضروری را حذف کنید.

2 - بعد، یک سری ماژول مضر را حذف کنید و یک سری ماژول خوب را نصب کنید. بعضی از ماژول های مضر بنا به تجربه ی من این ها هستند:
database logging,  field permissions, cck,  rules,  relation

برخی از ماژول های مفید این ها هستند:
boost, authcache, esi, css_emimage, entity cache, memcached

3 - اگر می توانید، به جای این که از cck استفاده کنید، content type های مورد نظرتان رو خودتان کد نویسی کنید و یک ماژول سفارشی درست کنید. خیلی سریع تر میشود.

4 - برای فیلد های content type ها، بهتر است که تمام فیلد ها داخل یک جدول در دیتابیس باشد. رفتار پیش فرض دروپال این است که برای هر فیلدی، چند تا table درست می کند و این باعث می شود که تعداد join های دیتابیس زیاد شود و سایت کند شود.
اگر می توانید، یک ماژول درست کنید که تمام فیلد ها را داخل یک جدول قرار دهد.

5 - هرچه می توانید تعداد فیلد ها را کاهش دهید. مثلا اگر می خواهید فایل ضمیمه داشته باشید، فقط یک فیلد فایل و یک فیلد تصویر داشته باشید و بی خودی فیلد تکراری درست نکنید.

6 - ماژول های مجوز فیلد ها را در صورت امکان غیر فعال کنید چون تعداد زیادی join ایجاد می کنند.

7 - هر کاری را از راه استاندارد آن انجام دهید. مثلا داخل پوسته ی سایت، دستور SQL اجرا نکنید!

8 - کارها و ترفند های دیگری هم برای سرعت بخشیدن به دروپال موجود است که با تجربه بدست می آید و خارج از حوصله ی این پست می باشد...

9 - نرم افزار و سخت افزار سرور را بررسی کنید. فرقی نمی کند که سرور اختصاصی و یا اشتراکی باشد. دروپال باید بتواند بر روی سرور اشتراکی به خوبی کار کند، اما چند تا مسئله هست که اگر بر روی سرور رعایت شده باشد، سرعت دروپال زیاد می شود:

10 - از هاست هایی که Overselling انجام می دهند اکیدا پرهیز کنید.

11 - سروری که استفاده می کنید، اگر از مجازی سازی استفاده می کند، توجه کنید که حتی الامکان از OpenVZ و Virtuozzo استفاده نکرده باشد. زیرا بسیار پیش آمده که OpenVZ مشکلات فراوانی به وجود آورده.
OpenVZ را بد ترین انتخاب برای هاستینگ دروپال می دانند (به نقل از 2bits.com)

12 - بهتر است مجازی سازی سرور مبتنی بر VMware و یا Xen باشد. البته OpenVZ هم اگه درست پیکربندی شود، خیلی هم عالی است. منتها مشکل اینجاست که اکثر OpenVZ را درست پیکربندی نمی کنند و این مشکلاتی که عرض شد به وجود می آید.

13 - بهتر است که به عنوان وب سرور، از nginx استفاده کنید. نسبت به apache سرعت خیلی بیشتری دارد.

14 - برای PHP بهتر است از fastcgi استفاده کنید. ماژول mod_php در آپاچی خیلی کند است و اصلا توصیه نمی شود.

15 - دقت کنید که حتما apc فعال باشد. البته ظاهرا Zend Optimizer با آن مشکل دارد و نمی توانند در کنار هم کار کنند. در هر حال از Op code cahing استفاده کنید.

16 - اگر می توانید تلاش کنید که ترافیک دیتابیس MySQL را کاهش دهید. مثلا می توانید caching دروپال را با استفاده از redis-server و یا با apc و یا با memcached انجام دهید (هر کدام با دیگری فرق دارد)

17 - استفاده از هارد ssd به خصوص برای database خیلی سیستم را سریع می کند

18 - اگر تجربه ی خاصی راجع به کارایی دروپال دارید، لطف کنید و حتما برای من هم ارسال کنید. متشکرم :)

دیدگاه‌ها

مسلماً سرعت یک سایت یک موضوع محض نیست و به عوامل زیادی بستگی داره. استفاده از سیستم کشینگ مناسب مثل varnish میتونه تا حد بسیار زیادی برای سایت های پر بازدید مناسب باشه. از لحاظ کُر هم که دروپال تو اجرا یک سر و گردن از سیستم های دیگه بالاتره، و این امر در درخواست هایی که به وب سرور میفرسته مشخصه. جوملا و دروپال جفتشون برای پیاده سازی گرافیک از موتور phptemplate استفاده میکنن که مسلماً یکی از قویترین هاست. در مورد تعداد ماژول ها هم باهاتون کاملا موافقم، ولی در تعداد یک ماژول نباید یه امر محدود کننده باشه، میشه با کانفیگ درست سرور و استفاده از nginx به جای آپاچی سرعت رو تا حد زیادی بهینه کرد. استفاده کمتر از views و همین طور فایل های سنگین متنی و سمت مشتری هم میتونه کمک کنه.

واقعیت اینه که سیستم های دیگه هم اگر بخواهیم چنین کارایی داشته باشند کند خواهند بود. اما یک نکته اینکه استفاده از nginx به عنوان http server خیلی مرسوم نیست بیشتر از nginx در کنار apache استفاده میکنند و mod_php برای سرورهای تک سایتی بهتر از fastcgi هست. این یک تجربه شخصیه اما برای hosting ها حتما fastcgi بهتره به خاطر مسائل امنیتی.

صحیح است.
phptemplate از آن جایی که نیاز به پردازش اضافی نداره، سرعت بیشتری داره،
خوب البته در عوض یک سری امکانات خاص smarty و twig و ... را هم از دست میده، البته دروپال رو میشه با twig و smarty هم سازگار کرد.

I love Drupal

بله، استفاده از nginx و یا varnish به عنوان reverse p-ro-xy می تونه سرعت سیستم رو برای ترافیک بالا افزایش بده، ولی این فقط وقتی خوب است که مجبور باشیم از apache استفاده کنیم و استفاده ی مستقیم از nginx میسر نباشد.
استفاده از reverse p-ro-xy ها ضمن مزایای زیادی که دارند، یک سری دردسر خاص خودشان رو هم دارند.
با این حال من همیشه دروپال رو بر روی nginx نصب می کنم. همین سایت هم با nginx است!

در مورد mod_php شاید حق با شما باشد، ولی من در تجربه ای که در چند ماه گذشته داشتم، واقعا mod_php بسیار افتضاح عمل می کرد و مصرف ram آن فاجعه بود (1.5 گیگابایت رم برای لود یک صفحه ساده!!)
البته مطمئن هستم که این مشکل ارتباط با پیکربندی سیستم مجازی سازی OpenVZ من داشته.
با این حال، از وقتی که nginx استفاده می کنم هیچ مشکلی ندارم.
ضمنا در اضافه به فرمایشات شما عرض کنم که mod_php را هم می توان به کمک mod_ruid2 و یا suPhp امن کرد و برای هاستینگ اشتراکی استفاده کرد.

I love Drupal

افزودن دیدگاه جدید