Technika optimalizace programového kódu. Optimalizace programového kódu. Hlavní možnosti optimalizace kódu programátorem a kompilátorem Škody a výhody optimalizací

A zvýšit efektivitu. Cíle optimalizace zahrnují snížení množství kódu, objemu používaného programem paměť s náhodným přístupem, zrychlení programu, snížení počtu vstupně/výstupních operací.

Hlavním požadavkem, který je obvykle kladen na optimalizační metodu, je, že optimalizovaný program musí mít stejný výsledek a vedlejší účinky na stejnou sadu vstupních dat jako neoptimalizovaný program. Tento požadavek však nemusí hrát zvláštní roli, pokud lze zisk v důsledku použití optimalizace považovat za důležitější než důsledky změny chování programu.

Typy optimalizace

Optimalizaci kódu lze provádět buď ručně programátorem, nebo automaticky. V druhém případě může být optimalizátor buď samostatný software a být zabudován do kompilátoru (takzvaný optimalizační kompilátor). Navíc je třeba poznamenat, že moderní procesory mohou optimalizovat pořadí, ve kterém jsou kódové instrukce vykonávány.

Existují takové koncepty jako optimalizace na vysoké a nízké úrovni. Optimalizace na vysoké úrovni jsou většinou prováděny programátorem, který operuje s abstraktními entitami (funkcemi, procedurami, třídami atd.) a představuje si obecný model pro řešení problému, dokáže optimalizovat návrh systému. Optimalizace na úrovni základních stavebních bloků zdrojový kód(cykly, větve atd.) jsou také obvykle klasifikovány jako vysoká úroveň; někteří je rozlišují do samostatné („střední“) úrovně (N. Wirth?). K nízkoúrovňové optimalizaci dochází ve fázi přeměny zdrojového kódu na sadu strojových instrukcí a často tato fáze podléhá automatizaci. Programátoři v assembleru se však domnívají, že žádný stroj v tomto nemůže překonat dobrého programátora (zatímco všichni souhlasí s tím, že špatný programátor stroje ještě zhorší).

Výběr oblasti, která má být optimalizována

Při ruční optimalizaci kódu nastává další problém: musíte vědět nejen jak optimalizovat, ale také kde jej aplikovat. Obvykle kvůli různým faktorům (pomalé vstupní operace, rozdíly v rychlosti lidského operátora a stroje atd.) zabere pouze 10 % kódu až 90 % doby provádění (samozřejmě toto tvrzení je dosti spekulativní a má pochybný základ v zákoně Pareto, nicméně u E. Tanenbauma vypadá docela přesvědčivě). Vzhledem k tomu, že optimalizace bude muset vynaložit více času, namísto snahy o optimalizaci celého programu by bylo lepší optimalizovat těchto „kritických“ 10 % doby provádění. Tento kus kódu se nazývá úzké místo nebo hrdlo láhve (bottleneck) a k jeho určení jej používají speciální programy- profilery, které umožňují měřit dobu běhu různých částí programu.

Ve skutečnosti se v praxi optimalizace často provádí po fázi „chaotického“ programování (včetně věcí jako „“, „na to přijdeme později“, „bude to stačit“), a proto se jedná o směs aktuální optimalizace, refaktoring a korekce: zjednodušení "fancy" konstrukcí - jako strlen(cesta.c_str()), logické podmínky (a.x != 0 && a.x != 0) atd. Profilery se pro takové optimalizace jen stěží hodí. K odhalení takových míst však můžete použít programy - nástroje pro hledání sémantických chyb na základě hluboké analýzy zdrojového kódu - ostatně, jak je vidět z druhého příkladu, neefektivní kód může být důsledkem chyb (např. překlepy v v tomto příkladu- s největší pravděpodobností znamenali a.x != 0 && a.y != 0). Dobrý takový kód detekuje a zobrazí varovnou zprávu.

Škody a výhody optimalizací

Téměř ke všemu v programování je třeba přistupovat racionálně a optimalizace není výjimkou. Předpokládá se, že nezkušený programátor sestavení obvykle píše kód, který je 3-5krát pomalejší než kód generovaný kompilátorem (Zubkov). Existuje široce známý výraz týkající se časných optimalizací na spíše nízké úrovni (jako je boj o další operátor nebo proměnnou) formulovaný Knuthem: „Předčasná optimalizace je kořenem všech problémů.“

Většina lidí nemá žádné stížnosti na optimalizace prováděné optimalizátorem a někdy jsou některé optimalizace prakticky standardní a povinné - například optimalizace rekurze ocasu ve funkčních jazycích (rekurze ocasu je speciální typ rekurze, kterou lze omezit na ve tvaru smyčky).

Je však třeba si uvědomit, že četné složité optimalizace na úrovni strojového kódu mohou značně zpomalit proces kompilace. Navíc zisk z nich může být extrémně malý ve srovnání s optimalizacemi celkového návrhu systému (Wirth). Neměli bychom také zapomínat, že moderní, syntakticky a sémanticky propracované jazyky mají mnoho jemností a programátor, který je nebere v úvahu, může být překvapen důsledky optimalizace.

Uvažujme například jazyk C++ a tzv. Return-Value Optimization, jejíž podstatou je, že kompilátor nesmí vytvářet kopie dočasného objektu vráceného funkcí. Vzhledem k tomu, že kompilátor v tomto případě kopírování "přeskočí", nazývá se tato technika také "Copy elision". Takže následující kód:

#include struct C ( C() () C(const C&) ( std::cout li.

Nyní si pro lepší představu zkusme vytvořit layout správně optimalizované stránky.

Název stránky

  • Kategorie 1
  • Kategorie 2
    • Kategorie 2.1
    • Kategorie 2.2
  • Kategorie 3
Název stránky

Hlavní obsah pomocí značek -, , , ,
,

.

Boční blok s dalšími informacemi. ...

Co dalšího je třeba vzít v úvahu při SEO rozvržení webu
  • Stránka může mít špatný účinek velký počet chyby ověření. Není vhodné používat prázdné značky a css, js soubory, které nejsou na stránce použity. Čím je kód lehčí, tím je pro vyhledávače snazší jej analyzovat.
  • Neměli byste používat flash a rámečky, které nejsou příliš přátelské k vyhledávačům. Taky vyhledávače nerozpozná text nakreslený pomocí obrázku.
  • Funkce webu napříč prohlížeči ovlivňuje chování uživatelů a nutí je opustit web bez přijetí nezbytné informace nebo bez nákupu. V důsledku toho se zhoršují behaviorální faktory, které ovlivňují optimalizaci celého webu.
  • Dostupnost mobilní verze web nebo jeho přizpůsobivost se staly hodnotícím faktorem a stejně jako kompatibilita mezi prohlížeči vám umožňuje snížit míru okamžitého opuštění a zvýšit konverzi webu na mobilní zařízení. Google začal brát v úvahu přítomnost mobilní verze v roce 2015 (vhodné pro mobily) a Yandex v roce 2016 a nazval hodnotící algoritmus „Vladivostok“.
  • Hlavní obsah stránky by měl být umístěn v html kód blíže k začátku, takže to bude z pohledu vyhledávače relevantnější.
  • Obsah by neměl být skrytý pomocí display:none .
  • Pokud můžete použít značky ke zvýšení relevance klíčové slovo, pak můžete také získat negativní efekt, pokud se některé značky například protínají
    1. h1-h6 & silný, b, em
    2. h1-h6 & a href=…
    3. silný, b, em & a href=…
Závěr

Při pohledu na stránky vyhledávačů můžete vidět řadu chyb souvisejících s rozložením webu, včetně chyb validace. Zde je ale třeba chápat, že si kladou zcela jiné cíle. SEO optimalizované rozvržení je vyžadováno pro weby, jejichž jedním z hlavních zdrojů návštěvnosti jsou vyhledávače, a bez ohledu na to, jak skvělé odkazy odkazují na web, bez dobré optimalizace kódu nemůžete snít o prvních pozicích.