คุณสังเกตเห็นว่าพร็อพเพอร์ตี้ CSS ในแท็บสไตล์ของเครื่องมือสําหรับนักพัฒนาเว็บใน Chrome ดูดีขึ้นไหม การอัปเดตเหล่านี้ซึ่งเปิดตัวระหว่าง Chrome 121 ถึง 128 เป็นผลมาจากการปรับปรุงที่สำคัญในวิธีที่เราแยกวิเคราะห์และแสดงค่า CSS ในบทความนี้ เราจะอธิบายรายละเอียดทางเทคนิคของการเปลี่ยนรูปแบบนี้ โดยเปลี่ยนจากระบบจับคู่นิพจน์ทั่วไปไปเป็นโปรแกรมแยกวิเคราะห์ที่มีประสิทธิภาพมากขึ้น
เรามาเปรียบเทียบ DevTools เวอร์ชันปัจจุบันกับเวอร์ชันก่อนหน้ากัน
ความแตกต่างนี้ชัดเจนเลยใช่ไหม รายละเอียดของการปรับปรุงที่สำคัญมีดังนี้
color-mix
ตัวอย่างที่เป็นประโยชน์ซึ่งแสดงอาร์กิวเมนต์สี 2 สีภายในฟังก์ชันcolor-mix
pink
ตัวอย่างสีที่คลิกได้สำหรับสีที่มีชื่อpink
คลิกเพื่อเปิดเครื่องมือเลือกสีเพื่อให้ปรับสีได้ง่ายvar(--undefined, [fallback value])
. ปรับปรุงการจัดการตัวแปรที่ไม่ระบุ โดยตัวแปรที่ไม่ระบุจะเป็นสีเทาและค่าสำรองที่ใช้งานอยู่ (ในกรณีนี้คือสี HSL) จะแสดงพร้อมตัวอย่างสีที่คลิกได้hsl(…)
: ตัวอย่างสีที่คลิกได้อีกรายการสำหรับฟังก์ชันสีhsl
ซึ่งช่วยให้เข้าถึงเครื่องมือเลือกสีได้อย่างรวดเร็ว177deg
: นาฬิกามุมที่คลิกได้ ซึ่งช่วยให้คุณลากและแก้ไขค่ามุมแบบอินเทอร์แอกทีฟได้var(--saturation, …)
: ลิงก์ที่คลิกได้ไปยังคำจำกัดความของพร็อพเพอร์ตี้ที่กำหนดเอง ซึ่งช่วยให้ไปยังประกาศที่เกี่ยวข้องได้ง่ายๆ
ความแตกต่างนั้นชัดเจนมาก ด้วยเหตุนี้ เราจึงต้องสอนเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ให้เข้าใจค่าพร็อพเพอร์ตี้ CSS ได้ดีกว่าเดิมมาก
ตัวอย่างเพลงเหล่านี้มีให้ฟังแล้วไม่ใช่หรือ
แม้ว่าไอคอนแสดงตัวอย่างเหล่านี้อาจดูคุ้นเคย แต่ก็ไม่ได้แสดงอย่างสม่ำเสมอเสมอไป โดยเฉพาะในไวยากรณ์ CSS ที่ซับซ้อน เช่น ตัวอย่างด้านบน แม้ในกรณีที่ใช้งานได้ ก็มักจะต้องใช้ความพยายามอย่างมากเพื่อให้ทำงานได้อย่างถูกต้อง
สาเหตุคือระบบสําหรับวิเคราะห์ค่าเติบโตขึ้นอย่างเป็นธรรมชาตินับตั้งแต่ช่วงแรกๆ ของ DevTools อย่างไรก็ตาม ภาษาดังกล่าวไม่สามารถพัฒนาตามฟีเจอร์ใหม่ๆ ที่น่าทึ่งล่าสุดที่เราได้รับจาก CSS และภาษาก็มีความซับซ้อนมากขึ้นตามไปด้วย ระบบจำเป็นต้องมีการออกแบบใหม่อย่างเต็มรูปแบบเพื่อให้ก้าวทันวิวัฒนาการ และนั่นคือสิ่งที่เราทำ!
วิธีประมวลผลค่าพร็อพเพอร์ตี้ CSS
ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ กระบวนการแสดงผลและการตกแต่งการประกาศพร็อพเพอร์ตี้ในแท็บสไตล์จะแบ่งออกเป็น 2 ระยะ ได้แก่
- การวิเคราะห์โครงสร้าง ระยะแรกนี้จะแยกแยะการประกาศพร็อพเพอร์ตี้เพื่อระบุคอมโพเนนต์พื้นฐานและความสัมพันธ์ของคอมโพเนนต์ เช่น ในการประกาศ
border: 1px solid red
ระบบจะจดจำ1px
เป็นความยาวsolid
เป็นสตริง และred
เป็นสี - การแสดงภาพ ขั้นตอนการแสดงผลจะเปลี่ยนคอมโพเนนต์เหล่านี้เป็นการนำเสนอ HTML โดยอิงตามการวิเคราะห์โครงสร้าง ซึ่งจะช่วยเพิ่มความน่าสนใจให้กับข้อความพร็อพเพอร์ตี้ที่แสดงด้วยองค์ประกอบแบบอินเทอร์แอกทีฟและรูปภาพ เช่น ค่าสี
red
จะแสดงผลด้วยไอคอนสีที่คลิกได้ ซึ่งเมื่อคลิกแล้ว ระบบจะแสดงเครื่องมือเลือกสีเพื่อให้แก้ไขได้ง่าย
นิพจน์ทั่วไป
ก่อนหน้านี้เราใช้นิพจน์ทั่วไป (นิพจน์ทั่วไป) เพื่อแยกวิเคราะห์ค่าพร็อพเพอร์ตี้สําหรับการวิเคราะห์โครงสร้าง เราดูแลรักษารายการนิพจน์ทั่วไปเพื่อจับคู่กับข้อมูลบางส่วนของค่าพร็อพเพอร์ตี้ที่เราพิจารณาว่าควรตกแต่ง ตัวอย่างเช่น มีนิพจน์ที่ตรงกับสี ความยาว มุม นิพจน์ย่อยที่ซับซ้อนขึ้นของ CSS เช่น การเรียกฟังก์ชัน var
ฯลฯ เราสแกนข้อความจากซ้ายไปขวาเพื่อทำการวิเคราะห์ค่า โดยมองหานิพจน์แรกจากรายการที่ตรงกับข้อความส่วนถัดไปอย่างต่อเนื่อง
แม้ว่าส่วนใหญ่แล้ว วิธีนี้จะทำงานได้ดี แต่จำนวนกรณีก็ยังคงไม่เพิ่มขึ้นอย่างต่อเนื่อง ในช่วงหลายปีที่ผ่านมา เราได้รับรายงานข้อบกพร่องจำนวนมากที่การจับคู่ไม่ถูกต้อง ขณะที่เราแก้ไขปัญหาเหล่านี้ (การแก้ไขบางอย่างนั้นง่าย แต่บางอย่างก็ซับซ้อน) เราจำเป็นต้องพิจารณาแนวทางใหม่เพื่อควบคุมหนี้ทางเทคนิค เรามาดูปัญหาบางส่วนกัน
color-mix()
ที่ตรงกัน
นิพจน์ทั่วไปที่เราใช้สำหรับฟังก์ชัน color-mix()
คือ
/color-mix\(.*,\s*(?<firstColor>.+)\s*,\s*(?<secondColor>.+)\s*\)/g
ซึ่งตรงกับไวยากรณ์
color-mix(<color-interpolation-method>, [<color> && <percentage [0,100]>?]#{2})
ลองเรียกใช้ตัวอย่างต่อไปนี้เพื่อแสดงภาพรายการที่ตรงกัน
const re = /color-mix\(.*,\s*(?<firstColor>.+)\s*,\s*(?<secondColor>.+)\s*\)/g;
// it works - simpler example
const simpler = re.exec('color-mix(in srgb, pink, hsl(127deg 100% 50%))');
console.table(simpler.groups);
re.exec('');
// it doesn't work - complex example
const complex = re.exec('color-mix(in srgb, pink, var(--undefined, hsl(127deg var(--saturation, 100%) 50%)))');
console.table(complex.groups);
ตัวอย่างที่เข้าใจง่ายกว่าจะทำงานได้ดีอยู่แล้ว อย่างไรก็ตาม ในตัวอย่างที่ซับซ้อนมากขึ้น การจับคู่ <firstColor>
คือ hsl(177deg var(--saturation
และการจับคู่ <secondColor>
คือ 100%) 50%))
ซึ่งไม่มีความหมายใดๆ ทั้งสิ้น
เราทราบดีว่านี่เป็นสิ่งที่ทำให้เกิดปัญหา ท้ายที่สุดแล้ว CSS เป็นภาษาที่เป็นทางการซึ่งไม่ปกติ เราจึงรวมการจัดการพิเศษไว้เพื่อจัดการกับอาร์กิวเมนต์ของฟังก์ชันที่ซับซ้อนมากขึ้น เช่น ฟังก์ชัน var
อย่างไรก็ตาม ดังที่คุณเห็นในภาพหน้าจอแรก การดำเนินการดังกล่าวยังคงใช้ไม่ได้กับบางกรณี
การจับคู่ tan()
ข้อบกพร่องที่รายงานมาซึ่งตลกที่สุดอย่างหนึ่งคือเกี่ยวกับฟังก์ชันตรีโกณมิติ tan()
นิพจน์ทั่วไปที่เราใช้ในการจับคู่สีมีนิพจน์ย่อย \b[a-zA-Z]+\b(?!-)
สำหรับสีที่มีชื่อที่ตรงกัน เช่น คีย์เวิร์ด red
จากนั้นเราตรวจสอบว่าส่วนที่ตรงกันนั้นเป็นสีที่มีชื่อจริงไหม และผลลัพธ์คือ tan
เป็นสีที่มีชื่อด้วย เราจึงตีความนิพจน์ tan()
เป็นสีอย่างไม่ถูกต้อง
การจับคู่ var()
มาดูตัวอย่างอื่นกัน var()
ฟังก์ชันที่มีค่าสำรองซึ่งมีข้อมูลอ้างอิง var()
อื่นๆ var(--non-existent, var(--margin-vertical))
นิพจน์ทั่วไปสำหรับ var()
จะจับคู่กับค่านี้ได้ แต่จะหยุดการจับคู่ที่วงเล็บปิดตัวแรก ดังนั้น ข้อความข้างต้นจึงจับคู่เป็น var(--non-existent, var(--margin-vertical)
นี่เป็นข้อจํากัดตามตำราของการจับคู่นิพจน์ทั่วไป ภาษาที่ต้องใช้วงเล็บคู่ที่ตรงกันนั้นไม่ใช่ภาษาแบบทั่วไป
การเปลี่ยนไปใช้โปรแกรมแยกวิเคราะห์ CSS
เมื่อการวิเคราะห์ข้อความโดยใช้นิพจน์ทั่วไปหยุดทํางาน (เนื่องจากภาษาที่วิเคราะห์ไม่ใช่ภาษาทั่วไป) ขั้นตอนถัดไปคือการใช้โปรแกรมแยกวิเคราะห์สําหรับไวยากรณ์ประเภทที่สูงขึ้น สําหรับ CSS ขั้นตอนนี้หมายถึงการใช้โปรแกรมแยกวิเคราะห์สําหรับภาษาที่ไม่มีบริบท อันที่จริงแล้ว ระบบแยกวิเคราะห์ดังกล่าวมีอยู่ในโค้ดเบสของ DevTools อยู่แล้ว นั่นคือ Lezer ของ CodeMirror ซึ่งเป็นรากฐานของฟีเจอร์ต่างๆ เช่น การไฮไลต์ไวยากรณ์ใน CodeMirror ซึ่งเป็นเครื่องมือแก้ไขที่คุณเห็นในแผงแหล่งที่มา โปรแกรมแยกวิเคราะห์ CSS ของ Lezer ช่วยให้เราสร้างต้นไม้ไวยากรณ์ (ไม่ใช่นามธรรม) สำหรับกฎ CSS และพร้อมให้เราใช้งาน ชัยชนะ
ยกเว้นในกรณีที่ใช้งานทันที เราพบว่าการย้ายข้อมูลจากการจับคู่ตามนิพจน์ทั่วไปเป็นการจับคู่ตามโปรแกรมแยกวิเคราะห์โดยตรงนั้นไม่สามารถทำได้ เนื่องจาก 2 แนวทางนี้ทำงานจากทิศทางที่ตรงข้ามกัน เมื่อจับคู่ส่วนของค่ากับนิพจน์ทั่วไป DevTools จะสแกนอินพุตจากซ้ายไปขวา โดยพยายามค้นหารายการที่ตรงกันตั้งแต่เนิ่นๆ จากรายการรูปแบบที่จัดเรียง ด้วยโครงสร้างไวยากรณ์ การจับคู่จะเริ่มต้นจากด้านล่างขึ้นบน เช่น การวิเคราะห์อาร์กิวเมนต์ของการเรียกก่อน ก่อนที่จะพยายามจับคู่การเรียกฟังก์ชัน ลองนึกถึงการประเมินนิพจน์ทางคณิตศาสตร์ ซึ่งคุณจะต้องพิจารณานิพจน์ที่มีวงเล็บก่อน จากนั้นจึงพิจารณาตัวดำเนินการคูณ แล้วจึงพิจารณาตัวดำเนินการบวก ในการจัดเฟรมนี้ การจับคู่ตามนิพจน์ทั่วไปจะสอดคล้องกับการประเมินนิพจน์ทางคณิตศาสตร์จากซ้ายไปขวา เราไม่อยากเขียนระบบการจับคู่ทั้งหมดขึ้นใหม่ตั้งแต่ต้น เนื่องจากมีคู่โปรแกรมจับคู่และโปรแกรมแสดงผลที่แตกต่างกัน 15 คู่ โดยมีโค้ดหลายพันบรรทัด ซึ่งทำให้เราไม่สามารถเปิดตัวได้ในเหตุการณ์สำคัญเดียว
เราจึงหาวิธีแก้ปัญหาที่ทำให้เราทําการเปลี่ยนแปลงเพิ่มเติมได้ ซึ่งจะอธิบายไว้อย่างละเอียดด้านล่าง กล่าวโดยสรุปคือ เราใช้วิธีแบบ 2 เฟส แต่ในระยะแรกเราจะพยายามจับคู่นิพจน์ย่อยจากด้านล่างขึ้นบน (จึงเสียหายตามการไหลเวียนของนิพจน์ทั่วไป) และในระยะที่ 2 เราจะแสดงผลจากด้านบน ในทุกๆ ระยะ เราสามารถใช้ตัวจับคู่และการแสดงผลตามนิพจน์ทั่วไปที่มีอยู่ได้โดยไม่ต้องเปลี่ยนแปลงอะไรมากนัก จึงย้ายข้อมูลทีละรายการได้
ระยะที่ 1: การจับคู่จากล่างขึ้นบน
ระยะแรกจะทําตามสิ่งที่ระบุไว้บนหน้าปกอย่างตรงไปตรงมา เราจะท่องไปในต้นไม้ตามลําดับจากล่างขึ้นบน และพยายามจับคู่นิพจน์ย่อยที่โหนดต้นไม้ไวยากรณ์แต่ละโหนดที่เราเข้าชม หากต้องการจับคู่นิพจน์ย่อยที่เฉพาะเจาะจง ตัวจับคู่อาจใช้นิพจน์ทั่วไปได้เช่นเดียวกับในระบบที่มีอยู่ ในเวอร์ชัน 128 เรายังคงดำเนินการในบางกรณี เช่น ความยาวที่ตรงกัน หรือเครื่องมือจับคู่สามารถวิเคราะห์โครงสร้างของโครงสร้างย่อยที่รูทที่โหนดปัจจุบัน ซึ่งช่วยให้สามารถตรวจจับข้อผิดพลาดด้านไวยากรณ์และบันทึกข้อมูลโครงสร้างได้ในเวลาเดียวกัน
ลองดูตัวอย่างต้นไม้ไวยากรณ์จากด้านบน
สำหรับต้นไม้นี้ ตัวจับคู่จะใช้ตามลําดับต่อไปนี้
hsl(
177deg
var(--saturation, 100%) 50%)
: ก่อนอื่น เราค้นพบอาร์กิวเมนต์แรกของการเรียกฟังก์ชันhsl
ซึ่งก็คือมุมโทนสี เราจับคู่กับตัวจับคู่มุมเพื่อให้ตกแต่งค่ามุมด้วยไอคอนมุมได้hsl(177deg
var(--saturation, 100%)
50%)
: ประการที่ 2 เราพบการเรียกฟังก์ชันvar
ที่มีตัวจับคู่ var ในการโทรดังกล่าว เราต้องการดำเนินการ 2 อย่างหลักๆ ดังนี้- ค้นหาการประกาศของตัวแปรและคำนวณค่าของตัวแปร จากนั้นเพิ่มลิงก์และป๊อปอัปลงในชื่อตัวแปรเพื่อเชื่อมต่อกับตัวแปรดังกล่าวตามลำดับ
- ตกแต่งการเรียกใช้ด้วยไอคอนสีหากค่าที่คำนวณได้คือสี อันที่จริงแล้วมีวิธีที่ 3 แต่เราจะพูดถึงเรื่องนี้ในภายหลัง
hsl(177deg var(--saturation, 100%) 50%)
: สุดท้าย เราจะจับคู่นิพจน์การเรียกใช้สำหรับฟังก์ชันhsl
เพื่อตกแต่งด้วยไอคอนสี
นอกจากการค้นหานิพจน์ย่อยที่ต้องการตกแต่งแล้ว เรายังมีฟีเจอร์ที่ 2 ที่ใช้เป็นส่วนหนึ่งของกระบวนการจับคู่ด้วย โปรดทราบว่าในขั้นตอนที่ 2 เราได้บอกว่าเราจะค้นหาค่าที่คำนวณแล้วสำหรับชื่อตัวแปร อันที่จริง เราก้าวไปอีกขั้นและกระจายผลลัพธ์ไปยังต้นไม้ ไม่ใช่แค่ตัวแปร แต่รวมถึงค่าสำรองด้วย รับประกันได้ว่าเมื่อเข้าชมโหนดฟังก์ชัน var
จะมีการเข้าชมโหนดย่อยของโหนดดังกล่าวก่อน เราจึงรู้ผลลัพธ์ของฟังก์ชัน var
ที่อาจปรากฏในค่าสำรอง เราจึงสามารถแทนที่ฟังก์ชัน var
ด้วยผลลัพธ์ได้ทันทีได้อย่างง่ายดายและมีค่าใช้จ่ายเพียงเล็กน้อย ทำให้เราตอบคําถามเล็กๆ น้อยๆ ได้ เช่น "ผลลัพธ์ของ var
นี้ทำให้เกิดสี" อย่างที่ทำในขั้นตอนที่ 2 ไหม
ระยะที่ 2: การแสดงผลจากด้านบน
สำหรับระยะที่ 2 เราจะกลับทิศทาง นำผลการจับคู่จากเฟส 1 มาแสดงผลต้นไม้เป็น HTML โดยข้ามผ่านตามลำดับจากบนลงล่าง สำหรับแต่ละโหนดที่เข้าชม เราจะตรวจสอบว่าโหนดนั้นตรงกันหรือไม่ และหากใช่ ให้เรียกใช้โหมดแสดงภาพที่ตรงกันของตัวจับคู่ เราหลีกเลี่ยงความจำเป็นในการจัดการโหนดที่มีเพียงข้อความ (เช่น NumberLiteral
"50%") โดยรวมตัวจับคู่และโหมดแสดงภาพเริ่มต้นสำหรับโหนดข้อความ โปรแกรมแสดงผลจะแสดงผลโหนด HTML ซึ่งเมื่อนำมารวมกันจะสร้างการแสดงค่าพร็อพเพอร์ตี้ รวมถึงการตกแต่ง
สำหรับตัวอย่างต้นไม้ ลำดับในการแสดงค่าพร็อพเพอร์ตี้มีดังนี้
- ไปที่การเรียกใช้ฟังก์ชัน
hsl
ตรงกัน จึงเรียกใช้โปรแกรมแสดงผลฟังก์ชันสี ซึ่งจะทํา 2 สิ่งต่อไปนี้- คำนวณค่าสีจริงโดยใช้กลไกการแทนที่ทันทีสำหรับอาร์กิวเมนต์
var
แล้ววาดไอคอนสี - แสดงผลรายการย่อยของ
CallExpression
แบบซ้ำ วิธีนี้จะดูแลการแสดงภาพชื่อฟังก์ชัน วงเล็บ และคอมมา ซึ่งเป็นแค่ข้อความเท่านั้น
- คำนวณค่าสีจริงโดยใช้กลไกการแทนที่ทันทีสำหรับอาร์กิวเมนต์
- ไปที่อาร์กิวเมนต์แรกของการเรียก
hsl
เนื่องจากตรงกัน ดังนั้นให้เรียกโหมดแสดงภาพมุม ซึ่งจะวาดไอคอนมุมและข้อความของมุม - ไปที่อาร์กิวเมนต์ที่ 2 ซึ่งเป็นการเรียก
var
ตรงกัน จึงเรียก var renderer ซึ่งแสดงผลลัพธ์ต่อไปนี้- ข้อความ
var(
ที่จุดเริ่มต้น - ชื่อตัวแปรและตกแต่งด้วยลิงก์ไปยังคำจำกัดความของตัวแปรหรือด้วยสีข้อความสีเทาเพื่อระบุว่าไม่ได้กำหนดค่าไว้ นอกจากนี้ยังเพิ่มป๊อปอัปลงในตัวแปรเพื่อแสดงข้อมูลเกี่ยวกับค่าของตัวแปรด้วย
- เครื่องหมายคอมมาจะแสดงผลค่าสำรองแบบซ้ำ
- วงเล็บปิด
- ข้อความ
- ไปที่อาร์กิวเมนต์สุดท้ายของการเรียกใช้
hsl
ไม่ตรงกัน จึงแสดงเฉพาะเนื้อหาข้อความ
คุณสังเกตไหมว่าในอัลกอริทึมนี้ การแสดงผลจะควบคุมวิธีแสดงผลของโหนดย่อยของโหนดที่ตรงกันโดยสมบูรณ์ การแสดงผลรายการย่อยแบบซ้ำเป็นการดำเนินการเชิงรุก เคล็ดลับนี้ทำให้สามารถย้ายข้อมูลแบบเป็นขั้นตอนจากการแสดงผลตามนิพจน์ทั่วไปไปยังการแสดงผลตามไวยากรณ์ต้นไม้ สำหรับโหนดที่ตรงกับการจับคู่นิพจน์ทั่วไปเดิม คุณจะใช้โปรแกรมแสดงผลที่เกี่ยวข้องในรูปแบบเดิมได้ ในเชิงต้นไม้ไวยากรณ์ การดำเนินการนี้จะรับผิดชอบในการแสดงผลทั้งซับต้นไม้ และผลลัพธ์ (โหนด HTML) สามารถเสียบเข้ากับกระบวนการแสดงผลรอบๆ ได้อย่างราบรื่น ซึ่งทำให้เรามีตัวเลือกในการพอร์ตโปรแกรมจับคู่และโปรแกรมแสดงผลเป็นคู่ๆ และเปลี่ยนทีละรายการ
ฟีเจอร์ที่ยอดเยี่ยมอีกอย่างหนึ่งของโหมดแสดงภาพที่ควบคุมการแสดงผลของโหนดย่อยของโหนดที่ตรงกันคือ โหมดนี้ช่วยให้เราสามารถให้เหตุผลเกี่ยวกับทรัพยากร Dependency ระหว่างไอคอนที่เรากำลังเพิ่มได้ ในตัวอย่างข้างต้น สีที่ฟังก์ชัน hsl
สร้างจะขึ้นอยู่กับค่าโทนสีของผลิตภัณฑ์อย่างชัดเจน ซึ่งหมายความว่าสีที่แสดงโดยไอคอนสีจะขึ้นอยู่กับมุมที่แสดงโดยไอคอนมุม หากผู้ใช้เปิดเครื่องมือแก้ไขมุมผ่านไอคอนดังกล่าวและแก้ไขมุม ตอนนี้เราสามารถอัปเดตสีของไอคอนสีแบบเรียลไทม์ได้แล้ว
ดังที่คุณเห็นในตัวอย่างด้านบน เราใช้กลไกนี้กับการจับคู่ไอคอนอื่นๆ ด้วย เช่น สำหรับ color-mix()
และช่องสี 2 ช่อง หรือฟังก์ชัน var
ที่แสดงผลสีจากค่าสำรอง
ผลกระทบต่อประสิทธิภาพ
เมื่อเจาะลึกปัญหานี้เพื่อปรับปรุงความเสถียรและแก้ไขปัญหาที่แก้ไม่ตกมานาน เราคาดหวังว่าประสิทธิภาพจะลดลงบ้างเนื่องจากเราเริ่มเรียกใช้โปรแกรมแยกวิเคราะห์ที่สมบูรณ์แล้ว ในการทดสอบนี้ เราได้สร้างการเปรียบเทียบที่แสดงผลประกาศพร็อพเพอร์ตี้ประมาณ 3, 500 รายการ และสร้างโปรไฟล์ทั้งเวอร์ชันที่อิงตามนิพจน์ทั่วไปและเวอร์ชันที่อิงตามโปรแกรมแยกวิเคราะห์ด้วยการจำกัดความเร็ว 6 เท่าในเครื่อง M1
ตามที่คาดไว้ วิธีการที่อิงตามการแยกวิเคราะห์นั้นช้ากว่าวิธีการที่อิงตามนิพจน์ทั่วไป 27% สำหรับกรณีนั้น วิธีการที่อิงตามนิพจน์ทั่วไปใช้เวลา 11 วินาทีในการแสดงผล และวิธีการที่อิงตามโปรแกรมแยกวิเคราะห์ใช้เวลา 15 วินาทีในการแสดงผล
เมื่อพิจารณาถึงความสําเร็จที่เราได้รับจากแนวทางใหม่นี้ แล้วเราก็ตัดสินใจที่จะเดินหน้าต่อไป
กิตติกรรมประกาศ
ขอแสดงความขอบคุณอย่างสุดซึ้งต่อ Sofia Emelianova และ Jecelyn Yeen ที่ให้ความช่วยเหลืออันมีค่ายิ่งสำหรับการแก้ไขโพสต์นี้
ดาวน์โหลดเวอร์ชันตัวอย่าง
ลองใช้ Chrome Canary, Dev หรือ เบต้า เป็นเบราว์เซอร์สำหรับนักพัฒนาซอฟต์แวร์เริ่มต้น ช่องทางเวอร์ชันตัวอย่างเหล่านี้จะช่วยให้คุณเข้าถึงฟีเจอร์ล่าสุดของ DevTools, ทดสอบ API ของแพลตฟอร์มเว็บที่ล้ำสมัย และช่วยคุณค้นหาปัญหาในเว็บไซต์ได้ก่อนที่ผู้ใช้จะพบ
ติดต่อทีมเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome
ใช้ตัวเลือกต่อไปนี้เพื่อพูดคุยเกี่ยวกับฟีเจอร์ใหม่ การอัปเดต หรือสิ่งอื่นๆ ที่เกี่ยวข้องกับเครื่องมือสำหรับนักพัฒนาเว็บ
- ส่งความคิดเห็นและคำขอฟีเจอร์ถึงเราได้ที่ crbug.com
- รายงานปัญหาเกี่ยวกับเครื่องมือสำหรับนักพัฒนาเว็บโดยใช้ ตัวเลือกเพิ่มเติม > ความช่วยเหลือ > รายงานปัญหาเกี่ยวกับเครื่องมือสำหรับนักพัฒนาเว็บในเครื่องมือสำหรับนักพัฒนาเว็บ
- ทวีตถึง @ChromeDevTools
- แสดงความคิดเห็นในมีอะไรใหม่ในวิดีโอ YouTube เกี่ยวกับเครื่องมือสำหรับนักพัฒนาเว็บ หรือวิดีโอ YouTube เคล็ดลับสำหรับเครื่องมือสำหรับนักพัฒนาเว็บ