Kdy uvěřit webové stránce? – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kdy uvěřit webové stránce? – .NET – Fórum – Programujte.comKdy uvěřit webové stránce? – .NET – Fórum – Programujte.com

 

Matěj Andrle+1
Grafoman
24. 1. 2020   #1
-
0
-

Mám ve Windows Forms webový applet, kterému schovávám načítání za načítací obrázek. Mordoval jsem se s tím 3 dny, nemohl jsem donutit ten applet, aby mi mezi stránkami kompletně nemazal buffer, což způsobovalo probliknutí. Nicméně vyhrál jsem, než vlezu na další stránku, schovám pěkně applet za obrázek a ono se to tam načte pod pokličkou. Nastal ovšem druhý boj. Prohlížeče dnes jsou až moc aktivní a vlastně nedokáži určit, kdy už mohu nechat zobrazit stránku. Zatím jediné řešení je timer napevno, což samozřejmě nemusí sedět na dalších PC atp. Problém je, že ani třeba obrázek na konci stránky není směrodatný, protože on si jej stejně natáhne dříve, než jej skutečně zobrazí. Tedy umím číst requesty, vím, co se děje uvnitř appletu, ale nevím, jak poznat, kdy už mi to neblikne. Jakékoli zdroje si tahá před dorenderováním stránky, takže ani zvukový soubor na konci stránky mi nepomohl. Hloupě mne napadlo pustit tedy timer v JS a počkat na něj, ale i ten si prohlížeč přednačítá. Jinak tedy používám CefSharp. Nicméně potřebuji jen třeba JS, co se pustí až po kompletním načtení stránky - tak, aby mi jej prohlížeč nepřednačítal. Cokoli jsem zkoušel nebylo měřítkem, že už je stránka kompletně načtená. Zatím mi vyšel spolehlivý timer 500 ms, ale to bych pro jistotu musel dát 1 sekundu a modlil bych se, že to bude stačit všem/většině PC... Můžu také pustit nějaký JS, který by schoval celou stránku pod další schovávací obrázek a pak bych odkryl ten C# obrázek. Pak už bych to ovládal v JS. Tak se zde ptám, jaké posloupnosti by se dalo nejvíce věřit. Zatím schovávám celý Form dalším Formem a oba s DoubleBuffer, takže to hezky funguje a plynule mění obraz. Žádné bliknutí. Ale nemám žádný event RenderDone...

Nahlásit jako SPAM
IP: 89.177.122.–
gna
~ Anonymní uživatel
1853 příspěvků
24. 1. 2020   #2
-
0
-

window.onload se spouští po načtení všech závislostí. Jestli pak ta stránka provádí ještě nějaké další brikule to už dost dobře nepoznáš. V CEF by to mělo jít odchytit, netuším jestli i v CefSharp.

Nahlásit jako SPAM
IP: 213.211.51.–
Matěj Andrle+1
Grafoman
24. 1. 2020   #3
-
0
-

#2 gna
Tak já používám jQuery a dal jsem si tam do něj načtení neexistujícího wav. Mám ověřeno, že i tak si browser dříve natáhne JavaScript, než je skutečně dorenderováno. Je pravda, že nativní onload by v tomto případě mohl dopadnout lépe. On už bohužel prohlížeč neříká, v jakém stavu opravdu stránka je. On ti řekne, že prvek už je viditelný, ačkoli v době běhu scriptu jej teprve zobrazuje. Celá ta GPU optimalizace právě mlží, co se skutečně renderuje. Přesně to řeším, že scripty, zdroje dokonce i události si browser extrémně optimalizuje. Onload dávno neodpovídá stavu dokončeného renderu - ve skutečnosti to celé podléhá optimalizaci GUI, kdy uvnitř JS skutečně stav načtení odpovídá, ale vykreslovací vlákno třeba provede ještě jedno závěrečné vykreslení. Po jQuery ready se mi provedly ještě dvě vykreslovací iterace... Tak se chystám udělat skrývací obrázek ještě v tom prohlížeči a budu se modlit, aby se obrázek přes celou obrazovku s nejvyšší prioritou atp. vyrenderoval tak, že mi tam už neskočí žádné vyprazdňovací renderování...

Nahlásit jako SPAM
IP: 89.177.122.–
Mutagen
~ Anonymní uživatel
549 příspěvků
24. 1. 2020   #4
-
0
-

#3 Matěj Andrle
Sice o daný problematice nevím nic, ale co třeba kontrolovat velikost bufferu a jakmile by jeho velikost další tick byl stejnej tak se vše dokončilo, protože už nic nenačítá?

Nahlásit jako SPAM
IP: 193.138.154.–
Matěj Andrle+1
Grafoman
24. 1. 2020   #5
-
0
-

#4 Mutagen
To zní moc fajn a nadějně. To mne nenapadlo. Umím číst buffer obrazovky, ale jak porovnávat buffer? Velikost je přeci blbost, velikost je daná velikostí elementu. Musel bych nějak testovat (Pokud vím, zelený pixel je stejně velký, jako modrý.) Určitě bych to musel nějak optimalizovat - číst jen určitý fragment bufferu a asi v něm porovnat všechny pixely, hmm...

Nahlásit jako SPAM
IP: 89.177.122.–
JerryM0
Věrný člen
24. 1. 2020   #6
-
0
-

#1 Matěj Andrle
nevim jak je to při programování web stránek, ale normálně nepoužívám DoubleBuffering při práci s GDI+ protože se mi to moc nelíbí. Jednoduše si vytvořim bitmapu do paměti (i jako MemoryStream) a zapisuju do ní a pak ji jen přiřadim ke contorlu, kde se má objevit. Nic víc. Když udělám jakýkoliv jiný postup, začne to problikávat.

Nahlásit jako SPAM
IP: 109.81.214.–
Matěj Andrle+1
Grafoman
24. 1. 2020   #7
-
0
-

#6 JerryM
Mně blikalo už jen načítání stránky. To vůbec nesouvisí s renderováním, ale s tím, že se Chromium snaží vykreslovat průběžné načítání stránky, takže před opuštěním současné kompletně vyčistí frame i buffery. To způsobí bliknutí barvy pozadí.

Nahlásit jako SPAM
IP: 89.177.122.–
gna
~ Anonymní uživatel
1853 příspěvků
24. 1. 2020   #8
-
0
-

jQuery ready se spouští před načtením dalších závislostí. Já jsem mluvil o JavaScriptovém window.onload, který se spouští až potom. Tam pak spustíš timer a dáš tomu ještě pár milisekund na vykreslení.

Co se týče toho bufferu, tak nic optimalizovat nemusíš, protože to bude blesková záležitost.

Nahlásit jako SPAM
IP: 213.211.51.–
24. 1. 2020   #9
-
0
-
Nahlásit jako SPAM
IP: 195.178.67.–
Matěj Andrle+1
Grafoman
24. 1. 2020   #10
-
0
-

#9 hlucheucho
Chci udělat to, že chci schovat překrývací obrázek až po plném načtení stránky. Jdu ozkoušet ten window.onload, který jak již jsem psal, uznávám, že může běžet ve vhodnější čas. Poslední možností je porovnávat buffer pixel po pixelu. Je pravda, že porovnávání bufferu bude rychlé, dokud budou rozdíly velké.

Nahlásit jako SPAM
IP: 89.177.122.–
Matěj Andrle+1
Grafoman
24. 1. 2020   #11
-
0
-

#9 hlucheucho
Tak se zdá, že window.onload skutečně už je důvěryhodný. Mám z toho přád vítr a musím říci, že při hrubém několikanásobném načítání to občas blikne, což mé řešení skoro nikdy, ale to už asi nebudu řešit. Dělám to v cyklu se spánkem a limitem, takže to možná ještě občas odnese ten limit, že jej třeba i zvětším... Po onload zavolám stažení neexistující hudby, čímž poznám, že klient je načten - stažení zamítnu a zavolám:

int iterations = 0;
while (!contentLoaded && iterations < 10)
{
	Thread.Sleep(50);
	iterations++;
}
...
schovejCoverImage(); // ilustrační kód
Nahlásit jako SPAM
IP: 89.177.122.–
24. 1. 2020   #12
-
0
-

#10 Matěj Andrle
Překrývací obrázek má sloužit k čemu? Jen jestli nejdeš příliš složitě na něco, co jde udělat jednoduše.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Matěj Andrle+1
Grafoman
24. 1. 2020   #13
-
0
-

#12 hlucheucho
Chci Forms CefSharp donutit počkat s renderováním, než si načte stránku. Nenašel jsem po 3 dnech jedinou možnost, jak zdržet renderování. Používá to Nvidia GPU optimalizaci, takže z Forms se dovnitř nedostanu. Když Chromium nepočká s renderem, tak vymaže současný krásný obraz a začne načítat novou stránku. Už jen to, že používám tmavé pozadí hned trefí do oka, jak to blikne... Natož, když se mi renderuje stránka, kde se ještě pozicují prvky atp. - právě z toho pohledu nevidím žádnou snadnou možnost zabránit problikávání obrazu.

Nahlásit jako SPAM
IP: 89.177.122.–
24. 1. 2020   #14
-
0
-

Co tak vím, tak u webu se renederování děje na straně serveru. K renderování dojde tedy až si od serveru vyžádám novou stránku a nebo nový obsah např. submit po vyplnění formuláře. Tato změna vede k probliknutí - původní obsah zmizí a chvíli trvá než se objeví nový. Pokud se to má chovat jako desktopová aplikace, obchází se to pomocí javascriptu. Ten umí načíst část nebo celou stránku aniž by se sáhlo do původního zobrazení a pak teprve změnit DOM a tím vložit nový obsah. Jsou na to i hotové knihovny. Mám pocit, že tyhle věci umí "one page application" co je v MS VS jako šablona (nikdy jsem takovou aplikaci nedělal).To je vše, co z webařiny vím a používám. Na překreslení grafu a tabulky mi to stačilo a žádné blikání jsem nezaznamenal.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
JerryM0
Věrný člen
24. 1. 2020   #15
-
0
-
Nahlásit jako SPAM
IP: 109.81.214.–
JerryM0
Věrný člen
24. 1. 2020   #16
-
0
-

#15 JerryM
tdy je návod

https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial

Nahlásit jako SPAM
IP: 109.81.214.–
Matěj Andrle+1
Grafoman
24. 1. 2020   #17
-
0
-

#14 hlucheucho
Nemám server. Strkám mu offline obsah rovnou, nikdo na nic nečeká. Všechny zdroje jsou otevřené streamy rovnou v prohlížeči Problikne to jenom proto, že ten blb vvymaže původní buffer a trvá to chvíli, než vyrenderuje nový obsah. Takže jsem to schoval a je to cajk. Jen řeším, kdy už je hotovo...

Nahlásit jako SPAM
IP: 89.177.122.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý