Dev to webs {Coding…}

เรียนรู้การพัฒนาซอฟเวอร์ เพื่อความรู้ที่ยั่งยืน

บทที่ 17: การเพิ่มประสิทธิภาพและลดขนาดไฟล์ Tailwind CSS


ทำไมต้องเพิ่มประสิทธิภาพและลดขนาดไฟล์ Tailwind CSS?

Tailwind CSS มี Utility Classes จำนวนมากเพื่อรองรับการออกแบบที่ยืดหยุ่น อย่างไรก็ตาม ในกระบวนการพัฒนา ไฟล์ CSS ที่สร้างขึ้นอาจมีขนาดใหญ่มากเพราะรวมทุกคลาสไว้ แม้บางคลาสจะไม่ได้ใช้งานจริง การลดขนาดไฟล์ CSS ให้เล็กลงไม่เพียงช่วยเพิ่มความเร็วในการโหลดเว็บไซต์ แต่ยังปรับปรุงประสิทธิภาพ SEO และประสบการณ์ของผู้ใช้อีกด้วย


1. การเปิดใช้งาน PurgeCSS

PurgeCSS เป็นเครื่องมือที่ช่วยลบคลาสที่ไม่ได้ใช้งานออกจากไฟล์ CSS โดย Tailwind CSS รองรับ PurgeCSS ในตัวผ่านการตั้งค่า purge ในไฟล์ tailwind.config.js

ตัวอย่างการตั้งค่า PurgeCSS:

module.exports = {
  purge: ['./src/**/*.{html,js}'], // ระบุไฟล์ที่ต้องการค้นหาคลาส
  theme: {
    extend: {},
  },
  plugins: [],
};

ในตัวอย่าง:

  • ./src/**/*.{html,js}: PurgeCSS จะค้นหา Utility Classes ในไฟล์ HTML และ JavaScript ที่อยู่ในโฟลเดอร์ src

2. การลดขนาดไฟล์ CSS ในโหมด Production

ในโหมด Production Tailwind CSS จะทำงานร่วมกับ PurgeCSS เพื่อสร้างไฟล์ CSS ที่เล็กที่สุด

ตัวอย่างการสร้างไฟล์ CSS สำหรับ Production:

npx tailwindcss -i ./src/input.css -o ./dist/output.css --minify

  • --minify: ลดขนาดไฟล์ CSS ด้วยการลบช่องว่างและตัวอักษรที่ไม่จำเป็น

3. การใช้ Safelist เพื่อป้องกันการลบคลาสที่ต้องการ

หากคุณมีคลาสที่ถูกใช้งานแบบไดนามิก (เช่น ผ่าน JavaScript) คุณสามารถเพิ่มคลาสเหล่านี้ลงใน safelist เพื่อป้องกันไม่ให้ PurgeCSS ลบออก

ตัวอย่างการตั้งค่า Safelist:

module.exports = {
  purge: {
    content: ['./src/**/*.{html,js}'],
    options: {
      safelist: ['bg-red-500', 'text-blue-500'], // รายการคลาสที่ต้องการเก็บไว้
    },
  },
  theme: {
    extend: {},
  },
  plugins: [],
};


4. การใช้ CSS Tree Shaking

CSS Tree Shaking เป็นอีกเทคนิคหนึ่งที่ช่วยลบโค้ด CSS ที่ไม่ได้ใช้งาน โดย Tailwind CSS รองรับการทำงานนี้ร่วมกับ Build Tools เช่น Webpack หรือ Vite

ตัวอย่างการตั้งค่าใน Webpack:

const purgecss = require('@fullhuman/postcss-purgecss');

module.exports = {
  plugins: [
    require('tailwindcss'),
    require('autoprefixer'),
    purgecss({
      content: ['./src/**/*.{html,js}'],
      defaultExtractor: content => content.match(/[\w-/:]+(?<!:)/g) || [],
    }),
  ],
};


5. การตั้งค่า PostCSS สำหรับ Production

Tailwind CSS รองรับการใช้ PostCSS เพื่อช่วยจัดการกระบวนการ Build และเพิ่มประสิทธิภาพไฟล์ CSS

ตัวอย่างไฟล์ postcss.config.js:

module.exports = {
  plugins: [
    require('tailwindcss'),
    require('autoprefixer'),
    ...(process.env.NODE_ENV === 'production'
      ? [require('@fullhuman/postcss-purgecss')({
          content: ['./src/**/*.{html,js}'],
          defaultExtractor: content => content.match(/[\w-/:]+(?<!:)/g) || [],
        })]
      : []),
  ],
};


6. การเพิ่มประสิทธิภาพด้วย CDN

หากคุณต้องการใช้งาน Tailwind CSS อย่างรวดเร็วโดยไม่ต้องติดตั้งผ่าน npm คุณสามารถใช้ CDN พร้อมการตั้งค่าให้รองรับ PurgeCSS ได้

ตัวอย่างการใช้ Tailwind CSS จาก CDN:

<script src="https://cdn.tailwindcss.com"></script>
<script>
  tailwind.config = {
    purge: ['./src/**/*.{html,js}'],
    theme: {
      extend: {},
    },
  };
</script>


7. การตรวจสอบขนาดไฟล์ CSS

คุณสามารถใช้เครื่องมือเช่น PurifyCSS หรือ PurgeCSS Playground เพื่อตรวจสอบและวิเคราะห์ขนาดไฟล์ CSS

ตัวอย่างการใช้งาน PurifyCSS:

npx purifycss src/**/*.html src/**/*.js -o dist/output.css


8. ตัวอย่างการใช้งานจริง

การสร้างไฟล์ CSS ที่เล็กที่สุดสำหรับ Production:

  1. เพิ่มโค้ด HTML หรือ JS ที่ใช้ Utility Classes
  2. ตั้งค่า PurgeCSS ใน tailwind.config.js
  3. รันคำสั่ง Build:
npx tailwindcss -i ./src/input.css -o ./dist/output.css --minify

9. เคล็ดลับการเพิ่มประสิทธิภาพ Tailwind CSS

  • ใช้ PurgeCSS เสมอในโหมด Production: เพื่อให้ได้ไฟล์ CSS ที่เล็กที่สุด
  • ตรวจสอบคลาสที่ไม่ได้ใช้: ลบคลาสที่ไม่ได้ใช้งานจากโค้ด
  • ใช้ Safelist อย่างระมัดระวัง: เพื่อป้องกันการลบคลาสสำคัญ
  • แยกไฟล์ CSS สำหรับแต่ละหน้า: ลดขนาดไฟล์ CSS สำหรับแต่ละหน้าเพื่อลดเวลาโหลด

สรุป

การเพิ่มประสิทธิภาพและลดขนาดไฟล์ Tailwind CSS เป็นขั้นตอนสำคัญสำหรับการพัฒนาเว็บไซต์ที่มีประสิทธิภาพสูง การใช้ PurgeCSS, Safelist, และการตั้งค่า PostCSS ช่วยให้ไฟล์ CSS ของคุณเล็กลงและเหมาะสำหรับการใช้งานจริง ในบทถัดไป เราจะมาพูดถึง การสร้างโปรเจกต์จริงด้วย Tailwind CSS เพื่อรวมทุกความรู้ที่เรียนมาให้เกิดประโยชน์สูงสุด!