نکات ساده برای بهبود عملکرد دروپال (بخش اول)

آموزش نکاتی برای بهبود کارآیی و عملکرد دروپال و فرآیند بهبود سرعت لود دروپال

نویسنده: اریک وب (مشاور تکنیکی ارشد در ACQUIA)
ترجمه: وحید سبتو (برنامه نویس دروپال، دروپالیکا)

مقدمه

دروپال، یک فریم ورک با انعطاف پذیری بسیار بالا است که گزینه های پیکربندی فراوانی دارد. در هر فریم ورک بزرگی، انعطاف پذیری و کارآیی (performance) باید هماهنگ و متوازن باشند. دروپال با پیکربندی صحیح می تواند مثل برق! سریع عمل کند. در این مطلب، نشان می دهیم که چگونه کارآیی یک سایت دروپالی را بدون نیاز به کد نویسی، بهینه سازی کنید.

تمرکز مطلب

روی آن دسته از مسائلی تمرکز می کنیم که معمولا در دروپال یافت می شوند و هر دروپال کاری به آسانی می تواند آن ها را انجام دهد. فقط باید توجه داشت که دروپال تنها یک نرم افزار تحت وب است که خود بر بستری از نرم افزار های دیگر که پایه ای هستند، عمل می کند. هر کدام از این بستر های پایه، خود منبع مشکلات مربوط به کارآیی می باشند. تنظیم درست وب سرور (احتمالا آپاچی)، دیتابیس (معمولا MySQL) و موتور PHP تاثیر مهمی روی کارآیی سایت ها دارند که در این مطلب به آنها نمی پردازیم.

تولید صفحات در دروپال

برای بهینه کردن عملکرد دروپال، مناسب است که ابتدا مقایسه ای بین یک صفحه وب که به صورت یک فایل استاتیک HTML است، با روشی که دروپال صفحات را می سازد، داشته باشیم. کد و محتوای یک صفحه استاتیک HTML درون یک فایل قرار دارد. این فایل زمانی لود می شود که آدرس (URL) آن فایل از یک برنامه مرورگر فراخوانی می شود. این فایل ممکن است ضمائم دیگری نیز داشته باشد مثل فایل های CSS و فایل های JS. ولی لود آنها نیز سریع است.

اما برای لود یک صفحه در دروپال، این سیستم باید تعداد زیادی از عملیات های پیچیده را اجرا کند. راه اندازی اولیه دروپال، bootstrapping نام دارد و در لود هر صفحه اجرا می شود. این عملیات بزرگ شامل راه اندازی اولیه کتابخانه های هسته دروپال و دیتابیس و پس از آن مجموعه ای از عملیات ها و مراحل دیگری است. این عملیات ها خود شامل چک کردن ماژول هایی که باید راه اندازی شوند، چک کردن مجوز های دسترسی های کاربر و بازیابی داده ها از کش می باشد. هر صفحه ممکن است نیاز به چند فایل CSS و JS ضمیمه و فایل های دیگری نیز داشته باشد.

تمام محتوای دروپال در دیتابیس ذخیره شده است. آن دسته از عملیات هایی در bootstrapping زمان زیادی را صرف می کنند که برای یافتن محتوا، تنظیمات و غیره، ارتباطات زیادی با دیتابیس برقرار می کنند. هر چه ارتباطات با دیتابیس بیشتر شود، زمان تولید صفحه نیز طولانی تر می شود. کاهش تعداد عملیات هایی که برای تولید یک صفحه لازم هستند، کلید بهینه سازی عملکرد دروپال است.

کش برای سرعت

وقتی از کش (cache) استفاده می کنیم، عناصری که در صفحه نمایش داده می شوند به صورت رندر شده (rendered) ذخیره می شوند، بنابراین نیاز به ارتباط با دیتابیس کاهش می یابد. زمانی که یک صفحه یا یک بخش که کش شده است، صدا زده می شود، چیزی که برگردانده می شود، HTML است و تقریبا می توان گفت که سرعت لود یک صفحه HTML استاتیک به دست آمده است. کش کردن راه حل اولیه برای بهبود عملکرد دروپال است.

انواع کش در دروپال

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

کش در سطح برنامه (Application-level Caching)

دروپال کش های زیادی دارد که درون هسته آن قرار دارد. این کش ها که در سطح application قرار دارند، قابلیت فعال/غیر فعال کردن یا بهینه سازی را ندارند. زمانی که می گوییم برای بعضی از عملیات های دروپال، نیاز به clear cache برای مشاهده تغییرات داریم، کش های سطح Application مورد نظر ما هستند.

کش در سطح اجزا (Component-level Caching)

مقصود این مطلب از اجزاء، عناصر بصری می باشند که سایت را می سازند مانند هر چیزی که در نوارهای کناری (sidebar)، سر صفحه (header) و محتوای اصلی صفحه (content) قرار دارد. چیزهایی مثل View ها، پنل ها و بلوک ها نیز ذیل همین قسمت می آیند. کش کردن این اجزا می تواند تا حد زیادی منجر به بهبود عملکرد دروپال شود. مثلا اگر یک بلوک داریم که در تمام صفحات سایت نمایش داده می شود، کش کردن این بلاک می تواند به بهبود کارآیی سایت کمک کند.

کش کردن در سطح صفحه (Page-level Caching)

این کش بسیار موثر است. اگر یک صفحه به صورت کامل کش شود، نیازی به bootstrapping وجود ندارد. این نوع کش فقط برای بازدیدکنندگانی که با حساب کاربری خود در سایت وارد نشده اند یا به اصطلاح anonymous user هستند، کار می کند. بنابراین کاربرد آن به ترافیک سایت بستگی دارد.

فرآیند بهبود کارآیی در دروپال

پیشنهاداتی که در ادامه مطرح می شود، به ما کمک می کند که یک سایت دروپالی کارآمد بسازیم و مشکلات را در زمانی که رخ می دهند بشناسیم. در حالت آرمانی، اینها باید از ابتدا انجام شوند ولی ماهیتاً طوری هستند که می توان از مزایای استفاده از آنها در هر زمانی استفاده کرد.

تعیین هدف کارآیی

سایت ما چقدر باید سریع باشد؟ برای یک سایت مهم که با مشتری سر و کار دارد، هر میلی ثانیه اهمیت دارد. برای یک سایت که در یک اینترانت کار می کند، کارآیی احتمالا اولویت بالایی ندارد. اگر زیبایی های سایت بسیار مهم باشد که از یک قالب سنگین استفاده می کند یا کد های تعاملی جاوا اسکریپت دارد، لود طولانی تر ممکن است قابل قبول باشد.

اندازه گیری کارآیی

باید از ابزارها برای اندازه گیری کارآیی استفاده کنیم. چه قسمت هایی از سایت سریع و کدام یک کند هستند؟

مستند سازی

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

پرسش هایی در باره نصب ماژول های جدید در دروپال

شناختن ماژول هایی که در سایت قرار دارند، اینکه چطور کار می کنند و اینکه در کجا باعث وقوع مشکلی می شوند، می تواند ما را از سردرد های بعدی نجات بدهد. هر زمانی که در نظر داریم یک ماژول جدید به سایت اضافه کنیم، باید به پرسش هایی زیر پاسخ بدهیم:

  • این ماژول چه کاری انجام می دهد؟
  • آیا سایت واقعا به آن نیاز دارد؟
  • چه زمانی دروپال این ماژول را اجرا می کند؟
  • این ماژول روی چه عملیات ها دیگری در دروپال تاثیر می گذارد؟

به عنوان یک قانون عمومی، هر چقدر ما ماژول های بیشتری به سایت اضافه کنیم، نیاز بیشتری به بررسی عملکرد دروپال ایجاد می کنیم. نمی توان عدد مشخصی برای تعداد ماژول های یک سایت بیان کرد که باعث کاهش کارآیی سایت می شوند.

بهتر است در صف مشکلات (issue) یک ماژول در سایت دروپال، با تگ Performance جستجو کنیم نه Slow یا چیز دیگری. با استفاده از تگ Performance، بهتر به نتایج مرتبط می رسیم.

باید توضیح ماژول در صفحه آن پروژه در سایت دروپال را بخوانیم و درک کنیم و به دنبال مستنداتی که در سایت دروپال درباره آن ارائه می شود، برویم. ماژول را روی یک سایت آزمایشی و یا در زیر تولید، نصب کنیم و آن را بررسی کنیم. فایل readme.txt را در فایل های آن ماژول بخوانیم. آیا ماژول زمانی که کاربر در سایت وارد سایت می شود، عمل می کند یا زمانی که یک محتوا در سایت تغییر می کند و یا در پیش زمینه کار می کند مثلا با کرون در دوره های زمانی خاصی اجرا می شود؟

ارسال نظر