คำถามติดแท็ก v8

V8 เป็นเอ็นจิ้น JavaScript โอเพ่นซอร์สของ Google

3
การค้นหาแหล่งที่มาของการปฏิเสธสัญญาที่ไม่สามารถจัดการได้: TypeError: ตรวจพบวงจรการผูกมัดสำหรับสัญญา
ฉันพยายามค้นหาแหล่งที่มาของการปฏิเสธที่ไม่มีการจัดการจาก Promise ใน Node.js ฉันได้ลองอัพเกรดเป็น Node เวอร์ชัน 12 โดยใช้--async-stack-tracesตัวเลือกและฟังโดยใช้: process.on("unhandledRejection",( reason, promise ) => { console.log(reason); console.log(promise); }); แต่ฉันก็ยังไม่เห็นร่องรอยสแต็คที่เป็นประโยชน์ใด ๆ ที่จะช่วยฉันหาผู้กระทำผิด! UnhandledPromiseRejectionWarning: TypeError: Chaining cycle detected for promise #<Promise> at process._tickCallback (internal/process/next_tick.js:68:7) (node:89675) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a …

3
ฉันสามารถปิดการปรับให้เหมาะสมได้หรือไม่ดังนั้นตัวแปรในขอบเขตจากการปิดจะไม่“ ปรับให้เหมาะสม”
ในฐานะที่เป็นผลพลอยได้จากการเพิ่มประสิทธิภาพรหัสที่ทำโดยเบราว์เซอร์ที่ทันสมัยในขณะที่การดีบักคุณไม่สามารถ "เห็น" ตัวแปรทั้งหมดที่ "จริง" อยู่ในขอบเขต นี้เป็นที่รู้จักกันดีและได้รับการแก้ไขในคำถามก่อนหน้านี้ที่นี่ใน SO คุณลักษณะนี้ในขณะที่การใช้งานในการผลิตเป็นสิ่งที่สร้างความรำคาญให้ฉันอย่างมากในระหว่างการพัฒนามันทำให้ฉันช้าลง (ซึ่งควรจะชัดเจน) ตอนนี้คำถามของฉันคือมีวิธีที่จะปิดพฤติกรรมนี้หรือไม่ ฉันสามารถแก้ไขไฟล์กำหนดค่าบางอย่างหรือมีปลั๊กอินของเบราว์เซอร์หรืออาจจะมี "รุ่นต่อสร้างพิเศษสำหรับนักพัฒนา" ของเบราว์เซอร์ที่สามารถใช้งานได้? ฉันชอบที่จะพิมพ์รหัสของฉันลงในคอนโซลทันทีที่ฉันเขียนรหัสใหม่ดังนั้นนี่เป็นการบักฉันจริงๆ อัปเดต / แก้ไข นี่คือทางออกบางส่วนให้เครดิตกับ Paul1365972 คุณต้องเริ่มเบราว์เซอร์ chrome จากบรรทัดคำสั่งด้วยตัวเลือกพิเศษเช่น: ปิด Chrome อย่างสมบูรณ์ เรียกใช้ Chrome จากคอนโซลด้วย"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax" สำหรับ Windows ระบบปฏิบัติการอื่นที่คล้ายคลึงกัน "%GetHeapUsage()"เปิดคอนโซลนักพัฒนาและดำเนินการ หากคุณเริ่มต้น Chrome อย่างถูกต้องด้วยตัวเลือกตัวเลขจะถูกบันทึกไว้ในคอนโซลมิฉะนั้นคุณจะได้รับข้อผิดพลาดทางไวยากรณ์ ด้วยการตั้งค่าสถานะบรรทัดคำสั่งนี้คุณสามารถ 'คุยกับเครื่องยนต์ V8' ด้วยคำสั่งที่ขึ้นต้นด้วย%ซึ่งเป็นข้อผิดพลาดทางไวยากรณ์ใน JavaScript ธรรมดา รายการคำสั่ง V8 พร้อมใช้งานชนิดนี้ถูกกำหนดในคำตอบของพอล มีอยู่%NeverOptimizeFunction()ในรายการนั่นซึ่งเป็นสิ่งที่ดูเหมือนว่าฉันจะต้องโทรและทำได้ น่าเสียดายที่ฟังก์ชั่นนั้นไม่ได้ทำตามที่ฉันหวังไว้ดังที่แสดงในสกรีนช็อตถัดไป ((( …

1
การเขียนโค้ด Javascript ที่มีประสิทธิภาพสูงโดยไม่ทำให้เสียเวลา
เมื่อเขียนโค้ดที่ไวต่อประสิทธิภาพใน Javascript ซึ่งทำงานในอาร์เรย์ตัวเลขขนาดใหญ่ (คิดว่าเป็นแพคเกจพีชคณิตเชิงเส้นการทำงานกับจำนวนเต็มหรือตัวเลขทศนิยม) หนึ่งต้องการให้ JIT ช่วยเท่าที่จะทำได้ ประมาณนี้หมายถึง: เราต้องการให้อาร์เรย์ของเราบรรจุ SMIs (จำนวนเต็มเล็กน้อย) หรือบรรจุคู่ขึ้นอยู่กับว่าเราทำการคำนวณจำนวนเต็มหรือทศนิยม เราต้องการที่จะส่งสิ่งประเภทเดียวกันไปยังฟังก์ชั่นเสมอเพื่อที่พวกเขาจะไม่ได้รับป้ายกำกับ "megamorphic" และ deoptimised ตัวอย่างเช่นเราต้องการที่จะโทรหาvec.add(x, y)ทั้งคู่xและyเป็นอาร์เรย์ SMI ที่บรรจุอยู่หรือทั้งสองอาร์เรย์ที่บรรจุแล้ว เราต้องการให้ฟังก์ชั่นอินไลน์มากที่สุด เมื่อมีหนึ่งเร่ร่อนอยู่นอกกรณีเหล่านี้จะมีการลดลงของประสิทธิภาพการทำงานอย่างกะทันหันและรุนแรง สิ่งนี้สามารถเกิดขึ้นได้ด้วยเหตุผลที่ไม่น่ากลัวหลายประการ: คุณอาจเปิด SMI myArray.map(x => -x)อาร์เรย์บรรจุลงในบรรจุอาร์เรย์คู่ผ่านการดำเนินการที่ดูเหมือนไม่มีอันตรายเช่นเทียบเท่า นี่เป็นกรณีที่แย่ที่สุด "ดีที่สุด" เนื่องจากอาร์เรย์ Double ที่บรรจุอยู่นั้นยังคงเร็วมาก คุณอาจจะกลายอาร์เรย์ที่บรรจุลงในกล่องอาร์เรย์ทั่วไปตัวอย่างเช่นโดยการทำแผนที่อาร์เรย์มากกว่าฟังก์ชั่นที่ (โดยไม่คาดคิด) กลับหรือnull undefinedกรณีที่ไม่ดีนี้ค่อนข้างง่ายที่จะหลีกเลี่ยง คุณอาจ deoptimise ฟังก์ชั่นทั้งหมดเช่นvec.add()โดยผ่านสิ่งต่าง ๆ มากเกินไปและเปลี่ยนเป็น megamorphic สิ่งนี้อาจเกิดขึ้นได้หากคุณต้องการทำ "การเขียนโปรแกรมทั่วไป" ซึ่งvec.add()จะใช้ทั้งในกรณีที่คุณไม่ได้ระมัดระวังเกี่ยวกับประเภท (ดังนั้นจึงเห็นหลายประเภทเข้ามา) และในกรณีที่คุณต้องการประสิทธิภาพสูงสุด (มันควรจะได้รับคู่ผสมชนิดบรรจุกล่องเท่านั้น) คำถามของฉันเป็นคำถามที่อ่อนกว่าเกี่ยวกับวิธีการเขียนโค้ด …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.