Autor Zpráva
Tori
Profil
Pěkné odpoledne.
Vymýšlím fulltextové vyhledávání pro statické webstránky (na CD) a chtěla bych použít spíš JavaScript, než portable server.
Jednotlivá slova (musí být alespoň 3 znaky dlouhá) rozdělím do stromu
aba: [id1, id2]
  + abak: [id1]
    + abak: [id1]
      + abaku: [id1]
        + abakus: [id1]
  + abat: [id2]
    + abaty: [id2]
      + abatyš: [id2]
        + abatyše: [id2]
abe: [id3] ...
, abych nemusela procházet celé pole a zkoušet regulár, ale četla přímo slovnik[hledaneSlovo]. ID budou odkazovat na pole stránek
id: { nazev: "stranka1", url: "str1.html", poradi: 25 }
Jelikož to má vyhledávat i bez diakritiky, asi bych sloučila verze s a bez diakritiky - takže pod uzlem "čer" bude jen "černoch", ale pod "cer" bude "černoch" i "cereálie".

Zajímalo by mne:
- je to použitelné řešení nebo to mám udělat nějak jinak? má tohle řešení nějaké nevýhody/úskalí?
- nevím, jaký je limit paměti, kterou může využít JS v prohlížeči. Objem dat bude okolo 10 - 15 tis. jednotlivých slov pro ten strom, + řádově několik tisíc dalších záznamů (v podstatě rejstříky autorů, názvů apod.), které se budou ukládat i prohledávat jiným způsobem (nejspíš pole[prvniPismeno][fráze]) a zaberou míň místa. Soubor s indexem může mít několik MB (odhad od boku) - bude ještě stačit paměť? Nebude se načítat stránka hodinu?

Předem moc děkuju za rady / názory.
hunter_dave
Profil
Pokud chceš vyhledávat na straně klienta použij AJAX. Napiš si nějaký php script pro vyhledávání a volej ho javascriptem pomocí nějaké knihovny jako je jQuery.
Tori
Profil
hunter_dave:
Chci vyhledávání ve statických .html stránkách, uložených na CD. Žádné php, žádná databáze, logicky teda ani AJAX.
Leo
Profil
S JS z CD bude potíž v IE, kde si uživatel musí v nastavení prohlížeče nejdřív JS na lokálních datech povolit (nevím, jestli je to defaultní nastavení i v IE+, ale dřív bylo). Kromě toho asi existuje omezení na paměť, ale mnohem dřív to asi selže na maximální době vykonávání skriptu, pokud se to nenapíše šikovně. Leo
Davex
Profil
Leo:
S JS z CD bude potíž v IE, kde si uživatel musí v nastavení prohlížeče nejdřív JS na lokálních datech povolit
Nemusí. Stačí přidat zapínací komentář do hlavičky stránky.
<head><!-- saved from url=(0014)about:internet -->

Kromě toho asi existuje omezení na paměť
Nevím jak nové verze, ale v IE6 se mi běžně podařilo donutit počítač JavaScriptem swapovat. Jen když skript běžel moc dlouho, tak se zobrazil dialog s varováním.
_es
Profil
Tori:
logicky teda ani AJAX
To nie je logické, AJAX je len stiahnutie súboru do pamäte v JS - nie je nutný server.
Môžeš si dáta s pozíciou slov rozdeliť na mnoho súborov a načítavať cez AJAX len príslušný súbor - tým sa ušetrí pamäť - stačí vždy načítať len zlomok celkových dát.
Tori
Profil
_es:
Aha, omlouvám se. Tohle je zajímavý nápad, určitě vyzkouším, děkuju. Co by v tomto případě bylo lepší - nechat formulář normálně odeslat a pak podle query string načíst příslušný soubor, anebo blokovat odesílání formuláře a jen přepisovat obsah proměnné novým souborem? A vlastně - myslel jste načítat html soubory, které se mají prohledávat (řádově stovky, i když malých), anebo .js s odpovídající částí indexu / stromu?
_es
Profil
Tori:
nechat formulář normálně odeslat
Písala si o statických stránkach na CD, na (zmysluplné) odoslanie a prijatie formulára je už potrebný nejaký server.

myslel jste načítat html soubory, které se mají prohledávat (řádově stovky, i když malých), anebo .js s odpovídající částí indexu / stromu?
Myslel som načítavať extra súbory určené len na to vyhľadávanie, teda buď súbory v nejakom vlastnom formáte - napríklad položky oddeľované medzerami alebo vo formáte JSON - ten stačí spracovať cez metódu eval a s výsledným objektom v JS normálne pracovať. Je ešte možné aj pracovať s JS súbormi s dátami, no tam to treba spraviť nejako tak, aby sa pri vyhľadávaní postupne nezvyšovala obsadená pamäť.
Leo
Profil
Davex:
Nemusí. Stačí přidat zapínací komentář do hlavičky stránky.

Díky za info. Leo
Chamurappi
Profil
Reaguji na _es:
Môžeš si dáta s pozíciou slov rozdeliť na mnoho súborov a načítavať cez AJAX len príslušný súbor - tým sa ušetrí pamäť
Možná by šlo využít hlavičku Range — pak by mohl být datový soubor jen jeden, ale musel by mít jasné uspořádání, aby JS věděl, o který rozsah bajtů si má říkat. Takové řešení by bylo kapku náročnější na přípravu, ale rozhodně zajímavé :-)


Reaguji na Tori:
Kromě toho asi existuje omezení na paměť
Pokud vím, tak přísné limity na paměť jsou v iPhonech a iPadech, tuším, že je tam hranice 5 a 10 MB. Ale do těch stejně cédéčko stejně nedostaneš. V normálních desktopových prohlížečích jsem zatím na žádný limit nenarazil, i dva gigabajty jsou docela v pohodě.
_es
Profil
Chamurappi:
Možná by šlo využít hlavičku Range
Fungovalo by to aj pri statickom načítaní súboru z CD - ak by to nešlo cez server a vo všetkých prehliadačoch?
Tori
Profil
Davex:
Stačí přidat zapínací komentář do hlavičky stránky.
... a za komentářem (přidávám pro jistotu i před něj) musí být windowsí odřádkování, čili 0x0D, 0x0A. http://msdn.microsoft.com/en-us/library/ms537628(v=vs.85).aspx pro případné zájemce.

Zatím to funguje pěkně, děkuju za rady. Nicméně se objevil problém při spouštění z USB/CD kvůli protokolu file:// a same-origin policy (nevím, jak je to česky, pardon). Zatím jsem našla - nezkoušela - knihovnu easyXDM, ale nechci brát kanón na něco, co je možná vrabec. Mohl by mne někde postrčit k jednoduššímu řešení, je-li jaké? Děkuju a pěkný večer.
Tu variantu s hlavičkou Range jsem zatím nezkoušela, až až bude funkční toto.
edit: JSONP a dynamické přidávání/vyhazování <script>ů vypadá taky zajímavě.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: