Техніка оптимізації програмного коду Оптимізація програмного коду

При початковій розробці сайту їх власники найбільшу увагу приділяють його зовнішньому сприйняттю та швидкого запуску. Відразу чи через кілька місяців після запуску виникає питання про те, як залучити більше клієнтів. Ще через деякий час до верстальника і програміста в роботу приходять тз внутрішньої оптимізації сайту, де виявляється, що частину написаного коду потрібно переписати. Тому в цьому пості ми поговоримо про оптимізацію html, css та js коду сайту при його початковій розробці, що дозволить клієнту заощадити гроші, а розробникам нерви.

Оптимізація js та css

Спочатку розберемося з css і js. Навіщо потрібна оптимізація css і js?

Близько 50% користувачів йдуть із сайту, якщо він вантажиться більше 3 секунд і за кожної додаткової секунди конверсія сайту падає на 7%. Також швидкість завантаження сайту є одним із факторів ранжирування.

Перше з чого потрібно почати, це послухатись рекомендацій Google. Css і js код не повинен утримуватися в html кодісайту, його потрібно винести в окремі файли. Виняток є невеликі інлайнові стилі з 1-2 значеннями. Число файлів, що підключаються, потрібно максимально зменшити, в ідеальному випадку залишивши по одному підключеному css і js файлі. Підключення файлів js слід перенести в кінець сторінки (перед відображенням сторінки, браузер повинен виконати її синтаксичний аналіз і якщо при цьому він виявляє зовнішній скрипт, він повинен завантажити його, а це зайвий цикл операцій, який уповільнює показ сторінки.

Також для прискорення завантаження js, css файлів та картинок бажано використовувати кешування та стиснення у формат GZIP.

SEO-верстка сайту: оптимізація html коду або як згорнути так, щоб потім не переробляти

Для правильної майбутньої оптимізації html коду розглянемо всі теги та як вони впливають на SEO.

Блок:

- вказує назву сторінки, яка розміщується у вкладці браузера та пошукових системах. Найважливіший тег у плані впливу на ранжування сайту.

- дозволяє задати опис сторінки, що з'являється у пошуковій видачі під назвою. Має значно менший вплив на ранжування, але допомагає підвищити CTR (відношення числа кліків до показів) сторінки. Якщо мета-тег description заповнений, це не гарантує, що у видачі буде показано саме те, що там написано, оскільки пошукові системиможуть взяти опис із контенту. Але все ж таки краще налаштувати генерацію тега і не думати, яку частину тексту ПС візьмуть для опису.

- Вказує пошуковим системам, за якими запитами релевантна сторінка. Після появи цього тегу йому надали великий вплив на ранжування сторінок. Оптимізатори могли спокійно просувати сторінку з будь-яким товаром інтернет-магазину, наприклад, на запит «скачати реферат з історії» або на інші теми, які давали сайту відвідувачів, але не клієнтів. Сьогодні вплив цього тега на просування точно не відоме і дуже багато його просто ігнорують, у тому числі щоб не нашкодити сторінці.

(береться одне із значень, index або noindex, follow або nofollow) - заборона на індексацію сторінки (noindex) та заборона на індексацію вихідних посилань на сторінці (nofollow) пошуковими системами. Значення index та follow використовуються разом із значеннями заборони індексації, оскільки за замовчуванням індексація сторінок та посилань дозволена. Використовувати цей тег слід обережно, ніж побачити через деякий час нульовий трафік з пошукових систем.

- дозволяє прив'язати кілька однакових сторінок за змістом, але з різними URL-адресами, до однієї сторінки, для покращення її рейтингу. У більшості випадків використовується для динамічних сторінок, на яких розміщений однаковий контент, наприклад, сторінки сортування в каталогі товарів або при роботі з блогом, де одна стаття може знаходитися в різних розділах і мати різні URL.

і - теги дозволяють вказати на сторінках пагінації попередню та наступну сторінку для пошукових систем, якщо матеріал розбитий на кілька частин і знаходиться на різних урлах.

Блок:

- заголовки на сторінці. Тег слід використовувати 1 раз, як і вказує основний зміст сторінки, але має менший вплив на ранжування в пошуковій видачі. Як правило, для інтернет-магазинів у тезі вказується на сторінках категорій та товарів назви цих категорій ітоварів, для інформаційних сторінок — назва, яка зацікавить читача плюс ключові слова.

Теги - повинні дотримуватись логічної структури. Заголовок містити заголовки, у яких заголовки і т.д. Використовувати їх бажано тільки в текстовому змісті сторінки (наприклад, для розбиття основного контенту на сторінці, але не для блоків, які відображаються на всіх сторінках сайту). Якщо взяти до уваги, що тег допомагає підвищити значення слів при ранжируванні, укласти в нього весь текст на сайті і поправити за допомогою стилів, щоб його можна було читати, то жодної переваги це не дасть, а тільки піде на шкоду такій сторінці.

, - призначені для акцентування уваги на деяких фразах і словах в описі сторінки, статті, новини і т.д. (У тому числі підвищують значущість цих слів під час ранжирування). Не слід використовувати їх для верстки елементів сторінки, які повторюються, наприклад, на всіх товарах. Для цього краще використовувати css. Хоча і точно не відомо, чи вплив повторюваного на всіх сторінках сайту слово або фраза, всередині, наприклад, тега , але краще використовувати теги за їх призначенням. Думаю, ПС це оцінять.

- також призначений насамперед розміщення у текстовому контенті сторінки. Дозволяє зробити текст більш цікавим для прочитання, ніж підвищує довіру до всієї сторінки від пошукових систем (така ж дія надають списки, картинки, відео).

.

Бічний блок із додатковою інформацією. ...

Що ще потрібно врахувати при SEO-верстці сайту
Висновок

Заглянувши на сторінки пошукових систем, можна побачити ряд помилок, пов'язаних з версткою сайту, у тому числі помилки валідації. Але тут слід розуміти, що вони ставлять собі зовсім інші цілі. SEO оптимізована верстка потрібна сайтам, одним із основних джерел трафіку яких — пошукові системи та які б круті посилання не посилалися на сайт, без хорошої оптимізації коду про перші позиції можна не мріяти.

Раніше, коли оперативна пам'ять комп'ютера обчислювалася кілобайтами, дисковий простір десятками мегабайт, а частота процесора мегагерцями проблемами оптимізації займалися всі. Було досить складно написати гарну програму, яка швидко виконувалася на таких скромних системах. Програмісти «вилизували» кожен рядок, домагаючись максимальної ефективності.

А що зараз? Обчислювальні потужності сучасних комп'ютерівдосягли фантастичних (якщо порівнювати з тим, що було) значень, і навіть такі «монстри», як Windows 7, не в змозі їх загальмувати. І навіщо нам оптимізувати, якщо так усе нормально працює? Багато хто так і вважає. Зараз програмування дійшло такої стадії, що важливіше стала швидкість написання програм, ніж швидкість роботи. Тому що швидкість їхньої роботи буде свідомо високою. Але це стосується лише звичайних прикладним програмам. Зовсім інша справа драйвера (які мало змінилися ще з часів DOS), програми обробки аудіо, відео, та графіки, генерації паролів… У них про оптимізацію забувати в жодному разі не можна. Та й у звичайних програмахвона ніколи не буває зайвою. Куди приємніше використовувати ефективнішу програму, ніж йти до магазину за новим процесором. Або чекати, поки вона завантажиться, кому як краще. Більшість користувачів вибирають перший варіант.

Оптимізація

Оптимізація має кілька важливих моментів:

Оптимізація має бути природною. Оптимізований фрагмент коду повинен легко вливатись у програму, не порушуючи логіки її роботи. Він повинен легко вводиться в програму, змінюватись або видалятися з неї.
Оптимізація має приносити суттєвий приріст продуктивності. Оптимізована програма має працювати мінімум на 20%-30% ефективніше, ніж її неоптимізований аналог, інакше вона втрачає сенс. Навіщо мучиться і вносити зміни до вже готового коду, якщо результату це практично не дасть?
Розробка (і налагодження) критичних областей має збільшувати час розробки програми більш ніж 10%-15%.
Як вже писалося раніше, зараз на перший план виходить швидкість розробки програм, так що все ж таки не потрібно відставати від решти маси програмістів. Собі ж гірше.
Також, перед тим як писати оптимізований варіант, корисно мати його неоптимізований аналог. Зазвичай, оптимізований код дуже важкий для сприйняття, і якщо після його впровадження в програмі з'являться помилки, то, підставивши замість нього менш ефективного побратима, ми можемо визначити, хто винен у помилках.

Логіка оптимізації програмного коду

Тепер перейдемо до самої філософії оптимізації. Вважається, що критичні області слід писати на асемблері, оскільки він дає найвищу швидкість роботи. Але найчастіше результат роботи компілятора, що оптимізує, працює повільніше свого асемблерного аналога на 2%-7% (не більше 20%). І чи варто було з- за такого мізерного приросту витрачати час на розробку асемблерної реалізації? З цього випливає, що краще оптимізувати код, написаний мовою високого рівня, оптимізувати саму логіку роботи програми.

Основні постулати оптимізації:

  • Починати оптимізацію потрібно з найвужчих місць програми. Якщо ми оптимізуватимемо ті місця, де і без нашого втручання все швидко працює, то приріст продуктивності буде мінімальним. Це основний закон оптимізації, від нього ми і відштовхуватимемося, розбираючи інші.
  • Оптимізувати краще ті місця, які регулярно повторюються під час роботи. Цей закон відноситься до циклів та підпрограм. Якщо можна хоч трохи оптимізувати цикл, то робіть це не замислюючись. Якщо в одній ітерації ми досягнемо приросту в 2%, то після 1000 повторень це вже буде досить велике значення.
  • Намагайтеся не надто зловживати оптимізацією поодиноких операцій. Цей закон – своєрідне продовження попереднього. Оптимізуючи фрагмент, який буде викликаний лише один раз, ми навряд чи досягнемо відчутного приросту (але якщо ефект буде відчутним (>10%, що буває вкрай рідко), то оптимізація зайвої не буде).
  • Використовуйте асемблер тільки там, де швидкість роботи дуже важлива. Як вже писалося раніше, сьогодні асемблер не дає великого приросту швидкості. Тому використовувати його варто лише у «вузьких» місцях програми.
  • Замислюйтесь над оптимізацією. Неправильна оптимізація може навіть нашкодити програмі, збільшити час її розробки практично не зменшивши швидкість її роботи.
  • Звісно, ​​у світі надшвидких обчислень першому плані виходить швидкість розробки програм. Але все ж таки, не варто забувати про оптимізацію, яка, незважаючи на загальноприйняту думку, ніколи не йшла на другу.

    І підвищення ефективності. Серед цілей оптимізації можна вказати зменшення обсягу коду, обсягу використовуваної програми оперативної пам'яті, прискорення роботи програми, зменшення кількості операцій на введення висновку.

    Головне з вимог, які зазвичай пред'являються методу оптимізації - оптимізована програма повинна мати той самий результат і побічні ефекти тому ж наборі вхідних даних, як і неоптимізована програма. Втім, ця вимога може і не відігравати особливої ​​ролі, якщо виграш за рахунок використання оптимізації може вважатися більш важливим, ніж наслідки від зміни поведінки програми.

    Види оптимізації

    Оптимізація коду може проводитися як і вручну, програмістом, і автоматизовано. В останньому випадку оптимізатор може бути окремим програмним засобом, і бути вбудованим у компілятор (т.зв. оптимізуючий компілятор). З іншого боку, слід зазначити, що процесори можуть оптимізувати порядок виконання інструкцій коду.

    Існують такі поняття як високорівнева та низькорівнева оптимізація. Високорівневі оптимізації здебільшого проводяться програмістом, який, оперуючи абстрактними сутностями (функціями, процедурами, класами тощо) і уявляючи собі загальну модельРозв'язання задачі може оптимізувати дизайн системи. Оптимізації на рівні елементарних структурних блоків вихідного коду(циклів, розгалужень і т.д.) теж зазвичай відносять до високого рівня; деякі виділяють в окремий ( " середній " ) рівень (Н. Вірт?). Низькорівнева оптимізація проводиться на етапі перетворення вихідного коду на набір машинних команд, і найчастіше саме цей етап піддається автоматизації. Втім, програмісти на асемблері вважають, що жодна машина не перевершить у цьому хорошого програміста(при цьому всі згодні, що поганий програміст зробить ще гіршим і машини).

    Вибір ділянки, що оптимізується

    При оптимізації коду вручну існує ще одна проблема: потрібно знати не тільки, як проводити оптимізацію, але і в якому місці її застосувати. Зазвичай через різні фактори (повільні операції введення, різниця у швидкості роботи людини-оператора і машини і т.д.) лише 10% коду займають цілих 90% часу виконання (звичайно, твердження досить умоглядне, і має сумнівну підставу у вигляді закону Парето, однак, виглядає досить переконливо у Е. Таненбаума). Бо на оптимізацію доведеться витрачати додатковий часТому замість спроб оптимізації всієї програми краще буде оптимізувати ці "критичні" на час виконання 10%. Такий фрагмент коду називають вузьким місцем або пляшковим шийкою (bottleneck), і для його визначення використовують спеціальні програми- профайлери, що дозволяють заміряти час роботи різних частин програми.

    Насправді, на практиці оптимізація найчастіше проводиться після етапу "хаотичного" програмування (що включає такі речі, як "", "потім розберемося", "і так зійде"), тому є сумішшю з власне оптимізації, рефакторингу та виправлення: спрощення " химерних конструкцій – на кшталт strlen(path.c_str()), логічних умов (a.x != 0 && a.x != 0) і т.п. Для таких оптимізації профайлери навряд чи придатні. Однак для виявлення таких місць можна використовувати програми - засоби пошуку семантичних помилок на основі глибоко аналізу вихідного коду - адже, як видно з другого прикладу, неефективний код може бути наслідком помилок (як, наприклад, друкарські помилки в даному прикладі - швидше за все, малося на увазі a.x != 0 && a.y != 0). Хороший виявить подібний код і виведе попереджувальне повідомлення.

    Шкода та користь оптимізацій

    Практично до всього в програмуванні треба ставитись раціонально, і оптимізації - не виняток. Вважається, що недосвідчений програміст на асемблері зазвичай пише код, який у 3-5 разів повільніший, ніж код, згенерований компілятором (Зубков). Широко відомий вислів з приводу ранніх, досить низькорівневих (на кшталт боротьби за зайвий оператор або змінну) оптимізації, сформульований батогом: "Передчасна оптимізація - це корінь усіх бід".

    До оптимізацій, які проводять оптимізатор, у більшості немає претензій, причому іноді деякі оптимізації є практично стандартними та обов'язковими - наприклад, оптимізація хвостової рекурсії у функціональних мовах (Хвостова рекурсія - приватний вид рекурсії, який може бути приведений до виду циклу).

    Однак слід розуміти, що численні складні оптимізації на рівні машинного коду можуть сповільнити процес компіляції. Причому виграш від них може бути надзвичайно малим порівняно з оптимізаціями загального дизайну системи (Вірт). Також не слід забувати, що сучасні, "наворочені" синтаксично та семантично мови мають безліч тонкощів, і програміст, який їх не враховує, може бути здивований наслідками оптимізації.

    Наприклад, розглянемо мову Сі++ і т.зв. Return-Value Optimization, суть якої в тому, що компілятор може не створювати копії тимчасового об'єкта, що повертається функцією. Так як в цьому випадку компілятор "пропускає" копіювання, це також називається "Copy elision". Отже, наступний код:

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

    Завантаження...
    Top