Là sản phẩm phụ của tối ưu hóa mã được thực hiện bởi các trình duyệt hiện đại, trong khi gỡ lỗi, bạn không thể "nhìn thấy" tất cả các biến "thực tế" nằm trong phạm vi. Điều này là nổi tiếng và đã được giải quyết trong một câu hỏi trước đây ở đây trên SO . Tính năng này, trong khi chắc chắn hữu ích nhất trong sản xuất gây khó chịu cho tôi rất nhiều trong quá trình phát triển, nó làm tôi chậm lại (điều đó là hiển nhiên.)
Bây giờ câu hỏi của tôi là, có cách nào để tắt hành vi này? Tôi có thể chỉnh sửa một số tệp cấu hình hoặc có plugin trình duyệt hoặc có thể có "phiên bản xây dựng đặc biệt dành cho nhà phát triển" của trình duyệt thực thi không? Tôi thích nhập mã của mình vào bảng điều khiển ngay lập tức khi tôi viết mã mới, vì vậy điều này thực sự làm tôi khó chịu.
CẬP NHẬT / EDIT
Đây là một giải pháp một phần, tín dụng cho Paul1365972.
Bạn phải khởi động trình duyệt chrome từ dòng lệnh, với các tùy chọn đặc biệt, như vậy:
- Đóng Chrome hoàn toàn
- Chạy Chrome từ bảng điều khiển với
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
các hệ điều hành tương tự cho windows. - Mở bảng điều khiển dành cho nhà phát triển và thực thi
"%GetHeapUsage()"
. Nếu bạn khởi động Chrome đúng cách với tùy chọn, một số sẽ được ghi vào bảng điều khiển, nếu không bạn sẽ gặp lỗi cú pháp.
Với cờ dòng lệnh này, bạn có thể 'nói chuyện với động cơ V8' bằng các lệnh bắt đầu bằng %
, đó là các lỗi cú pháp trong JavaScript đơn giản. Một danh sách các lệnh V8 có sẵn thuộc loại này đã được đưa ra trong câu trả lời của Paul .
Có %NeverOptimizeFunction()
trong danh sách đó, đó là thứ trông giống như thứ tôi phải gọi và được thực hiện với nó. Thật không may, chức năng đó không làm được những gì tôi hy vọng, như thể hiện trong ảnh chụp màn hình tiếp theo.
((( Liên kết khác từ câu trả lời của Paul (mô-đun nút v8-nigen) không quan trọng đối với chúng tôi ở đây trong bối cảnh này. các trình duyệt không phải là v8.)))
(((Tôi nhớ một thời gian khi điều này hoạt động (khi tối ưu hóa này chưa được phát minh / triển khai). Tôi không biết cách đây bao lâu. Mười năm? 15 năm? Một cái gì đó giống như vậy. Phiên bản Chrome cuối cùng là gì (nếu bất kỳ) và phiên bản firefox cuối cùng là gì (chắc chắn hơn ở đây là nó tồn tại) nơi bạn có thể làm gì? Nó sẽ không mang lại cho bạn tiền thưởng, nhưng nó sẽ giúp bạn có được một upvote, nếu bạn tình cờ biết và đăng nó như một câu trả lời .)))
GIẢI PHÁP
CẢM ƠN BẠN
CÂU HỎI MỚI
Mặc dù giải pháp của Petr giúp ích rất nhiều, nhưng nó không hoàn hảo. Câu hỏi này đang trở nên quá dài, vì vậy tôi đã đăng một câu hỏi mới về cách cải thiện giải pháp của Petr. (Tất nhiên tôi có thể chỉnh sửa câu hỏi này ở đây, nhưng điều đó sẽ cảm thấy "phi lịch sử", nếu bạn hiểu ý tôi.)
v8-natives
thư viện chỉ kết thúc tốt đẹp% các cuộc gọi quan trọng trong mã trong một thư viện đơn giản mà nên noops
trong một trình duyệt hoặc nút mà đã không được bắt đầu vào cờ --allow-thổ-cú pháp đặc biệt ..
%NeverOptimizeFunction(foo)
tôi vừa gọi nó cho bodyOnload, "chỉ vì", nghĩ rằng "tốt, nó sẽ không bị tổn thương". Vấn đề là foo
KHÔNG được tối ưu hóa theo cách tôi đã hy vọng. Biến lorem
là vô hình. Hãy nói rằng tôi muốn viết một số mã sẽ đi vào chức năng foo. Thay vì nhập nó vào trình soạn thảo văn bản của mình, tôi gõ nó vào bảng điều khiển dev (trong khi trình gỡ lỗi đang ngồi ở foo), xem nó có làm những gì tôi muốn không, sau đó sao chép / dán nó từ bàn điều khiển vào trình soạn thảo văn bản của tôi. Đó là cách tôi thích làm việc. Và không thể. Vì tối ưu hóa. Hiểu rồi?
--js-flags
(bao gồm một số thứ liên quan đến TurboFan ) cũng như với một số lệnh gốc V8 trước khi Paul1365972 đăng câu trả lời của anh ấy nhưng tôi không thể đạt được hành vi mong muốn. Tôi tin rằng phương pháp này có thể là một ngõ cụt. Có thể đáng để thêm một [v8]
thẻ vào câu hỏi này. Ai đó với sự hiểu biết sâu sắc về hoạt động bên trong của V8 có thể có thể làm rõ liệu đây là con đường để đi hay có thể chỉ cho bạn đi đúng hướng.