Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: KarelBezdeda 16. 12. 2012, 00:29:26

Název: Uložení velkých dat z JavaScriptu
Přispěvatel: KarelBezdeda 16. 12. 2012, 00:29:26
Dobry vecer.

Mam upraveny JavaScript, ktery ziska dlouhy balik dat (napr. Blob, ArrayBuffer, ...) a chci jej nejak ulozit/zobrazit. Je toho tolik, ze zobrazeni base64 ztroskota na samotnem prevodu. Jak na to jinak, nez psat napr. add-on pro FireFox?
Název: Re:Ziskat obsahla data z JavaScript
Přispěvatel: KapitánRUM 16. 12. 2012, 00:53:52
Odkud bereš ty data?
Ze serveru nebo z klienta?
Kam uložit?
Na server nebo na klienta?
Co takhle použít Web Socket?
http://www.google.cz/search?q=sockets+html5
Název: Re:Ziskat obsahla data z JavaScript
Přispěvatel: KarelBezdeda 16. 12. 2012, 10:31:26
Data jsou ziskana JavaScriptem ze serveru, chtel bych je ulozit na klientovi. Chapu, ze ukladani souboru z JavaScript je problem. Krome napsani si addonu do prohlizece (ktery napr. u Firefoxu ma interface nsIFile) me jeste napada to z klienta zase POSTnout na server, kde mi to zpracuje php skript, ulozi u sebe a vrati mi odkaz na soubor, ale prijde mi to jako overkill.
Název: Re:Ziskat obsahla data z JavaScript
Přispěvatel: KapitánRUM 16. 12. 2012, 11:03:48
Co takhle použít Web Socket?
Název: Re:Ziskat obsahla data z JavaScript
Přispěvatel: KapitánRUM 16. 12. 2012, 11:50:31
Data si překopíruješ přes Web Socket a lokálně si je můžeš ukládat přes Local Storage: http://dajbych.net/html5-a-local-storage
Proces:
Krok 1:
Má klient stejná data jako server?
Ano: Použij ty z Cache
Ne: Nakopíruj data ze serveru do Cache.
Krok 2:
Povedl se krok 1?
Ano: Pracuj dál s cache
Ne: Cache nefunguje, pracuj jen z pamětí

Obecně bude lepší využít standard HTML 5 spíš než psát ADDON.
Já obecně bych se ti na instalaci nějakého tvého podezřelého adonu do počítače vyprdnul.
Stejně tak na instalaci FidloFoxu k vůli jednomu programu.
A pokud je to pro pět lidí, pak se zase snadno postaráš o to, aby nepoužívali starý Fidlofox.
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: KarelBezdeda 16. 12. 2012, 14:38:48
Diky za odpoved a tip. Asi rozepisu, co chci dosahnout.

Mam stranku, nad kterou nemam kontrolu a chci z ni (= ciziho serveru) vytahnout nejaka data pomoci JavaScriptu. Musim trochu zmenit jeji puvodni JS funkce (pracovne v teto chvili zajistuji prepsanim funkce v FireBugu), abych dostal  data (radove desitky MB). Zmenenou funkci zavolam a dostanu balik dat, ktery je potreba ulozit na klientovi do souboru.

Proc mi zatim vychazi jako nejlepsi vec doplnek:
* bezproblemove ukladani dat na klientovi (nsIFile)
* moznost na konkretni stranku umistit sve tlacitko, na ktere navazu upravenou funkci (neni potreba funkci podhazovat FireBugem)

Jdu vhodnou cestou?
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: KapitánRUM 16. 12. 2012, 15:08:44
Nemám to rád, fakt ne, ale v tomhle případě...tedy, nešlo by spustit na klientovi Pytlouní skript a stáhnout to pomocí toho?
Já bych se na JS vykašlal a data ze serveru si vycucal přímo.
Nejspíš chceš nějakou DB, jako je katalog firem nebo třeba data z Aresu....
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: KapitánRUM 16. 12. 2012, 15:09:33
Nemám rád Pytlouna  ;D
http://xahlee.info/perl-python/get_url.html
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: KarelBezdeda 16. 12. 2012, 15:13:27
Nechci py-klienta, vytahovani dat ze stranky pomoci javascriptu by se mi spatne simulovalo, jsou to slozite objekty a tak dale... Ale presto diky. Momentalne jsem sve problemy zuzil na:
* jak modifikovat DOM strom konkretni stranky (pridat sve tlacitko)
* jak na toto tlacitko pridat svuj upraveny JS, ktery bude moci volat puvodni JS stranky
* popr. jak z doplnku pristupovat k JS stranky (abych si zdetekoval, ze mam (natahnute) vsechny funkce, ktere potrebuji)
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: KapitánRUM 16. 12. 2012, 18:46:20
Stránku si uložíš na svém pecku, přidáš svůj JS a spustíš.
Alternativně to pustíš přes Proxy.

Rozdíly:
A) Uložená stránka bude fungovat samozřejmě jen do té doby, než původní autor změní stránku a tobě to přestane fachčit.
B) Proxy umí pozměnit stránku a přidat tam cokoliv (dřív se na free hostingu přidával nahořu baner).
Proxy případně může reagovat na požadavek o stažení souboru NějakýKódTéStránky.JS a místo toho vždy podstrčit NějakýTvůjKód.JS a tlačítko si přidáš sám pomocí JSka, nejjednodušší je ADD url+add event (Nepřidáváš tlačítko, ale jen url a k tomu třeba OnClick().

Pak by to šlo ještě přes cross site scripting, ale dvě(tři) výše uvedené možnosti jsou myslím nejjednodušší.
Protože jsem to párkrát dělal, mám vyzkoušené, že nakonec bylo nejsnazší si to stáhnout pomocí externího skriptu.
Ale pokud JS umíš, tak proč ne.
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: TV 16. 12. 2012, 21:01:12
Nechci py-klienta, vytahovani dat ze stranky pomoci javascriptu by se mi spatne simulovalo, jsou to slozite objekty a tak dale... Ale presto diky. Momentalne jsem sve problemy zuzil na:
* jak modifikovat DOM strom konkretni stranky (pridat sve tlacitko)
* jak na toto tlacitko pridat svuj upraveny JS, ktery bude moci volat puvodni JS stranky
* popr. jak z doplnku pristupovat k JS stranky (abych si zdetekoval, ze mam (natahnute) vsechny funkce, ktere potrebuji)

Co třeba https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/ (https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/)?
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: 42 16. 12. 2012, 21:16:09
Zdravím,
mno JavaScript je možná tou nejhorší variantou na takové zpracování.
Je třeba si nejdříve uvědomit, že pokud to půjde přes prohlížeč, jsi tím omezen.
Prohlížeč umožní zpracovat a ukládat jen nějaký množství dat v závislosti na nastavení a také výkonu PC.
Právě uložiště prohlížeče hraje v takovém případě největší roli. Můžeš buď ukládat data do cookie, což je omezeno snad nejvíc, tudíž tady k ničemu.
Dále se nabízí možnost použít DOM storage - pomalé.
sessionStorage je také nevhodný. Ideálně bych na odkládání dat použil globalStorage nebo nejlíp localStorage objekt.
Pokud chceš parsovat stránku, použij postupné zpracování pomocí objektů a to tak, že jednoduše dej prohlížeči jednou za čas chvilku na odpočinek, třeba pomocí setTimeout. Problém asi nebude s tím, že těch dat je mnoho. Psal jsem v JS hodně velký aplikace na webu a velké zpracování dat. Problém nastane ve chvíli, kdy bude skript nepromyšlený, kdy budeš často načítat data z DOM a pracovat se stránkou jako takovou.
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: KapitánRUM 16. 12. 2012, 21:37:11
Tak na to ukládání dat se dá použít i třeba FAKE.
Pokud už si už dá tu práci a rozběhne Proxy, není jediný důvod, aby si do stránky nevložil odkaz na jeho.php běžící na lokálním stroji, to jeho.php to už může narvat kam chce. JEHO JavaScript doluje data a posílá je na jeho.php, které běží na lokálním stroji a přesměrování je řešené pomocí třeba té proxy.

Lze to řešit i bez té proxy, ale pro tohle hraní je asi nejjednodušší tu proxy použít, už jen protože si můžeš prohlížet komunikaci.
Resp. záleží na prohlížeči, jestli bude ochotný navázat přímé spojení s php skriptem běžícím na jiném serveru, nebo jestli se bude cukat a bude potřeba buď snížit zabezpečení nebo snáze použít tu Proxy.
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: KapitánRUM 16. 12. 2012, 21:40:04
Ostatně tady nejde nejspíš o nic jiného než o "vykradení" nějaké databáze nebo kulantněji řečeno "získání dat z cizího serveru bez spolupráce majitele".
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: 42 16. 12. 2012, 21:50:04
Resp. záleží na prohlížeči, jestli bude ochotný navázat přímé spojení s php skriptem běžícím na jiném serveru

Tady začíná víc problémů ještě před vývojem. Cross-Site scripting je jedna věc, ale dá se řešit. Ovšem v takovém případě by k cizímu webu přistupoval z jiného místa a narážíme na XSS Filtering, to má podle mě už hodně lepších webů a serverů podchycené.
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: KapitánRUM 16. 12. 2012, 22:00:32
Ovšem v takovém případě by k cizímu webu přistupoval z jiného místa a narážíme na XSS Filtering, to má podle mě už hodně lepších webů a serverů podchycené.

Právě proto je to lepší řešit přes Proxy, prohlížeč pozná prd a data si můžeš posílat o 106 a to včetně řídících povelů a ukládání dat tam i zpět.


Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: Karel Bezděda 18. 12. 2012, 15:39:38
Dekuji vsem za odpovedi. Pokus o trolling s GreaseMonkey hodnotim +1. Myslim, ze to mam vyreseno.

Prevedu si data do JavaScript (JS) stringu (kteremu nevadi, ze obsahuje nulove znaky (http://jsfiddle.net/HKraN/11/)). Vytvorim si pomocny element, do ktereho navazu tento string pomoci setAttribute. Vytvorim si event, ktery z elementu "dispatchnu" a chytim si ho v extensionu, coz bylo cilem.

Jsou tam urcita omezeni (napr. dlouhy string budu muset rozdelit).

Mate k tomu nekdo nejake pripominky?
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: Zopper 07. 01. 2013, 13:48:36
K tomu odkazu:

Maximum call stack size exceeded :D Ok, zmiňuješ to... jen pro informaci: dělá to ta konverze z Uint8Array na string.

Nechápu, co máš s těmi nulovými znaky - v normálním textu se přece \0 (NULL) vyskytne akorát na konci - to že si generuješ náhodná čísla v ASCII rozsahu včetně NULL je tvůj problém.
Kód: [Vybrat]
var b = Math.floor((Math.random()*255)+1); a nenajde to ani jeden NULL.

Když jsme u toho: nemíchej pojem "zero" a "null", jsou to dvě různé hodnoty.

Další věc:
Kód: [Vybrat]
if(myNode) {
   document.lastChild.removeChild(myNode);
  }
  myNode = document.lastChild.appendChild(document.createTextNode(
   String.fromCharCode.apply(null, arr)));
 }
Tohle je právě to, co zmiňoval 42 - "Problém nastane ve chvíli, kdy bude skript nepromyšlený, kdy budeš často načítat data z DOM a pracovat se stránkou jako takovou."

Já sice chápu, že tohle je jen zápis výsledku, ale i tak... Proč měníš DOM, když to není nutné? Tady by stačilo element.innerText (ten je minimálně o řád rychlejší než nahrazování elementu - a když už potřebuješ vložit i nějaké HTML, zvaž použití innerHTML - to je taky o něco rychlejší, byť jen o pár procent).

K tomu nápadu:
K čemu tam máš ten mezikrok s pomocným elementem? A navíc ještě cpát dlouhé texty do attr? :o  Brr, fuj!
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: andrej 07. 01. 2013, 18:58:12
data stiahnes tym javascriptom co uz asi mas
na stranke budes mat podpisany applet ktory bude mat pristup na lokalny filesystem.
javascriptom zavolas javovu funkciu a odovzdas jej data, tie potom java ulozi na lokalny filesystem.
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: Karel Bezděda 15. 01. 2013, 10:21:13
Díky za reakci Jane.

Napsal jsem si na to pomocný doplněk a na stránce vytvářím jen jeden pomocný element. Data do něj posílám pomocí události (document.createEvent, event.initCustomEvent, element.dispatchEvent). V doplňku naslouchám své události a data ukládám.

Je to tak lepší? Pokud byste měl nějaké další připomínky, tak mi napište email, prosím. Tady to nestíhám sledovat.
Název: Re:Uložení velkých dat z JavaScriptu
Přispěvatel: Karel Bezděda 15. 01. 2013, 10:22:19
Díky za reakci Jane.

Napsal jsem si na to pomocný doplněk a na stránce vytvářím jen jeden pomocný element. Data do něj posílám pomocí události (document.createEvent, event.initCustomEvent, element.dispatchEvent). V doplňku naslouchám své události a data ukládám.

Je to tak lepší? Pokud byste měl nějaké další připomínky, tak mi napište email, prosím. Tady to nestíhám sledovat.