ลดขนาด CSS

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

กำลังโหลด CSS ที่ไม่ลดขนาด

ดูบล็อก CSS ต่อไปนี้

body {
  font-family: "Benton Sans", "Helvetica Neue", helvetica, arial, sans-serif;
  margin: 2em;
}

/* all titles need to have the same font, color and background */
h1 {
  font-style: italic;
  color: #373fff;
  background-color: #000000;
}

h2 {
  font-style: italic;
  color: #373fff;
  background-color: #000000;
}

เนื้อหานี้อ่านง่าย และมีค่าใช้จ่ายในการสร้างไฟล์ขนาดใหญ่เกินความจำเป็น ดังนี้

  • โดยจะใช้ช่องว่างเพื่อวัตถุประสงค์การเยื้องและมีความคิดเห็นที่เบราว์เซอร์ไม่สนใจ จึงจะนำออกได้
  • องค์ประกอบ <h1> และ <h2> มีรูปแบบเดียวกัน: แทนที่จะประกาศแยกกัน: "h1 {...} h2 {...}" อาจแสดงเป็น "h1, h2{...}"
  • background-color #000000 อาจแสดงเป็น #000 ได้

หลังจากทำการเปลี่ยนแปลงเหล่านี้ คุณจะได้รูปแบบเดียวกันในเวอร์ชันกะทัดรัดมากขึ้น

body{font-family:"Benton Sans","Helvetica Neue",helvetica,arial,sans-serif;margin:2em}h1,h2{font-style:italic;color:#373fff;background-color:#000}

คุณคงไม่อยากเขียน CSS แบบนั้น แต่คุณเขียน CSS ตามปกติและเพิ่มขั้นตอนการลดขนาดในกระบวนการสร้างได้ ในคู่มือนี้ คุณจะได้เรียนรู้วิธีดำเนินการโดยใช้เครื่องมือสร้างยอดนิยมอย่าง webpack

วัดระยะทาง

คุณจะใช้การลดขนาด CSS กับเว็บไซต์ที่ใช้ในคู่มืออื่นๆ ซึ่งก็คือ Fav Kitties เว็บไซต์เวอร์ชันนี้ใช้ไลบรารี CSS เจ๋งๆ อย่าง animate.css เพื่อแสดงภาพเคลื่อนไหวขององค์ประกอบต่างๆ ของหน้าเว็บเมื่อผู้ใช้โหวตให้แมว 😺

ในขั้นแรก คุณต้องเข้าใจว่าอะไรคือโอกาสที่จะเกิดขึ้นหลังจากลดขนาดไฟล์นี้

  1. เปิดหน้าการวัด
  2. ป้อน URL https://fav-kitties-animated.glitch.me แล้วคลิกเรียกใช้การตรวจสอบ
  3. คลิกดูรายงาน
  4. คลิกประสิทธิภาพ แล้วไปที่ส่วนโอกาส

รายงานที่ได้แสดงให้เห็นว่าไฟล์ animate.css สามารถบันทึกได้สูงสุด 16 KB ดังนี้

Lighthouse: ลดโอกาสการใช้ CSS

จากนั้นตรวจสอบเนื้อหาของ CSS โดยทำดังนี้

  1. เปิดเว็บไซต์ Fav Kitties ใน Chrome (อาจใช้เวลาสักครู่เพื่อให้เซิร์ฟเวอร์ของ Glitch ตอบกลับในครั้งแรก)
  2. กด "Control Shift J" (หรือ "Command Option J" ใน Mac) เพื่อเปิดเครื่องมือสำหรับนักพัฒนาเว็บ
  3. คลิกแท็บเครือข่าย
  4. คลิกตัวกรอง CSS
  5. เลือกช่องทำเครื่องหมายปิดใช้แคช
  6. โหลดแอปซ้ำ

การติดตาม CSS ที่ไม่ได้เพิ่มประสิทธิภาพของเครื่องมือสำหรับนักพัฒนาเว็บ

หน้าเว็บขอไฟล์ CSS 2 ไฟล์ซึ่งมีขนาด 1.9 KB และ 76.2 KB ตามลำดับ

  1. คลิก animate.css
  2. คลิกแท็บการตอบกลับเพื่อดูเนื้อหาของไฟล์

โปรดทราบว่าสไตล์ชีตมีอักขระสำหรับช่องว่างและการเยื้อง:

คำตอบที่ไม่ได้เพิ่มประสิทธิภาพ CSS ของเครื่องมือสำหรับนักพัฒนาเว็บ

ถัดไป คุณจะต้องเพิ่มปลั๊กอิน Webpack บางอย่างในกระบวนการบิลด์เพื่อลดขนาดไฟล์เหล่านี้

การลดรูป CSS ด้วย Webpack

ก่อนที่จะเริ่มการเพิ่มประสิทธิภาพ ให้ทำความเข้าใจเกี่ยวกับวิธีการทำงานของกระบวนการสร้างเว็บไซต์ Fav Kitties ดังนี้

โดยค่าเริ่มต้น แพ็กเกจ JS ที่ได้ซึ่ง Webpack สร้างขึ้นจะประกอบด้วยเนื้อหาของไฟล์ CSS แบบแทรกในบรรทัด เนื่องจากเราต้องการเก็บไฟล์ CSS แยกกัน เราจึงใช้ปลั๊กอินเสริม 2 ปลั๊กอิน ได้แก่

  • mini-css-extract-plugin จะแยกสไตล์ชีตแต่ละรายการออกเป็นไฟล์ของตัวเอง โดยเป็นหนึ่งในขั้นตอนหนึ่งของกระบวนการบิลด์
  • webpack-fix-style-only-entries ซึ่งใช้เพื่อแก้ไขปัญหาใน Wepback 4 เพื่อหลีกเลี่ยงการสร้างไฟล์ JS เพิ่มเติมสำหรับไฟล์ CSS แต่ละไฟล์ที่แสดงอยู่ใน webpack-config.js

คุณจะต้องทำการเปลี่ยนแปลงบางอย่างในโปรเจ็กต์

  1. เปิดโปรเจ็กต์ Fav Kitties ใน Glitch
  2. หากต้องการดูแหล่งที่มา ให้กดดูแหล่งที่มา
  3. คลิกรีมิกซ์เพื่อแก้ไขเพื่อทำให้โปรเจ็กต์แก้ไขได้
  4. คลิกเทอร์มินัล (หมายเหตุ: หากปุ่มเทอร์มินัลไม่แสดง คุณอาจต้องใช้ตัวเลือกแบบเต็มหน้าจอ)

หากต้องการลดขนาด CSS ที่ได้ คุณจะต้องใช้ optimize-css-assets-webpack-plugin

  1. ในคอนโซล Glitch ให้เรียกใช้ npm install --save-dev optimize-css-assets-webpack-plugin
  2. เรียกใช้ refresh เพื่อให้การเปลี่ยนแปลงซิงค์กับเครื่องมือแก้ไขภาพแตก

จากนั้นกลับไปที่เครื่องมือแก้ไข Glitch เปิดไฟล์ webpack.config.js แล้วทำการแก้ไขต่อไปนี้

โหลดโมดูลที่จุดเริ่มต้นของไฟล์: js const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");

จากนั้นส่งอินสแตนซ์ของปลั๊กอินไปยังอาร์เรย์ปลั๊กอิน ดังนี้ js plugins: [ new HtmlWebpackPlugin({template: "./src/index.html"}), new MiniCssExtractPlugin({filename: "[name].css"}), new FixStyleOnlyEntriesPlugin(), new OptimizeCSSAssetsPlugin({}) ] หลังจากทำการเปลี่ยนแปลงแล้ว ระบบจะทริกเกอร์การสร้างโปรเจ็กต์อีกครั้ง นี่คือลักษณะของผลลัพธ์ webpack.config.js

ถัดไป คุณจะตรวจสอบผลของการเพิ่มประสิทธิภาพนี้ด้วยเครื่องมือด้านประสิทธิภาพ

ยืนยัน

  • หากต้องการดูตัวอย่างเว็บไซต์ ให้กดดูแอป แล้วกด เต็มหน้าจอ เต็มหน้าจอ

ถ้าคุณหลงทางในขั้นตอนก่อนหน้า คุณสามารถคลิก ที่นี่เพื่อเปิด เวอร์ชันของไซต์

หากต้องการตรวจสอบขนาดและเนื้อหาของไฟล์ ให้ทำดังนี้

  1. กด "Control Shift J" (หรือ "Command Option J" ใน Mac) เพื่อเปิดเครื่องมือสำหรับนักพัฒนาเว็บ
  2. คลิกแท็บเครือข่าย
  3. คลิกตัวกรอง CSS
  4. เลือกช่องทำเครื่องหมายปิดใช้แคช หากยังไม่ได้เลือกไว้
  5. โหลดแอปซ้ำ

คำตอบที่ไม่ได้เพิ่มประสิทธิภาพ CSS ของเครื่องมือสำหรับนักพัฒนาเว็บ

คุณสามารถตรวจสอบไฟล์เหล่านี้ และดูว่าเวอร์ชันใหม่ไม่มีช่องว่าง ทั้ง 2 ไฟล์มีขนาดเล็กลงมาก โดยเฉพาะ animate.css ที่ลดลงเหลือ ~26% จึงประหยัดพื้นที่ได้ ~20 KB!

ขั้นตอนสุดท้าย

  1. เปิดหน้าการวัด
  2. ป้อน URL ของเว็บไซต์ที่ได้รับการเพิ่มประสิทธิภาพ
  3. คลิกดูรายงาน
  4. คลิกประสิทธิภาพและหาส่วนโอกาส

รายงานไม่แสดง "Minify CSS" ว่า "โอกาส" อีกต่อไป และตอนนี้ได้ย้ายไปที่ "ผ่านการตรวจสอบแล้ว" ส่วน:

Lighthouse ผ่านการตรวจสอบเพื่อเพิ่มประสิทธิภาพหน้าเว็บ

เนื่องจากไฟล์ CSS เป็นทรัพยากรที่บล็อกการแสดงผล หากคุณใช้การลดขนาดในเว็บไซต์ที่ใช้ไฟล์ CSS ขนาดใหญ่ คุณจะเห็นการปรับปรุงเกี่ยวกับเมตริกต่างๆ เช่น First Contentful Paint

ขั้นตอนถัดไปและทรัพยากร

ในคู่มือนี้ เราได้กล่าวถึงการลดขนาด CSS ด้วย Webpack แต่คุณก็สามารถใช้แนวทางเดียวกันนี้ได้ด้วยเครื่องมือสร้างอื่นๆ เช่น gulp-clean-css สำหรับ Gulp หรือ grunt-contrib-cssmin สำหรับ Grunt

การลดขนาดยังใช้ได้กับไฟล์ประเภทอื่นๆ อีกด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือในการลดรูป JS และเทคนิคเสริมบางอย่าง เช่น การบีบอัด ได้ในคู่มือการลดและบีบอัดเพย์โหลดเครือข่าย