Modern tarayıcılar tarafından yapılan kod optimizasyonunun bir yan ürünü olarak, hata ayıklama sırasında, "gerçekte" kapsam dahilindeki tüm değişkenleri "göremezsiniz". Bu iyi bilinmektedir ve burada SO ile ilgili bir önceki soruda ele alınmıştır . Bu özellik, üretimde kesinlikle yararlı olsa da, geliştirme sırasında beni çok rahatsız ediyor olsa da, beni yavaşlatıyor (bu açık olmalı).
Şimdi sorum şu, bu davranışı kapatmanın bir yolu var mı? Bazı yapılandırma dosyasını düzenleyebilir miyim, yoksa bir tarayıcı eklentisi var mı, ya da tarayıcı yürütülebilir dosyasının "geliştiriciler için özel bir derleme sürümü" olabilir mi? Yeni kod yazarken kodumu hemen konsola yazmayı seviyorum, bu yüzden bu gerçekten beni rahatsız ediyor.
GÜNCELLEME / DÜZENLE
İşte kısmi bir çözüm, Paul1365972'ye kredi.
Krom tarayıcıyı komut satırından, aşağıdaki gibi özel seçeneklerle başlatmanız gerekir:
- Chrome'u tamamen kapatın
- Chrome'u
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
diğer işletim sistemlerine benzer pencereler için konsoldan çalıştırın . - Geliştirici konsolunu açın ve çalıştırın
"%GetHeapUsage()"
. Chrome'u seçenekle düzgün bir şekilde başlattıysanız, konsola bir sayı kaydedilir, aksi takdirde bir sözdizimi hatası alırsınız.
Bu komut satırı işaretiyle, %
düz JavaScript'teki sözdizimi hataları olan komutlarla 'V8 ile konuşabilirsiniz' . Paul'un cevabında bu tür mevcut V8 komutlarının bir listesi verildi .
Orada %NeverOptimizeFunction()
sadece aramak ve onunla yapılabilir olurdu şey gibi görünüyordu şey olduğunu listede bulunuyordu. Ne yazık ki, bu işlev bir sonraki ekran görüntüsünde gösterildiği gibi umduğum şeyi yapmıyor.
((( Paul'un cevabındaki diğer bağlantı (v8-natives düğüm modülü) bu bağlamda bizim için önemli değildir. Tek yaptığı şey, kodları çökmemesi için "%" işlev çağrılarının etrafına tek satırları sarmaktır. v8 olmayan tarayıcılar.)))
(((Bunun işe yaradığı bir zamanı hatırlıyorum (bu optimizasyon henüz icat edilmediğinde / uygulanmadığında). Ne kadar zaman önce bilmiyorum. On yıl? 15 yıl? Böyle bir şey. Son Chrome sürümü (eğer herhangi bir) ve yapabileceğiniz son firefox sürümü (burada var olduğundan daha fazla emin olun) size ödül getirmeyecek, ancak bir cevap olarak biliyor ve gönderirseniz size bir oylama alacaktır. .)))
ÇÖZÜM
TEŞEKKÜR EDERİZ PETR SRNICEK
YENİ SORU
Petr'ın çözümü çok yardımcı olsa da, mükemmel değil. Bu soru çok uzun sürüyor, bu yüzden Petr'in çözümünün nasıl geliştirilebileceğine dair yeni bir soru yayınladım . (Tabii ki bu soruyu burada düzenleyebilirim, ama ne demek istediğimi biliyorsanız, bu "tarihsiz" olurdu.)
v8-natives
Kütüphane sadece olmalı, basit bir kütüphanede kodunda önemli% çağrıları sarar noops
.. özel --allow-yerliler-sözdizimi bayrak başladı olmayan bir tarayıcı veya düğümünde
%NeverOptimizeFunction(foo)
sadece bodyOnload için de aradım, "çünkü", "iyi düşünmek, acıtmayacak". Sorun, foo
umduğum şekilde deoptimize DEĞİLDİR. Değişken lorem
görünmezdir. Diyelim ki foo fonksiyonuna girecek bazı kodları yazmak istiyorum. Metin düzenleyicime yazmak yerine, dev konsoluna yazıyorum (hata ayıklayıcı foodayken), istediğimi yapıp yapmadığını görün ve sonra kopyalayıp konsoldan metin düzenleyicime yapıştırın. Bu şekilde çalışmayı seviyorum. Ve yapamazlar. Optimizasyon yüzünden. Anla?
--js-flags
(birkaç TurboFan ile ilgili olanlar da dahil ) ve birkaç V8 yerel komutunu deneyerek geçirdim, ancak istenen davranışı başaramadım. Bu yaklaşımın çıkmaz bir nokta olabileceğine inanıyorum. [v8]
Bu soruya bir etiket eklemek faydalı olabilir . V8'in iç işleyişini derinlemesine anlayan biri, bunun doğru yol olup olmadığını veya belki de sizi doğru yöne yönlendirdiğini açıklığa kavuşturabilir.