کاهش زمان بیلد به کمک پروفایلر

مدتی بود قصد داشتم دستی به سر و روی تم مهدیکس بکشم، چرا که تولید وبسایت خیلی کند شده بود. امروز اینکار را انجام دادم.

لپتاپی که من برای تولید وبسایت مهدیکس بکار می‌برم ۱۶ گیت رم و یک سی‌پی‌یو اینتل Core i5 2.5 GHz دارد.

Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz

اخیرا متوجه شده بودم که تبدیل سورس وبسایت به خروجی استاتیک تقریبا دو دقیقه طول می‌کشد. اول تصور کردم که جکیل کند است. اگر با ‏مولد سایت‌ساز هوگو کار کرده باشید تفاوت سرعت را حس می‌کنید. در یک آزمایش پست‌های وبسایتم را در یک سایت هوگو کپی کردم و تولید خروجی یک ثانیه هم طول نکشید! البته این مقایسه منصفانه نبود چون پلاگین‌ها را نمی‌توانستم کپی کنم. از طرفی هوگو هم از پلاگین پشتیبانی نمی‌کند و امکان فعالسازی پلاگینی مانند تاریخ شمسی وجود نداشت.

برای بررسی دقیق‌تر ماجرا از پروفایلر باندلر استفاده کردم تا مقصر کندی کامپایل را پیدا کنم:

bundler exec jekyll build --profile

چند خط اول خروجی این است:

Filename                                                                                     | Count |    Bytes |    Time
---------------------------------------------------------------------------------------------+-------+----------+--------
_layouts/default.html                                                                        |   191 | 3343.87K | 123.415
vendor/bundle/ruby/2.4.0/gems/jekyll-theme-mehdix-rtl-0.1.4/_includes/header.html            |   191 |  213.94K | 122.159
_layouts/tag_page.html                                                                       |   137 | 1388.12K |   3.364
vendor/bundle/ruby/2.4.0/gems/jekyll-theme-mehdix-rtl-0.1.4/_includes/footer.html            |   191 | 1013.57K |   0.654

در جدول بالا نام فایل و زمان سپری شده در آن فایل آمده است. مثلا در این مورد ۱۲۲.۱۵۹ ثانیه صرف پردازش فایل header.html شده است. همین کافی بود که با بررسی آن فایل متوجه اشکالی در مارک‌آپ بشوم که گویا باعث شده بود که پارسر هر بار تلاش زیادی بکند که سورس را بفهمند. مشکل هم ساده بود، تگی را باز کرده بودم ولی نبسته بودم. پروفایلر پیدا کردن این قبیل مشکلات را ساده می‌کند.

با رفع این مشکل و حذف برخی از تگ‌های بلااستفاده Liquid نتیجه خیلی بهتر شد:

    Filename                                                                                     | Count |    Bytes |  Time
---------------------------------------------------------------------------------------------+-------+----------+------
_layouts/tag_page.html                                                                       |   137 | 1394.06K | 3.528
_layouts/default.html                                                                        |   191 | 3216.87K | 1.315
vendor/bundle/ruby/2.4.0/gems/jekyll-theme-mehdix-rtl-0.1.6/_includes/footer.html            |   191 | 1055.16K | 0.643
vendor/bundle/ruby/2.4.0/gems/jekyll-theme-mehdix-rtl-0.1.6/_includes/head.html              |   192 |  153.29K | 0.411
_layouts/minimal.html                                                                        |     9 |  103.55K | 0.251

زمان کامپیال کل وبسایت از ۱۲۸.۱۸ ثانیه به ۷.۲۶۲ ثانیه کاهش پیدا کرد! حالا دیگر کندترین بخش برنامه ۳.۵ ثانیه است که صرف پردازش فایل tag_pages.html شده است، که مربوط است به یک پلاگین جکیل بنام jekyll-tagging که از آن برای تولید تگ‌کلاود استفاده کرده‌ام. (که با مقداری بررسی فهمیدم پلاگین چندان خوبی نیست. خوب نگهداری نشده، پول ریکوئست‌ها بی پاسخ مانده‌اند و سوال‌ها بدون جواب) در آینده سعی می‌کنم این بخش را بهتر کنم ولی فعلا از بهبود ۱۷۰۰ درصدی زمان بیلد خوشحالم!

مشکلات بالا را در تم مهدیکس رفع کردم و اصلاحات دیگری نیز اعمال کردم، از قبیل بهبود نمایش در موبایل و ساده‌سازی ظاهر تم و نیز ریفکتور کردن کد و حذف بخش‌های بیهوده. نتیجه شد انتشار ‬‬نسخه ۰.۱.۶ تم.