--- title: کاهش زمان بیلد به کمک پروفایلر category: جکیل tags: ساده‌سازی بیلد روبی کشینگ جکیل پروفایلینگ uuid: 15725e39-6e85-4ed9-bd7b-a0e8f09d117f --- مدتی بود قصد داشتم دستی به سر و روی تم مهدیکس بکشم، چرا که تولید وبسایت خیلی کند شده بود. امروز اینکار را انجام دادم. لپتاپی که من برای تولید وبسایت مهدیکس بکار می‌برم ۱۶ گیت رم و یک سی‌پی‌یو اینتل Core i5 2.5 GHz دارد. Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz اخیرا متوجه شده بودم که تبدیل سورس وبسایت به خروجی استاتیک تقریبا دو دقیقه طول می‌کشد. اول تصور کردم که جکیل کند است. اگر با ‏مولد سایت‌ساز [هوگو][هوگو] کار کرده باشید تفاوت سرعت را حس می‌کنید. در یک آزمایش پست‌های وبسایتم را در یک سایت هوگو کپی کردم و تولید خروجی یک ثانیه هم طول نکشید! البته این مقایسه منصفانه نبود چون پلاگین‌ها را نمی‌توانستم کپی کنم. از طرفی هوگو هم از پلاگین پشتیبانی نمی‌کند و امکان فعالسازی پلاگینی مانند تاریخ شمسی وجود نداشت. برای بررسی دقیق‌تر ماجرا از پروفایلر باندلر استفاده کردم تا مقصر کندی کامپایل را پیدا کنم: bundler exec jekyll build --profile چند خط اول خروجی این است: ~~~~bash 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` نتیجه خیلی بهتر شد: ~~~~bash 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` که از آن برای تولید تگ‌کلاود استفاده کرده‌ام. (که با مقداری بررسی فهمیدم پلاگین چندان خوبی نیست. خوب نگهداری نشده، پول ریکوئست‌ها بی پاسخ مانده‌اند و سوال‌ها بدون جواب) در آینده سعی می‌کنم این بخش را بهتر کنم ولی فعلا از بهبود ۱۷۰۰ درصدی زمان بیلد خوشحالم! مشکلات بالا را در [تم مهدیکس][مهدیکس] رفع کردم و اصلاحات دیگری نیز اعمال کردم، از قبیل بهبود نمایش در موبایل و ساده‌سازی ظاهر تم و نیز ریفکتور کردن کد و حذف بخش‌های بیهوده. نتیجه شد انتشار ‬‬[نسخه ۰.۱.۶][نسخه] تم. [هوگو]: https://github.com/gohugoio/hugo [مهدیکس]: https://github.com/mehdisadeghi/jekyll-theme-mehdix-rtl [نسخه]: https://rubygems.org/gems/jekyll-theme-mehdix-rtl/versions/0.1.6