ในฐานะที่เป็นผลพลอยได้จากการเพิ่มประสิทธิภาพรหัสที่ทำโดยเบราว์เซอร์ที่ทันสมัยในขณะที่การดีบักคุณไม่สามารถ "เห็น" ตัวแปรทั้งหมดที่ "จริง" อยู่ในขอบเขต นี้เป็นที่รู้จักกันดีและได้รับการแก้ไขในคำถามก่อนหน้านี้ที่นี่ใน 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()
ในรายการนั่นซึ่งเป็นสิ่งที่ดูเหมือนว่าฉันจะต้องโทรและทำได้ น่าเสียดายที่ฟังก์ชั่นนั้นไม่ได้ทำตามที่ฉันหวังไว้ดังที่แสดงในสกรีนช็อตถัดไป
((( ลิงก์อื่นจากคำตอบของ Paul (โมดูลโหนด v8-natives)) ไม่มีความสำคัญกับเราที่นี่ในบริบทนี้สิ่งที่มันทำคือมันล้อมรอบหนึ่ง-liners รอบการเรียกฟังก์ชัน "%" เพื่อให้รหัสไม่ผิดพลาด เบราว์เซอร์ที่ไม่ใช่ v8)))
(((จำได้ว่าเป็นช่วงเวลาที่ใช้งานได้ดี (เมื่อการเพิ่มประสิทธิภาพนี้ยังไม่ได้คิดค้น / นำไปใช้) ฉันไม่รู้ว่านานมาแล้วสิบปี 15 ปีอะไรอย่างนั้น Chrome รุ่นสุดท้ายคืออะไร (ถ้า ใด ๆ ) และรุ่น firefox ล่าสุดคืออะไร (แน่นอนว่ามีอยู่) ที่คุณสามารถทำได้มันจะไม่ทำให้คุณได้รับความโปรดปราน แต่มันจะทำให้คุณได้คะแนนสูงถ้าคุณรู้และโพสต์มันเป็นคำตอบ .)))
การแก้ไขปัญหา
ขอบคุณ PETR SRNICEK
คำถามใหม่
ในขณะที่วิธีการแก้ปัญหาของ Petr ช่วยได้มาก แต่ก็ไม่สมบูรณ์แบบ คำถามนี้ยาวเกินไปดังนั้นฉันโพสต์คำถามใหม่เกี่ยวกับวิธีการปรับปรุงแก้ไขปัญหาของ Petr (แน่นอนฉันสามารถแก้ไขคำถามนี้ได้ที่นี่ แต่นั่นจะรู้สึก "ไม่เป็นประวัติศาสตร์" ถ้าคุณรู้ว่าฉันหมายถึงอะไร)
v8-natives
ห้องสมุดเพียง wraps ที่สำคัญ% โทรในรหัสในห้องสมุดง่ายๆที่ควรจะเป็นnoops
ในเบราว์เซอร์หรือโหนดซึ่งไม่ได้เริ่มต้นในพิเศษธง --allow-พื้นเมืองไวยากรณ์ ..
%NeverOptimizeFunction(foo)
ฉันเพิ่งจะเรียกมันว่าเพื่อร่างกายโหลด "เพียงเพราะ" การคิด "ดีมันจะไม่เจ็บ" ปัญหาคือfoo
ไม่ได้เพิ่มประสิทธิภาพในแบบที่ฉันหวังไว้ ตัวแปรlorem
มองไม่เห็น สมมติว่าฉันต้องการเขียนโค้ดบางอย่างที่จะเข้าไปในฟังก์ชั่น foo แทนที่จะพิมพ์ลงในโปรแกรมแก้ไขข้อความของฉันฉันพิมพ์ลงในคอนโซล dev (ในขณะที่ดีบักเกอร์นั่งอยู่ที่ foo) ดูว่ามันเป็นสิ่งที่ฉันต้องการหรือไม่แล้วคัดลอก / วางจากคอนโซลไปยังโปรแกรมแก้ไขข้อความของฉัน นั่นคือวิธีที่ฉันชอบทำงาน และไม่สามารถ เพราะการปรับให้เหมาะสม รับมัน
--js-flags
(รวมถึงหลาย ๆอันที่เกี่ยวข้องกับTurboFan ) เช่นเดียวกับคำสั่ง V8 หลายภาษาก่อนที่ Paul1365972 โพสต์คำตอบของเขา แต่ฉันไม่สามารถบรรลุพฤติกรรมที่ต้องการได้ ฉันเชื่อว่าวิธีนี้อาจเป็นจุดจบ การเพิ่ม[v8]
แท็กให้กับคำถามนี้อาจคุ้มค่า บางคนที่มีความเข้าใจอย่างลึกซึ้งเกี่ยวกับการทำงานภายในของ V8 อาจสามารถชี้แจงได้ว่านี่เป็นวิธีที่จะไปหรืออาจชี้คุณไปในทิศทางที่ถูกต้อง