Відповідь, що так, функції теми_mod будуть повільнішими, але не суттєво, а переваги переважають за різницями.
Теми модів зберігаються як опції. Отже, по суті, тематичні функції - це обгортки навколо функцій опцій.
По-перше, зрозумійте, що параметри теми_mod зберігаються як масив в одному варіанті, присвоєному конкретному імені теми. Отже, якщо я це роблю:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
Тоді те, що я насправді отримую в базі даних, - це єдиний рядок параметрів з назвою topic_mods_themename, який містить серіалізований масив з ('aaa' => 123, 'bbb' => 456) у ньому.
Тепер get_theme_mod
буде повільніше, тому що він насправді здійснює два get_option
дзвінки. По-перше, він отримує назву теми. Потім він отримує theme_mods_themename
варіант. Так ось, це 50% втрати швидкості. Решта виконаної роботи полягає в основному у фільтрах, у тому, що є додатковий виклик фільтра, але якщо у вас є щось на цьому фільтрі, це нібито несуттєво.
Зверніть увагу, що система параметрів зберігає отримані дані в об'єктному кеші, тому тут не здійснюються багаторазові дзвінки до бази даних. Лише перше використання призводить до звернення до бази даних.
set_theme_mod
Буде трохи повільніше , тому що вона робить ті ж два отримати варіанти викликів, то він робить ще один get_option
дзвінок , щоб отримати назву теми ще раз, а потім він робить update_option
з повним набором опцій в даний час змінилися. Це спричиняє оновлення бази даних, і той факт, що вона надсилає набагато більше даних, справді може бути причиною помітного сповільнення. Оновлення кількох байтів швидше, ніж оновлення великого рядка. Але зазвичай не так, як ви помітили. Якщо у вас є цілий чорт з великою кількістю налаштувань ...
Тематичні функції мод, ймовірно, пов'язані з оптимізацією в цілому, безумовно, але все ж слід використовувати їх замість get_option, і тому, що дочірні теми.
Проблема з прямим використанням рядків опцій полягає в тому, що ви використовуєте їх безпосередньо та використовуєте конкретні імена ключів для своїх параметрів.
Якщо у мене є тема під назвою "AAA", і я роблю дочірню тему під назвою "BBB" для використання на іншому веб-сайті, то моя тема "AAA" може використовувати параметр з назвою "example". Коли я оновлюю один веб-сайт, і він оновлює свою опцію, то цей самий варіант буде застосовано до моєї дочірньої теми. Що робити, якщо я не хотів цього робити? Що робити, якщо я хотів, щоб дочірня тема використовувала інший набір параметрів параметрів?
Модні теми, включаючи власне назву теми (а не значення з твердим кодом) як частину ключа, забезпечують, щоб кожна "тема" на сайті використовувала власний набір налаштувань. Я можу перемикатися вперед і назад, і налаштування не передаються між ними, вони залишаються як я їх встановив. Простіший, очевидніший, інтуїтивніший.
І якщо якась майбутня зміна ядра чи плагін змінить те, як працюють theme_mods, ви автоматично отримаєте переваги від цього без будь-яких змін. Пакувальники завжди йдуть повільніше, це неминуче, це природа обгортки. Тим не менш, ти все ще пишеш PHP-код, а не машинною мовою. Ми використовуємо подібні обгортки для спрощення речей та окремої функціональності. Теми не повинні знати або дбати про те, як зберігаються їх параметри в базі даних або як працює іменування. Функції theme_mod забезпечують більш просте рішення, яке є більш чистим.
/wp-includes
на те,option.php
деget_option()
визначено, іtheme.php
деget_theme_mod()
визначено, ви можете побачити, що останній насправді викликаєget_option()
себе, діючи як розширення його, що також застосовує будь-які необхідні фільтри. Можна пояснити, чому це повільніше.