بهینه سازی CSS و جاوااسکریپت
بهینه سازی CSS و جاوااسکریپت سه کار است و به همین ترتیب هم ارزش دارند: حذف کردن آنچه لازم نیست، دیرتر فرستادن آنچه فورا لازم نیست، و کوچک کردن آنچه می ماند. روی همین سایت، کوچک سازی شیت اصلی ۱۶.۳ کیلوبایت روی سیم صرفه جویی کرد و یک فایل تحلیلی که خودمان ننوشته ایم ۱۷۱.۱ کیلوبایت می گیرد.
- درس ۷ از ۱۰
- میانی
- رایگان، بدون ثبت نام
به این ترتیب کار کنید
- وزن هر فایل را روی سیم اندازه بگیرید، نه روی دیسک
- برای هر ردیف بپرسید چه قابلیتی می دهد و آیا اینجا لازم است
- آنچه ماند را با defer یا async از سر راه رندر کنار ببرید
- آخر از همه کوچک سازی کنید و عدد را بعد از فشرده سازی بخوانید
- بعد از هر تغییر یک بار امتحان کنید، نه بعد از ده تا
این کارها وقت می خورند و کم نتیجه اند
- کوچک سازی گرفتن از فایلی که اصلا نباید در صفحه باشد
- defer زدن گروهی به همه اسکریپت ها با یک کلید
- ملاک گرفتن درصدی که ابزار قبل از فشرده سازی نشان می دهد
- استفاده از خروجی ابزار CSS بحرانی بدون نگاه کردن به صفحه
آخرین بررسی: فکت ها و نام ابزارهای این درس در همین تاریخ با منابعشان بازبینی شده اند.
قبل از هر بهینه سازی، وزن واقعی را بگیرید
بیشتر آموزش های سرعت از وسط شروع می کنند: کوچک سازی، ترکیب فایل ها، تعویق. اینها همه درست اند و همه بعد از یک سوال می آیند که کسی نمی پرسد، و آن سوال این است که این فایل اصلا برای چه اینجاست.
برای اینکه بتوانید بپرسید، اول باید وزن واقعی هر فایل را ببینید، نه اندازه روی دیسک را. چیزی که اهمیت دارد اندازه روی سیم است، یعنی همان چیزی که فشرده شده به بازدیدکننده می رسد. این دستور همه اسکریپت های یک صفحه را با همان اندازه فهرست می کند:
curl -s https://example.com/ \
| grep -oE 'src="[^"]+\.js[^"]*"' | cut -d'"' -f2 | sort -u \
| while read u; do printf '%8s %s\n' \
"$(curl -s -o /dev/null -H 'Accept-Encoding: gzip' -w '%{size_download}' "$u")" "$u"; doneیک تله در همین دستور هست که خودمان خوردیم: اگر آدرسی در HTML علامت & داشته باشد، به شکل & نوشته می شود و آن خط صفر بایت گزارش می دهد. صفر یعنی اندازه گیری نشد، نه اینکه فایل سبک است. آن یک خط را دستی درست کنید یا نادیده بگیرید.
خروجی این دستور روی یکی از صفحه های خود ما، مرتب شده از سنگین به سبک، این بود: ۱۷۱.۱ کیلوبایت برای فایل تحلیلی گوگل، ۲۹.۹ کیلوبایت برای جی کوئری، ۵.۹ کیلوبایت برای اسکریپت اصلی خودمان، ۱.۹ کیلوبایت برای ماشین حساب قیمت و کمتر از یک کیلوبایت برای اسکریپت کپچا. اسکریپت کپچای کلادفلر روی دامنه خودشان است و از خط فرمان اندازه اش صفر برگشت، پس آن را در حساب نیاوردیم و همین جا می گوییم که اندازه اش را نمی دانیم.
حالا جمع بزنید. آنچه ما نوشته ایم ۷.۸ کیلوبایت است و آنچه ننوشته ایم ۲۰۱.۵ کیلوبایت. یعنی ۹۶.۳ درصد وزن جاوااسکریپتی که آن صفحه می فرستد، کد کسی دیگر است. هیچ مقدار کوچک سازی این نسبت را جابه جا نمی کند.

کوچک سازی چقدر کم می کند؟ عدد را بعد از فشرده سازی بخوانید
کوچک سازی یعنی حذف هر چیزی از فایل که مرورگر لازم ندارد: فاصله ها، توضیح ها، اسم های بلند، و در ابزارهای بهتر، قاعده های تکراری که در هم ادغام می شوند. کاری است که باید انجام بدهید و رایگان است، ولی عددی که افزونه ها به شما نشان می دهند عدد اشتباهی است.
شیت اصلی همین سایت را در دو حالت اندازه گرفتیم، یک بار خام و یک بار فشرده شده با gzip، همان طور که واقعا فرستاده می شود. نسخه اصلی ۱۲۹.۰ کیلوبایت است و فشرده شده اش ۳۲.۳ کیلوبایت. نسخه کوچک شده ۷۹.۱ کیلوبایت است و فشرده شده اش ۱۶.۳ کیلوبایت.
حالا دو صرفه جویی متفاوت را کنار هم بگذارید. روی کاغذ، کوچک سازی ۴۹.۹ کیلوبایت کم کرده، یعنی نزدیک ۳۹ درصد، و همین عدد است که در گزارش ابزار به شما نشان داده می شود. روی سیم، همان کار ۱۶.۰ کیلوبایت کم کرده. هر دو عدد درست اند و فقط دومی روی سرعت اثر دارد.
پس چرا اصلا مهم است؟ چون اگر عدد کاغذی را ملاک بگیرید، تصمیم های بعدی تان را اشتباه اولویت بندی می کنید. یک بهینه سازی که روی کاغذ ۴۰ درصد صرفه جویی نشان می دهد ممکن است روی سیم چند کیلوبایت باشد، در حالی که حذف یک اسکریپت کوچک ولی فشرده نشدنی می تواند چند برابرش ارزش داشته باشد. عدد بعد از فشرده سازی، تنها عددی است که بازدیدکننده حس می کند.
یک نکته که کمتر گفته می شود: بخش بزرگی از سود کوچک سازی روی این سایت از حذف توضیح های داخل فایل می آید. فایل اصلی ما توضیح های فارسی مفصلی دارد که برای آدم نوشته شده اند؛ gzip آنها را خوب فشرده می کند ولی حذفشان نمی کند. اگر فایل شما توضیح ندارد، فاصله فشرده و کوچک شده کمتر خواهد بود و این عادی است.
defer یا async؛ کدام و کجا
یک اسکریپت معمولی وقتی مرورگر به آن می رسد، ساخت صفحه را متوقف می کند تا دانلود و اجرا شود؛ اینکه آن ساخت دقیقا چطور پیش می رود، موضوع درس مرورگر چگونه صفحه را می سازد است. دو صفت این رفتار را عوض می کنند و تفاوتشان را باید دقیق بدانید، چون در جای اشتباه یکی از این دو صفحه را خراب می کند.
با defer مرورگر فایل را همان لحظه شروع به دانلود می کند ولی اجرایش را تا پایان ساخت صفحه نگه می دارد، و چند اسکریپت با این صفت به همان ترتیبی اجرا می شوند که در صفحه آمده اند. با async هم دانلود فورا شروع می شود ولی اجرا به محض آماده شدن فایل انجام می شود، هر جای کار که باشد، و ترتیب هیچ تضمینی ندارد.
قاعده عملی از همین تفاوت درمی آید. هر اسکریپتی که به بقیه کد شما وابسته است یا به عناصر صفحه دست می زند، defer می خواهد. هر اسکریپتی که کاملا مستقل است و به کسی کار ندارد، مثل تحلیل و آمار، async می گیرد. اگر شک دارید defer انتخاب امن تری است، چون بدترین حالتش کمی دیرتر اجرا شدن است و بدترین حالت async یک خطای غیرقابل بازتولید است که فقط روی اینترنت کند اتفاق می افتد.
حالا چیزی که در آموزش ها کم گفته می شود و در عمل بیشتر اهمیت دارد: جای اسکریپت در سند. اگر همه اسکریپت ها ته بدنه باشند، اسکریپت بدون صفت هم عملا چیز زیادی را مسدود نمی کند، چون تا آنجا کل صفحه ساخته شده. روی صفحه اول همین سایت، اولین اسکریپت در ۹۶.۶ درصد سند قرار دارد و در بخش head هیچ اسکریپت بیرونی نیست. سه اسکریپت آنجا هنوز بدون صفت اند و ما درستش نکرده ایم، چون افزونه ای که آنها را می گذارد جای ما تصمیم می گیرد.
و همین جا یک هشدار که بیشتر از هر چیز دیگری در این کار سایت می شکند: defer زدن به همه چیز به صورت گروهی. افزونه هایی هستند که این کار را با یک کلید انجام می دهند، و روی سایتی که کدش به ترتیب اجرا وابسته است، نتیجه اش صفحه ای است که تصادفی کار می کند. یکی یکی، و بعد از هر تغییر یک بار امتحان کنید.
defer و async هر دو درست اند، برای دو نوع اسکریپت
defer
- دانلود فورا شروع می شود، اجرا بعد از ساخته شدن صفحه
- ترتیب حفظ می شود، پس کدی که به کد دیگر وابسته است سالم می ماند
- برای هر چیزی که به عناصر صفحه دست می زند
async
- دانلود فورا شروع می شود، اجرا به محض آماده شدن فایل
- ترتیب هیچ تضمینی ندارد، پس وابستگی را می شکند
- برای چیزهای کاملا مستقل مثل آمار و تحلیل
هیچ کدام بهتر از دیگری نیست. اگر شک دارید defer را انتخاب کنید: بدترین حالتش دیر اجرا شدن است و بدترین حالت async خطایی است که فقط روی اینترنت کند دیده می شود.
CSS بحرانی و درون خطی کردن؛ بردی که بها دارد
هر شیت بیرونی یک منبع مسدودکننده رندر است: مرورگر تا نگیردش چیزی نمی کشد. راه حل رایج CSS بحرانی است، یعنی همان تکه ای که برای نمای اول لازم است داخل خود صفحه نوشته شود و بقیه بعدا بیاید. ما یک قدم جلوتر رفته ایم و کل شیت را درون خطی می کنیم؛ روی صفحه اول این سایت هیچ تگ link rel=stylesheet وجود ندارد و همه CSS داخل چهار بلوک استایل در سر سند است.
این تصمیم برد دارد و بهایش را هم می دهیم، و چون کمتر کسی بهایش را می نویسد، عددش را اینجا می گذاریم. همان HTML را برداشتیم، بلوک استایل اصلی را با یک لینک بیرونی عوض کردیم و هر دو نسخه را فشرده کردیم. نسخه ای که واقعا فرستاده می شود ۴۱.۸ کیلوبایت است و نسخه با شیت بیرونی ۲۶.۰ کیلوبایت. یعنی درون خطی کردن ۱۵.۸ کیلوبایت به هر پاسخ HTML اضافه می کند، برای هر بازدید، هر بار.
سر به سر شدن حساب ساده ای دارد. بازدیدکننده ای که یک صفحه می بیند و می رود چیزی اضافه نمی دهد، چون آن CSS را در هر حالت باید می گرفت. بازدیدکننده ای که پنج صفحه می بیند، چهار بار همان ۱۵.۸ کیلوبایت را دوباره می گیرد، در حالی که با شیت بیرونی یک بار می گرفت و بقیه از کش مرورگر می آمد. پس این انتخاب به شکل ترافیک شما بستگی دارد و نه به یک قاعده عمومی: برای سایتی که بیشتر بازدیدش از جستجو می آید و تک صفحه ای است، درون خطی می برد.
چیزی که این را از یک عقیده جدا می کند این است که برگشت پذیرش کرده ایم. حالت درون خطی و حالت بیرونی هر دو در کد هستند و با یک ثابت عوض می شوند، دقیقا برای اینکه بشود هر دو را سنجید و برنده را نگه داشت. اگر شکل ترافیک سایت عوض شود، این تصمیم هم عوض می شود.
و یک هشدار درباره ابزارهای CSS بحرانی: خروجی شان را باید دید. این ابزارها تصمیم می گیرند کدام قاعده ها برای نمای اول لازم اند و روی صفحه هایی که چیدمانشان با بقیه فرق دارد اشتباه می کنند. نتیجه اش صفحه ای است که یک لحظه بی قالب دیده می شود، و این از یک شیت مسدودکننده بدتر است.
CSS را درون صفحه بگذاریم یا در فایل جدا؟
درون خود صفحه
- هیچ منبع مسدودکننده رندری نمی ماند
- CSS همراه خود HTML می رسد، بدون رفت و برگشت دوم
- ولی همان بایت ها در هر بازدید دوباره فرستاده می شوند
- برای بازدید تک صفحه ای که از جستجو می آید بهتر است
در فایل جدا
- یک بار دانلود می شود و بعد از کش مرورگر می آید
- هر پاسخ HTML سبک تر می شود
- ولی تا نرسد مرورگر چیزی نمی کشد
- برای بازدیدکننده ای که چند صفحه می بیند بهتر است
ما درون خطی را انتخاب کرده ایم و بهایش ۱۵.۸ کیلوبایت روی هر پاسخ HTML است. انتخاب درست به شکل ترافیک شما بستگی دارد، نه به یک قاعده عمومی.
کدی که خودتان ننوشته اید
اینجا جایی است که این درس موضع می گیرد، و علیه خودمان: هر کاری که در چهار بخش بالا گفتیم روی کدی که خودتان نوشته اید انجام می شود، و روی سایت متوسط، کدی که خودتان نوشته اید اقلیت است.
روی همان صفحه ما، جی کوئری ۲۹.۹ کیلوبایت است. ما یک خط از آن را استفاده نمی کنیم و یک خط از آن را هم ننوشته ایم؛ افزونه امنیتی که کپچا را می گذارد به آن نیاز دارد و وردپرس آن را می فرستد. فایل تحلیلی ۱۷۱.۱ کیلوبایت است و آن هم مال گوگل است، فقط روی سرور خودمان میزبانی می شود. جمع این دو تا با اسکریپت کپچا ۲۰۱.۵ کیلوبایت می شود، در برابر ۷.۸ کیلوبایت کد خودمان.
حالا حرف اصلی: هیچ کدام از این دو را نمی شود با بهینه سازی حل کرد. جی کوئری قبلا کوچک شده و فشرده می شود. فایل تحلیلی هم همین طور. هر دو با async یا defer از سر راه رندر کنار می روند و همچنان همان تعداد بایت را از اینترنت بازدیدکننده می گیرند و همان مقدار پردازنده گوشی اش را مصرف می کنند. تنها تصمیمی که این عددها را عوض می کند این است که آیا آن قابلیت را می خواهید یا نه.
و این تصمیم را ما هنوز نگرفته ایم و صادقانه می گوییم چرا: کپچا جلوی هرزنامه فرم ها را می گیرد و تحلیل به ما می گوید کدام صفحه کار می کند. هر دو ارزشی دارند که ما هنوز بیشتر از هزینه شان می دانیم. چیزی که کرده ایم این است که هزینه را محدود کرده ایم؛ جی کوئری روی همه صفحه ها نیست، فقط روی صفحه هایی که فرم دارند. صفحه های بلاگ و درس های همین بخش آن را اصلا نمی گیرند.
پس ترتیب کار برای شما این است. اول فهرست بگیرید. بعد برای هر ردیف بپرسید این چه قابلیتی می دهد و آیا آن قابلیت روی این صفحه لازم است. آنچه ماند را دیرتر بفرستید، و آنچه هنوز ماند را کوچک کنید. اگر ترتیب را برعکس کنید، ساعت ها روی چند کیلوبایت کار می کنید و ۱۷۱ کیلوبایت را نمی بینید. و اگر سوال بعدی تان این است که سایت شما اصلا چقدر جاوااسکریپت لازم دارد، جوابش در درس آموزش جاوااسکریپت مقدماتی است.
مسیر سریع با هوش مصنوعی
راه معمولی برای فهمیدن اینکه کدام اسکریپت را می شود دیرتر فرستاد این است که یکی را عوض کنید، سایت را ببینید، و اگر نشکست بعدی را. با سه فایل جواب می دهد و با بیست فایل چند روز طول می کشد. راه سریع این است که کار دسته بندی را به مدل بدهید و کار تصمیم را نه. چیزی که این را از پرسیدن معمولی جدا می کند: به مدل فهرست خشک فایل ها را ندهید، بلکه برای هر فایل بگویید کدام افزونه یا قابلیت آن را می آورد. مدل از روی اسم فایل نمی تواند بفهمد که یک اسکریپت به ترتیب اجرا وابسته است؛ از روی کاری که آن قابلیت می کند می تواند حدس خوبی بزند. خروجی این کار یک فهرست اولویت دار است که خودتان یکی یکی اجرا می کنید.
- فهرست اسکریپت های صفحه را با همان دستور بخش اول بگیرید، با اندازه روی سیم.
- کنار هر ردیف بنویسید کدام افزونه یا قابلیت آن را می آورد. اگر نمی دانید، بنویسید نمی دانم؛ همین هم اطلاعات است.
- فهرست را با دستور زیر بدهید و سه دسته بخواهید: قابل حذف، قابل تعویق، و دست نزدنی.
- از بالای فهرست شروع کنید و هر بار فقط یک تغییر بدهید. بعد از هر تغییر صفحه را باز کنید و کنسول مرورگر را نگاه کنید. این قدم را نمی شود به مدل داد و نمی شود از آن پرید.
نسخه آماده کپی
این فهرست اسکریپت های یک صفحه از سایت من است. ستون اول اندازه روی سیم به بایت، ستون دوم آدرس، ستون سوم افزونه یا قابلیتی که آن را می آورد.
{فهرست را اینجا بچسبانید}
نوع سایت: {مثلا فروشگاه وردپرسی | سایت شرکتی | وبلاگ}
قابلیت هایی که روی این صفحه واقعا استفاده می شوند: {فرم تماس | اسلایدر | نقشه | هیچ کدام}
فهرست را در سه دسته مرتب کن و هر دسته را از سنگین به سبک بچین:
۱. قابل حذف: قابلیتی که روی این صفحه استفاده نمی شود.
۲. قابل تعویق: باید بماند ولی برای نمای اول لازم نیست. برای هر کدام بنویس defer یا async و یک جمله دلیل.
۳. دست نزدنی: هر چیزی که به ترتیب اجرا یا به عناصر صفحه وابسته است.
قاعده ها:
۱. فقط از روی همین فهرست کار کن. اگر برای تصمیم گیری درباره ردیفی اطلاعات کافی نداری، آن را در دسته سوم بگذار و بنویس چه چیزی لازم داشتی.
۲. هیچ فایلی را که نمی شناسی در دسته اول نگذار.
۳. اگر ردیفی از یک افزونه امنیتی یا پرداخت می آید، پیش فرض دسته سوم است.
۴. برای هر پیشنهاد در دسته دوم، بنویس اگر اشتباه باشد چه چیزی روی صفحه خراب می شود. این جمله همان چیزی است که من بعد از تغییر باید امتحان کنم.
۵. عدد صرفه جویی تخمینی نساز و درباره سرعت وعده نده.
خروجی را به شکل سه فهرست بده، بدون مقدمه.
قبل از اعتماد به خروجی: مدل نمی تواند سایت شما را ببیند، پس هر چیزی که در دسته قابل حذف بگذارد یک فرضیه است و نه یک نتیجه. خطرناک ترین حالتش وقتی است که فایلی را نشناسد و از روی اسمش حدس بزند؛ به همین دلیل قاعده دوم دستور بالا هست. قدم آخر هم قابل واگذاری نیست: بعد از هر تغییر، صفحه را باز کنید و کنسول مرورگر را نگاه کنید. جمله ای که در قاعده چهارم خواسته ایم دقیقا برای همین است، چون بدترین شکست های این کار بی صدا هستند و صفحه ظاهرا سالم است در حالی که یک دکمه دیگر کار نمی کند.
هوش مصنوعی در این کار
موضع ما اینجا این است: هوش مصنوعی در این کار برای دسته بندی کردن و توضیح دادن خوب است و برای تصمیم گرفتن بد. تفاوتش را می شود دقیق گفت. کدام فایل ها را می شود دیرتر فرستاد یک سوال دسته بندی است و مدل خوب جوابش می دهد. آیا حذف این فایل چیزی را می شکند یک سوال درباره سایت شماست و مدل سایت شما را ندیده. جمله ای که ارزش نگه داشتن دارد این است: مدل فهرست را مرتب می کند و شما تغییر را می دهید.
ابزارهایی که واقعا کمک می کنند
- Claude برای همان کار دسته بندی بالا مناسب است، و مخصوصا برای وقتی که قاعده می گذارید: اگر بگویید فایل ناشناخته را در دسته اول نگذار، معمولا نمی گذارد. ایران در فهرست کشورهای پشتیبانی شده انتروپیک نیست، پس نه ثبت نام رسمی انجام می شود و نه کارت ایرانی پذیرفته می شود.
- Gemini برای فهمیدن اینکه یک اسکریپت ناآشنا مال چیست مفید است، چون معمولا نام کتابخانه ها و افزونه های شناخته شده را می شناسد. صفحه خود گوگل می گوید اپ وب جمنای در بیش از ۲۳۰ کشور و قلمرو کار می کند و ایران در آن فهرست نیست.
- ChatGPT برای همان دسته بندی و توضیح دادن کافی است. درباره دسترسی از ایران ادعایی نمی کنیم، چون صفحه کشورهای پشتیبانی شده اوپن ای آی مثل بقیه آن دامنه به این سرور پاسخ ۴۰۳ می دهد.
کجا نتیجه معکوس می دهد
دو خطر، و دومی مخصوص همین درس است. اول اینکه مدل عدد صرفه جویی می سازد. اگر جلویش را نگیرید، جمله هایی مثل این کار سرعت صفحه را چهل درصد بهتر می کند تولید می شود و هیچ اندازه گیری پشتش نیست؛ برای همین در دستور بالا صریحا ممنوعش کرده ایم. خطر دوم بدتر است چون بی صدا خراب می کند: مدل کد جایگزین می نویسد. از او بپرسید چطور جی کوئری را حذف کنم و با اطمینان کامل نسخه ای از همان کد را با جاوااسکریپت ساده برایتان بازنویسی می کند. آن کد اغلب کار می کند و گاهی یک حالت مرزی را از دست می دهد که فقط روی موبایل یا فقط وقتی فرم خطا دارد دیده می شود. اگر می خواهید چنین جایگزینی انجام بدهید، آن را مثل هر کد تازه ای امتحان کنید و نه مثل یک بهینه سازی بی خطر.
منبع ها: MDN: the script element Anthropic: supported countries Google: where Gemini Apps are available
حد این توصیه
این درس درباره تحویل کد است و نه درباره نوشتنش؛ اینکه کد شما خودش کند است یا نه، موضوع دیگری است و با هیچ کدام از این کارها درست نمی شود. سه مرز دیگر هم دارد. اول اینکه عددهای این صفحه مال یک سایت اند و روی سایت شما فرق می کنند، مخصوصا سهم کوچک سازی که به مقدار توضیح داخل فایل بستگی دارد. دوم اینکه تصمیم درون خطی کردن به شکل ترافیک بستگی دارد و انتخاب ما برای سایتی است که بیشتر بازدیدش تک صفحه ای و از جستجو می آید؛ برای یک اپلیکیشن تک صفحه ای یا سایتی که کاربر در آن جلسه طولانی دارد، جواب برعکس است. سوم اینکه ما تجربه دست اولی از سایت های بسیار بزرگ با ده ها هزار صفحه و چند تیم توسعه نداریم و ادعایی درباره آنها نمی کنیم.
از تجربه خود ما
آموزنده ترین چیزی که درباره این کار یاد گرفتیم از یک اندازه گیری روی سایت خودمان آمد که انتظارش را نداشتیم. ما هر کاری که در این درس توصیه می شود روی کد خودمان انجام داده ایم: شیت به طور کامل درون خطی است، هیچ تگ شیت بیرونی در صفحه نیست، اسکریپت های خودمان همه با defer می آیند و اولین اسکریپت در ۹۶.۶ درصد سند قرار دارد. بعد وزن واقعی را گرفتیم و دیدیم یک فایل تحلیلی ۱۷۱.۱ کیلوبایتی و یک جی کوئری ۲۹.۹ کیلوبایتی روی صفحه هست که هیچ کدام را ما ننوشته ایم، در برابر ۷.۸ کیلوبایت کد خودمان. یعنی روی همان صفحه ای که همه کارهای درست را کرده بودیم، ۹۶.۳ درصد وزن جاوااسکریپت خارج از دست ما بود. از آن روز ترتیب کارمان عوض شد: اول فهرست وزن، بعد سوال درباره هر ردیف، و بهینه سازی آخر از همه.
سوال هایی که واقعا پرسیده می شوند
فایل های CSS و جاوااسکریپت را با هم ترکیب کنم؟
کمتر از آنچه فکر می کنید ارزش دارد. ترکیب کردن برای کم کردن تعداد درخواست ها بود و روی اتصال های امروزی این هزینه خیلی کاهش پیدا کرده. در عوض یک ضرر واقعی دارد: یک فایل بزرگ ترکیبی با هر تغییر کوچک کل کش مرورگر را باطل می کند. اگر بین ترکیب کردن و حذف کردن باید یکی را انتخاب کنید، حذف کردن.
افزونه بهینه سازی نصب کنم یا دستی انجام بدهم؟
افزونه برای کوچک سازی و فشرده سازی انتخاب درستی است، چون این کارها مکانیکی اند و اشتباهشان قابل برگشت است. ولی کلیدهایی که به همه چیز defer می زنند یا CSS بحرانی می سازند را یکی یکی روشن کنید و بعد از هر کدام سایت را ببینید. و یادتان باشد که هیچ افزونه ای تصمیم نمی گیرد کدام قابلیت روی این صفحه لازم نیست؛ آن تصمیم همیشه مال شماست.
جی کوئری را از سایت وردپرسی ام حذف کنم؟
اول ببینید چه چیزی آن را می خواهد، چون معمولا شما نیستید. اگر یک افزونه به آن وابسته است، حذف جی کوئری آن افزونه را می شکند و شما یک باگ خاموش می گیرید که ممکن است هفته ها ندیده بماند. کار امن تر و اغلب کافی این است که فقط روی صفحه هایی بماند که واقعا لازمش دارند؛ روی سایت ما همین کار شده و صفحه های بلاگ اصلا آن را نمی گیرند.