Chrono Mock
DilTürkçe

Yerel bir uygulamanın içindeki web sayfaları

Yerleşik web motoru olan bir masaüstü uygulaması, sayfalarını ayrı, yalıtılmış bir süreçte çalıştırır. Yerel mekanizma uygulamayı kapsar ve bu sınırda durur - böylece pencere istediğiniz tarihe gider, içindeki panel gitmez. Bu, o boşluğu kapatır.

Başarı gibi görünen başarısızlık

Pek çok Windows uygulaması dışarıdan yerel, içeriden bir web sayfasıdır. Bir ayarlar ekranı, bir gösterge paneli, bir rapor görünümü, bir lisans paneli - bir kez HTML olarak oluşturulmuş ve iki kez yazılmak yerine WebView2 ya da Qt WebEngine içinde barındırılmış.

Motor bu sayfaları kendi sürecinde çalıştırır ve o süreç yalıtılmıştır. Uygulamaya enjekte edilen bir kitaplık oraya girmez. Uygulamanın Windows’tan istediği her şey oturumun tarihine kayar, sayfanın JavaScript’ten istediği her şey kaymaz:

  • Başlık çubuğu, günlükler ve dosyalar 2038 der.
  • Aynı penceredeki panel bugün der.
  • Hiçbir şey hata vermez, hiçbir şey uyarmaz ve iki yarı da aynı derecede kendinden emin görünür.

Bu hatanın pahalı sürümü budur, çünkü test çalışmış gibi görünür. Eski davranış böyle bir oturumu temiz bir başarı olarak bildiriyordu; aracın destekleyemeyeceği bir iddiaydı bu.

Oturum bunun yerine ne yapar

Oturum iki mekanizmayı birden çalıştırır. Yerel hook her zamanki gibi uygulamaya girer ve sayfalara, yalıtılmış bir renderer’a ulaşmanın tek yolundan ulaşılır: motorun kendisine sorarak.

Başlatma sırasında uygulama, motorundan yerel bir hata ayıklama portu açmasını isteyen iki ortam değişkenini devralır. Bunlar, uygulamanın zaten ilettiği anahtarların yerine geçmez, onlara eklenir. Oturum daha sonra o port belirene kadar kendi süreçlerini izler ve port belirdiğinde arkasındaki her sayfa ve her worker uygulamayla aynı saate geçer.

Tek başlangıç, tek hız, tek zaman çizelgesi. Bir hız değişikliği ya da bir atlama uygulamaya ve sayfalarına birlikte ulaşır; sayfaların zamanlayıcıları da kendi hızlarında değil uygulamanın hızında çalışır.

Varsayılan olarak açıktır ve hiçbir port açmayan, sayfaları gerçek saatte bırakan tek bir anahtarla kapatılır.

# Yapılandıracak bir şey yok - motor varsa bulunur
chrono run "C:\Program Files\YourApp\YourApp.exe" --at 2038-01-01T00:00:00 --mode x60

# Ya da sayfalara dokunmayın ve hiçbir port açmayın
chrono run "C:\Program Files\YourApp\YourApp.exe" --at 2038-01-01T00:00:00 --no-embedded

Rapor sayfalar hakkında ne söyler

Sayfalar uygulamanın kendi sayılarına katılmaz. Kendi başlarına birimler olarak sayılırlar; çünkü bir süreç ile bir sayfa farklı şeylerdir ve bunları toplamak hiçbir anlamı olmayan bir sayı uydurmak olurdu:

  • Başlık her ikisini de sayar - processes: 4, contexts: 1.
  • Her sayfa kendi satırlarını alır; örneğin komut satırında context 1: page Date.now (12 calls) ve pencerenin denetim tablosunda page Date.now - fake clock.
  • Ulaşılan motor portuyla birlikte adlandırılır; böylece kendi DevTools’unuzu oturumun yönettiği sayfalara tam olarak yöneltebilirsiniz.

Bir deneme çalıştırması (dry run), herhangi bir şey başlatılmadan önce sayfalara ulaşılıp ulaşılmayacağını söyler. Kararlar ne anlama geliyor →

Başlamadan önce bilmeye değer üç sınırlama

Motor çalıştığı sürece bir hata ayıklama portu açık durur.

Yalnızca bu bilgisayarda dinler, ancak motor çalıştığı sürece bu bilgisayardaki herhangi bir programa açıktır ve ona ulaşabilen her şey o sayfaları yönetebilir. Oturum, bir port her açıldığında bunu uyarır ve portu soyut olarak anmak yerine adıyla belirtir. Paylaşılan ya da güvenilmeyen bir makinede hiçbir şey açmayan anahtarı kullanın.

Yükseltilmiş çalışan bir uygulamaya ulaşılamaz.

Yükseltilmiş bir uygulamanın barındırdığı motor, oturumun ayarladığı değişkenleri yok sayar; bu yüzden sayfaları gerçek saatte kalır. Bu motorun kendi kuralıdır, bir ayar değil ve dışarıdan bunu aşmanın yolu yok.

Böyle bir oturum PARTIAL bildirir ve bu dürüst yanıttır.

Motorun yardımcı süreçleri ve renderer’ın kendi yerel zaman çağrıları gerçek saatte kalır. Sayfalar oturum saatindedir, ailenin geri kalanı değildir; bu yüzden karar kısmen der ve dışarıda bırakılanı başarıya yuvarlamak yerine adıyla söyler.

İki küçük sınırlama da açıkça söylenmeli. Sayfalar oturum saat dilimini sabit bir fark olarak okur, bu yüzden Intl onu bir şehir değil, GMT+02:00 gibi farkıyla adlandırır. Ve oturum sayfaya ulaşmadan önce zamanlanmış bir zamanlayıcı, saf bir Chromium oturumunda olduğu gibi eski hızını korur - oturum, hiçbir şey olmadığı sonucuna varmanıza izin vermek yerine uyarır.

Motor kayıt defterindeki bir tarayıcı bağımsız değişkenleri ilkesiyle yapılandırılmışsa, oturumun değişkeni süresi boyunca önceliklidir ve rapor bunu söyler - çünkü orada kurduğunuz bir hata ayıklama portu uygulanmazdı.

Ne kadar iyi test edildi

Deneysel, burada başka yerlerdekiyle aynı tanımlı anlamla: karşısında geliştirildiği hedeflerde çalışır, geniş çapta test edilmemiştir ve yerleşik denetim, bu sayfa değil, sizin gerçeğin kaynağınızdır. 64 bit Windows üzerinde bir WebView2 ana makinesine ve bir Qt WebEngine ana makinesine karşı, otomatik paketle değil elle ölçüldü. Bu çalıştırmalarda sayfalar oturumun yılını oturumun hızında okudu ve bir atlamayı izledi.

32 bit Windows’ta, keşfetmektense bilmeye değer bir püf noktası vardır: WebView2 çalışma zamanı, onu barındıran uygulama 32 bit olsa bile 64 bittir; bu yüzden 32 bit bir oturum motorun süreçlerini ya da rollerini adlandıramaz. Sayfalara giden kanal yine de çalışır. Rapor yalnızca tanımlayamadığı şey konusunda daha az belirleyici olur ve ikisinden hangisi olduğunu söyler.

Deneyin