Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| špatná-praxe:komprese [2017/11/29 13:17] – [Chybně implementovaná komprese] Jakub Klímek | špatná-praxe:komprese [2021/07/30 09:07] (aktuální) – [Soubor ke stažení explicitně komprimovaný pomocí gzip, bzip2 nebo jiné proudové metody] Jakub Klímek | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| ====== Chybně implementovaná komprese ====== | ====== Chybně implementovaná komprese ====== | ||
| Cílem komprese je snížit nároky na místo na disku a na síťovou konektivitu. | Cílem komprese je snížit nároky na místo na disku a na síťovou konektivitu. | ||
| - | Při přenosu (otevřených) dat tak jistě svou roli (až na ty uplně nejmenší soubory) má, obzvláště proto že většina otevřených formátů je textových, a texty se komprimují dobře. | + | Při přenosu (otevřených) dat tak jistě svou roli (až na ty úplně nejmenší soubory) má, obzvláště proto, že většina otevřených formátů je textových, a texty se komprimují dobře. |
| Dá se ovšem implementovat různě šikovnými způsoby a jednotlivé způsoby mají souvislosti i s metadatovým popisem distribucí datových sad a dokonce i se samotným dělením dat na datové sady. | Dá se ovšem implementovat různě šikovnými způsoby a jednotlivé způsoby mají souvislosti i s metadatovým popisem distribucí datových sad a dokonce i se samotným dělením dat na datové sady. | ||
| Jednotlivé případy si nyní rozebereme, a postupně budeme volbu komprese vylepšovat od nejméně vhodné až po nejvhodnější. | Jednotlivé případy si nyní rozebereme, a postupně budeme volbu komprese vylepšovat od nejméně vhodné až po nejvhodnější. | ||
| Řádek 23: | Řádek 23: | ||
| ===== Soubor ke stažení komprimovaný pomocí ZIP, 7z, RAR nebo jiné neproudové metody ===== | ===== Soubor ke stažení komprimovaný pomocí ZIP, 7z, RAR nebo jiné neproudové metody ===== | ||
| Neproudová metoda komprese je taková, kde pro započetí dekomprese je třeba mít k dispozici celý soubor. | Neproudová metoda komprese je taková, kde pro započetí dekomprese je třeba mít k dispozici celý soubor. | ||
| - | To je v pořádku, pokud si takový soubor přinesete na USB flashce, Blu-Ray, DVD, CD nebo na disketě. | + | To je v pořádku, pokud si takový soubor přinesete na USB flashce, Blu-Ray, DVD, CD. |
| Otevřená data jsou ale poskytována přes Internet, kde nejužším hrdlem je kapacita síťového připojení. | Otevřená data jsou ale poskytována přes Internet, kde nejužším hrdlem je kapacita síťového připojení. | ||
| Tedy soubor se stahuje delší dobu, a může být užitečné vidět jeho obsah ještě než ho stáhnu celý. | Tedy soubor se stahuje delší dobu, a může být užitečné vidět jeho obsah ještě než ho stáhnu celý. | ||
| Řádek 33: | Řádek 33: | ||
| Proto se tyto kompresní metody do prostředí Internetu nehodí. | Proto se tyto kompresní metody do prostředí Internetu nehodí. | ||
| - | ===== Soubor ke stažení explicitně komprimovaný pomocí gzip, bzip2 nebo jiné neproudové | + | ===== Soubor ke stažení explicitně komprimovaný pomocí gzip, bzip2 nebo jiné proudové |
| Proudová (streamová) metoda komprese je taková, kde mohu obsah dekomprimovat tak, jak ho načítám, jak mi přichází ze sítě, a nemusím čekat až ho dostahuju celý. | Proudová (streamová) metoda komprese je taková, kde mohu obsah dekomprimovat tak, jak ho načítám, jak mi přichází ze sítě, a nemusím čekat až ho dostahuju celý. | ||
| Takový soubor je pak poskytnut ke stažení, a má pak typicky za jménem ještě další příponu '' | Takový soubor je pak poskytnut ke stažení, a má pak typicky za jménem ještě další příponu '' | ||
| - | Pokud je ale soubor vystaven takto, klient (člověk nebo aplikace) se z hlavičky '' | + | Pokud je ale soubor vystaven takto, klient (člověk nebo aplikace) se z hlavičky '' |
| V prostředí webu se pro tyto účely používá tzv. [[https:// | V prostředí webu se pro tyto účely používá tzv. [[https:// | ||
| Nedozví se tedy už, co za datový formát je uvnitř, a když soubor stáhne, musí ho před použitím nejprve dekomprimovat správnou metodou. | Nedozví se tedy už, co za datový formát je uvnitř, a když soubor stáhne, musí ho před použitím nejprve dekomprimovat správnou metodou. | ||
| Takový soubor tedy lze postupně rozbalovat, ale nelze ho přímo zpracovávat. | Takový soubor tedy lze postupně rozbalovat, ale nelze ho přímo zpracovávat. | ||
| Zejména nelze takto komprimovaný datový soubor validovat vůči jeho schématu, protože validátory obvykle nedetekují kompresi a neimplementují dekompresi. | Zejména nelze takto komprimovaný datový soubor validovat vůči jeho schématu, protože validátory obvykle nedetekují kompresi a neimplementují dekompresi. | ||
| - | |||
| ===== Soubor ke stažení volitelně komprimovaný pomocí gzip ===== | ===== Soubor ke stažení volitelně komprimovaný pomocí gzip ===== | ||
| Ideálním řešením v prostředí webu je využít možností, které už dlouho poskytuje protokol HTTP, a poskytovat soubor jak v komprimované, | Ideálním řešením v prostředí webu je využít možností, které už dlouho poskytuje protokol HTTP, a poskytovat soubor jak v komprimované, | ||
| HTTP hlavička '' | HTTP hlavička '' | ||
| Ta jsou pak klientovi poslána v komprimované podobě, a klient si je u sebe rovnou dekomprimuje. | Ta jsou pak klientovi poslána v komprimované podobě, a klient si je u sebe rovnou dekomprimuje. | ||
| - | Tentokrát je ale v odpovědi serveru jasně popsáno, kterou metodou komprimujeme '' | + | Tentokrát je ale v odpovědi serveru jasně popsáno, kterou metodou komprimujeme '' |
| Tato metoda se běžně používá pro webové stránky v HTML, CSS styly a JavaScriptové soubory, a uplně stejně lze použít i pro otevřená data. | Tato metoda se běžně používá pro webové stránky v HTML, CSS styly a JavaScriptové soubory, a uplně stejně lze použít i pro otevřená data. | ||
| V této variantě jsou tedy data na serveru v nekomprimované podobě, a pokud klient požádá o komprimovaný přenost, server použije proudovou kompresi a klient proudovou dekompresi. | V této variantě jsou tedy data na serveru v nekomprimované podobě, a pokud klient požádá o komprimovaný přenost, server použije proudovou kompresi a klient proudovou dekompresi. | ||