คำเตือน
การเป็นเจ้าของ Critters ได้ย้ายไปที่ทีม Nuxt ซึ่งจะรักษาโครงการต่อไป หากคุณต้องการใช้ critters โปรดเปลี่ยนไปใช้ส้อมที่ได้รับการดูแลอย่างแข็งขันที่ https://github.com/danielroe/beasties repo นี้ถูกเก็บถาวรและจะไม่ได้รับการอัปเดตในอนาคต
Critters เป็นปลั๊กอินที่เชื่อมโยง CSS ที่สำคัญของแอปของคุณและขี้เกียจโหลดส่วนที่เหลือ
มันแตกต่างจากตัวเลือกอื่น ๆ เล็กน้อยเพราะ ไม่ได้ใช้เบราว์เซอร์ที่ไม่มีหัว เพื่อแสดงเนื้อหา การแลกเปลี่ยนนี้ช่วยให้ critters เร็วและเบา มาก นอกจากนี้ยังหมายถึง critters inlines กฎ CSS ทั้งหมดที่ใช้โดยเอกสารของคุณแทนที่จะเป็นเฉพาะที่จำเป็นสำหรับเนื้อหาที่เหนือกว่า สำหรับทางเลือกดูห้องสมุดที่คล้ายกัน
การออกแบบของ Critters ทำให้เหมาะสมเมื่อมี CSS ที่สำคัญสำหรับแอปพลิเคชันหน้าเดียวก่อน/SSR มันได้รับการพัฒนาให้เป็นคำชมที่ยอดเยี่ยมสำหรับ Preerender-Loader ซึ่งรวมกันเพื่อปรับปรุงเวลาการทาสีครั้งแรกอย่างมากสำหรับแอปพลิเคชันหน้าเดียวส่วนใหญ่
เร็ว - ไม่มีเบราว์เซอร์
รวมเข้ากับ webpack critters-webpack-plugin
รองรับการโหลดล่วงหน้าและ/หรือ inlining critical fonts
ลูกพรุนคีย์เฟรม CSS ที่ไม่ได้ใช้และการสืบค้นสื่อ
ลบกฎ CSS ที่ inlined ออกจากสไตล์ชีทที่ขี้เกียจ
ขั้นแรกให้ติดตั้ง critters เป็นการพึ่งพาการพัฒนา:
npm i -d critters
หรือ
เส้นด้ายเพิ่ม -d critters
นำเข้า critters จาก 'critters'; const critters = critters ใหม่ ({
// การกำหนดค่าเสริม (ดูด้านล่าง)}); const html = `<style> .ed {color: red}. blue {color: blue} </style> <div class =" blue "> ฉันเป็นสีน้ำเงิน <// div> `; const inlined = รอ critters.process (html); console.log (inlined); // "<style> .blue {color: blue} </style> <div class =" blue "> ฉันเป็นสีน้ำเงิน </div>"Critters ยังมีอยู่เป็นปลั๊กอิน webpack ที่เรียกว่า Critters-Webpack-Plugin
ปลั๊กอิน webpack รองรับตัวเลือกการกำหนดค่าเดียวกันกับแพ็คเกจหลัก critters :
// webpack.config.js+const critters = ต้องการ ('critters-webpack-plugin'); module.exports = {
ปลั๊กอิน: [+ critters ใหม่ ({+ // การกำหนดค่าเสริม+ preload: 'swap',+ include electors: [/^.btn/, '.banner'],+})
-
-แค่ไหน! ผลลัพธ์ HTML จะมี CS ที่สำคัญและมีรูปแบบเฮ็ตที่ขี้เกียจ
เป็นทางเลือกทั้งหมด ส่งผ่านไปยัง new Critters({ ... })
options
path พาย ฐานเส้นทางฐานของไฟล์ CSS (ค่าเริ่มต้น: '' )
publicPath String เส้นทางสาธารณะของทรัพยากร CSS คำนำหน้านี้จะถูกลบออกจาก HREF (ค่าเริ่มต้น: '' )
รูปแบบอินไลน์ บูลีน external จากรูปแบบภายนอก (ค่าเริ่มต้น: true )
หมายเลข inlineThreshold แบบอินไลน์สไตล์ชีทภายนอกเล็กกว่าขนาดที่กำหนด (ค่าเริ่มต้น: 0 )
หมายเลข minimumExternalSize หากรูปแบบภายนอกที่ไม่สำคัญจะต่ำกว่าขนาดนี้เพียงแค่อินไลน์ (ค่าเริ่มต้น: 0 )
pruneSource Boolean ลบกฎ Inlined ออกจากสไตล์ชีทภายนอก (ค่าเริ่มต้น: false )
mergeStylesheets บูลีน รวมสไตล์ชีทที่ Inlined เป็นแท็ก <style> เดียว (ค่าเริ่มต้น: true )
ARRAY additionalStylesheets <String> GLOB สำหรับการจับคู่สไตล์ชีทอื่น ๆ ที่จะใช้ในขณะที่มองหา CSS ที่สำคัญ
ตัวเลือก Boolean reduceInlineStyles ระบุว่าควรประเมินรูปแบบอินไลน์สำหรับ CSS ที่สำคัญหรือไม่ โดยค่าเริ่มต้นแท็กสไตล์อินไลน์จะได้รับการประเมินและเขียนใหม่ให้มีเฉพาะ CS ที่สำคัญ ตั้งค่าเป็น false เพื่อข้ามการประมวลผลสไตล์อินไลน์ (ค่าเริ่มต้น: true )
สตริง preload ซึ่งจะใช้กลยุทธ์ล่วงหน้าที่จะใช้
บูลีน noscriptFallback เพิ่ม <noscript> ทางเลือกกลับไปยังกลยุทธ์ที่ใช้ JS
inlineFonts Boolean Inline Inline Critical Font-face (ค่าเริ่มต้น: false )
preloadFonts บูลีน preloads แบบอักษรวิกฤต (ค่าเริ่มต้น: true )
fonts บูลีน ชวเลขสำหรับการตั้งค่า inlineFonts + preloadFonts * ค่า:
true กับกฎฟอนต์หน้าอักษรวิกฤตแบบอินไลน์และโหลดฟอนต์ล่วงหน้า
false ที่จะไม่อินไลน์กฎแบบฟอนต์แบบฟอนต์และอย่าโหลดฟอนต์ล่วงหน้า
keyframes String ควบคุมกฎ KeyFrames ใดที่ Inlined* ค่า:
"critical" : (เริ่มต้น) กฎอินไลน์คีย์เฟรมที่ใช้โดย CSS ที่สำคัญ
"all" อินไลน์กฎ KeyFrames ทั้งหมด
"none" ลบกฎ KeyFrames ทั้งหมด
compress บูลี นบีบอัดทำให้เกิด CSS ที่สำคัญ (ค่าเริ่มต้น: true )
logLevel String ควบคุมระดับบันทึกของปลั๊กอิน (ค่าเริ่มต้น: "info" )
วัตถุ logger ให้ตัวบันทึกอินเตอร์เฟส Logger ที่กำหนดเอง
includeSelectors Electors regexp | สตริง ให้รายการตัวเลือกที่ควรรวมอยู่ใน CSS ที่สำคัญ ยอมรับทั้ง Regexp และ String
เราสามารถรวมหรือยกเว้นกฎที่จะเป็นส่วนหนึ่งของ CSS ที่สำคัญโดยการเพิ่มความคิดเห็นใน CSS
ความคิดเห็นบรรทัดเดียวที่จะรวม/ยกเว้นกฎ CSS ถัดไป
/ * critters: ยกเว้น */. selector1 {/ * กฎนี้จะถูกแยกออกจาก CSS ที่สำคัญ */}
.Selector2 {/ * สิ่งนี้จะได้รับการประเมินตามปกติ */}/ * critters: รวม */. selector3 {/ * กฎนี้จะรวมอยู่ใน CSS ที่สำคัญ */}
.Selector4 { / * สิ่งนี้จะได้รับการประเมินตามปกติ * /}รวมถึง/ยกเว้นกฎหลายข้อโดยการเพิ่มเครื่องหมายเริ่มต้นและจุดสิ้นสุด
/ * critters: แยกเริ่ม */. selector1 {/ * กฎนี้จะถูกแยกออกจาก CSS ที่สำคัญ */}
.Selector2 {/ * กฎนี้จะถูกแยกออกจาก CSS ที่สำคัญ */}/ * critters: ยกเว้น End */ / * critters: รวม start */. selector3 {/ * กฎนี้จะรวมอยู่ใน CSS ที่สำคัญ */}
.Selector4 {/ * กฎนี้จะรวมอยู่ใน CSS */}/ * Critters: รวมถึง End */โดยค่าเริ่มต้น critters ประเมิน CSS กับอินพุตทั้งหมด HTML Critters ประเมิน CSS ที่สำคัญโดยการสร้าง DOM ทั้งหมดใหม่และประเมินตัวเลือก CSS เพื่อค้นหาโหนดที่ตรงกัน โดยปกติแล้วสิ่งนี้จะใช้งานได้ดีเนื่องจาก critters มีน้ำหนักเบาและรวดเร็ว
สำหรับบางกรณีอินพุต HTML อาจมีขนาดใหญ่หรือซ้อนกันอย่างลึกล้ำซึ่งทำให้ DOM ที่สร้างขึ้นใหม่นั้นมีขนาดใหญ่ขึ้นมากซึ่งจะทำให้การสร้าง CSS ที่สำคัญช้าลง Critters ไม่ได้ตระหนักถึงขนาดของ Viewport และโหนดเฉพาะที่อยู่เหนือการพับเนื่องจากไม่มีเบราว์เซอร์ที่ไม่มีหัว
เพื่อเอาชนะปัญหานี้ได้ใช้ประโยชน์จาก ภาชนะบรรจุสัตว์เลื้อยคลาน
คอนเทนเนอร์ Critters เลียนแบบ Viewport และสามารถเปิดใช้งานได้โดยการเพิ่ม data-critters-container ลงในคอนเทนเนอร์ระดับบนสุดที่มีองค์ประกอบ HTML เหนือการพับ
คุณสามารถประเมินเนื้อหาของ Viewport ของคุณได้อย่างคร่าวๆและเพิ่ม <div data-critters-container > รอบเนื้อหา
<html> <body> <div class = "container"> <div data-critters-container>/ * html ภายในคอนเทนเนอร์นี้ใช้เพื่อประเมิน CSS ที่สำคัญ */</div>/ * HTML เมื่อประเมิน CSS */</</</</</</</</</</</ div> <footer> </footer> </body> </html>
หมายเหตุ: นี่เป็นวิธีที่ง่ายในการปรับปรุงประสิทธิภาพของสัตว์เลื้อยคลาน
อินเทอร์เฟซ Logger ที่กำหนดเอง:
ประเภท: วัตถุ
ฟังก์ชั่น trace (สตริง) พิมพ์ข้อความติดตาม
ฟังก์ชั่น debug (สตริง) พิมพ์ข้อความการดีบัก
ฟังก์ชัน info (สตริง) พิมพ์ข้อความข้อมูล
ฟังก์ชัน warn (สตริง) พิมพ์ข้อความเตือน
ฟังก์ชัน error (สตริง) พิมพ์ข้อความแสดงข้อผิดพลาด
ควบคุมระดับบันทึกของปลั๊กอิน ระบุระดับที่คนบันทึกควรใช้ คนตัดไม้จะไม่สร้างเอาต์พุตสำหรับระดับบันทึกใด ๆ ภายใต้ระดับที่ระบุ ระดับและคำสั่งที่มีอยู่คือ:
"ข้อมูล" (ค่าเริ่มต้น)
"เตือน"
"ข้อผิดพลาด"
"ติดตาม"
"ดีบัก"
"เงียบ"
ประเภท: ( "info" | "warn" | "error" | "trace" | "debug" | "silent" )
กลไกในการใช้สำหรับสไตล์ชีทที่ขี้เกียจ
หมายเหตุ: JS หมายถึงกลยุทธ์ที่ต้องใช้ JavaScript (กลับไปที่ <noscript> เว้นแต่จะปิดใช้งาน)
ค่าเริ่มต้น: ย้ายลิงก์สไตล์ชีทไปยังส่วนท้ายของเอกสารและแทรกแท็กเมตาโหลดล่วงหน้าในสถานที่ของพวกเขา
"body": ย้ายลิงค์สไตล์ภายนอกทั้งหมดไปยังจุดสิ้นสุดของเอกสาร
"Media": Load Stylesheets แบบอะซิงโครนัสโดยการเพิ่ม media="not x" และลบออกเมื่อโหลด JS
"swap": แปลงลิงก์สไตล์ชีทเป็น preloads ที่แลกเปลี่ยนเป็น rel="stylesheet" เมื่อโหลด (รายละเอียด) JS
"swap-high": ใช้ <link rel="alternate stylesheet preload"> และ swap เป็น rel="stylesheet" เมื่อโหลด (รายละเอียด) JS
"JS": แทรกตัวโหลด CSS แบบอะซิงโครนัสคล้ายกับ loadCss และใช้เพื่อโหลดสไตล์ชีท JS
"JS-Lazy": เช่น "js" แต่สไตล์ชีทจะถูกปิดใช้งานจนกว่าจะโหลดเต็ม
FALSE: ปิดใช้งานการเพิ่มแท็กล่วงหน้า
ประเภท: (ค่าเริ่มต้น | "body" | "media" | "swap" | "swap-high" | "js" | "js-lazy" )
มีห้องสมุดอื่น ๆ อีกจำนวนหนึ่งที่สามารถอินไลน์ CS ที่สำคัญแต่ละแห่งมีวิธีการที่แตกต่างกันเล็กน้อย นี่คือตัวเลือกที่ยอดเยี่ยมบางประการ:
วิกฤต
เพิง
webpack-critical
webpack-plugin-critical
html-critical-webpack-plugin
ปฏิกิริยาตอบโต้
Apache 2.0
นี่ไม่ใช่ผลิตภัณฑ์ของ Google อย่างเป็นทางการ