This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
ru:new_rotation_faq [2018/03/18 14:38] admin [Multiniche trade] |
ru:new_rotation_faq [2023/01/19 11:10] (current) admin [Full page cache] |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== New Rotation FAQ ====== | ||
+ | ===== What is mod_rewrite ===== | ||
+ | |||
+ | mod_rewrite - это модуль для апача, которые позволяет делать " | ||
+ | |||
+ | Например, | ||
+ | |||
+ | .htaccess который создается в самом начале задает правила реврайтов. | ||
+ | |||
+ | |||
+ | Попоытка просто объяснить как это работает: | ||
+ | |||
+ | И так, как было сказано выше / | ||
+ | |||
+ | RewriteRule ^gallery/ | ||
+ | | ||
+ | это значит, | ||
+ | |||
+ | В нашем примере $1 будет равно cool-gallery. Соотвественно | ||
+ | |||
+ | Урлы вида / | ||
+ | |||
+ | href="/ | ||
+ | | ||
+ | Их всего этого следует, | ||
+ | |||
+ | ===== Почему в Rotation - Groups у меня показывает в группе 10 галер, а на странице сайта или Rotation - List thumbs 20 ===== | ||
+ | |||
+ | 1 галера может находится в больше чем 1 групп (категории). Это видно в редактировании любой тумбы - у нее есть main группа (одна) и ext группы (много). Rotation - groups считает только по main. Это сделано что б было ясно сколько точно уникальных галер. | ||
+ | |||
+ | Например, | ||
+ | Rotation - Stats покажет что у нас конкретно 2 галеры , одна в группе А и одна в группе Б. | ||
+ | |||
+ | На сайте же в каждой из групп будет видно по 2 галеры. | ||
+ | |||
+ | |||
+ | ===== Custom gallery with my local content ===== | ||
+ | |||
+ | - Залить куда угодно тумбы | ||
+ | - при и импорте указать Image List = перечисление урлов картинок | ||
+ | ===== Что такое Init cats в Rotation - Special или почему я добавил категорию в админке, | ||
+ | |||
+ | Пересчет категорий, | ||
+ | |||
+ | Если вы добавили новую категорию - она появится максимум через 15 минут, если надо быстрее - жмите эту кнопку. | ||
+ | |||
+ | ===== What is cache ===== | ||
+ | |||
+ | Скрипт не генерит статические html страницы (см выше вопрос по mod_rewrite), | ||
+ | |||
+ | Время кеша задается в common.php CACHE_TIME, начиная с апдейта 46 время в common.php можно не указывать, | ||
+ | |||
+ | Дабы посмотреть какую-то страницу без кеша надо добавить в урле параметр skip_cache=true. Например, | ||
+ | |||
+ | Начиная с апдейта 46 появила recreate cookie - Rotation - Special - Recreate visited pages - скрипт ставит секретную куку вашему браузеру на 10 часов (можно снять куку в любой момент там же). Если вы зайдете с этой кукой на любую страницу вашего сайта, эта страница будет пересоздана (те сброшен кеш именно для этой страницы). Бывает полезно при изменении дизайна какой-то одной определенной страницы. | ||
+ | |||
+ | Те разница между skip_cache и recreate cookie | ||
+ | |||
+ | Еще раз: страница создава в 00 минут. Время кеша 10 минут. в 05 вы меняете дизайн. | ||
+ | если вы в 05 посмотрели его со skip_cache - то увидите новый дизайн, | ||
+ | если вы в 05 открыти страницу с recreate cookie - то пользователь который пришел в 06 увидит в новом дизайне. | ||
+ | |||
+ | |||
+ | ===== Cache Engines (New) ===== | ||
+ | |||
+ | Базовый принцип работы движка - сгенерить нужную страницу, | ||
+ | |||
+ | **Файловый** | ||
+ | Базово кеш хранится в файлах (scj/cache - файловый кеш). | ||
+ | Плюсы - он работает везде и сразу. | ||
+ | Минусы - это именно файловый кеш, он он не так быстр, не так эффективно кешится системой как хотелось бы и приходится отдельлно заботиться о размере папки с кешем. | ||
+ | |||
+ | **Memcached** | ||
+ | В свое время это конечно был большой шаг вперед в плане кеширования. | ||
+ | Плюсы - все его знают, админы без проблем ставят на хостиинг, | ||
+ | Минусы - никакого понимания о реально занимаемой памяти получить практически невозможно, | ||
+ | |||
+ | Все данные одинаково прокешены - не важно это наиболее используемые или использзуемые раз в час - они все висят одинаово в памяти и сервис не умеет их скинуть на диск например. | ||
+ | |||
+ | В мемкешем невозможно прибить кещ для одного сайта. У сайтов общее пространство кеша и прибивая кеш - прибивается кеш для всех сайтов сразу. Можно конечно руками запустить несколько инстансов мемкеша на разных портах, | ||
+ | |||
+ | Как установить: | ||
+ | |||
+ | - попросить админа поставить Memcached | ||
+ | - прописать в конфиге мемкеш | ||
+ | < | ||
+ | $config[' | ||
+ | $config[' | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | **Поэтому сейчас появились новые движки которые рекомендуются к использованию** | ||
+ | |||
+ | В новых движках которые базово называются NoSQL решения существует намного больше возможностей нежели будет описано ниже, но для текущих целей кеширования будут описаны базовые. | ||
+ | |||
+ | Решение на которое наиболее просто перейти - **Couchbase** | ||
+ | **CouchBase** - это продолжение MemBase, видимо ближайщего потомка memcachedb, который в свою очередь родом из memcached. | ||
+ | |||
+ | Главное - от вас не требуется практически никаких движений дабы начать его использовать. Вы ставите CouchBase и он работает точно так же как мемкеш. Те для того что бы начать его использовать надо | ||
+ | - попросить админа поставить CouchBase | ||
+ | - в пхп добавить extension couchbase | ||
+ | - прописать в config.php | ||
+ | < | ||
+ | $config[' | ||
+ | $config[' | ||
+ | $config[' | ||
+ | $config[' | ||
+ | $config[' | ||
+ | </ | ||
+ | |||
+ | и все, вы уже используете современную версию мемкеш. Вы можете это использовать даже с версией 48-49. | ||
+ | |||
+ | **Чем это лучше чем memcached** | ||
+ | * Нет понятия " | ||
+ | * Проэкспаренные данные исчезают с диска\памяти сами, не надо самостоятельно заботиться об этом. | ||
+ | * Можно так же как и с мемкешем ограничить кол-во памяти выделенное под кеш, но при этом кеш не будет ограничен этим кол-вом. Даже если данных будет больше - оно оставит самые активные в памяти, | ||
+ | * Можно быстро и просто масштабировать систему из вебадминки | ||
+ | * Можно легко завести несколько кешей. В варианте Couchbase - это как несколько мемкешей, | ||
+ | * При перезде кеш легко скопировать поскольку копируется не масса мелких файлов как с файловым кешем, а одна база. | ||
+ | |||
+ | |||
+ | **Redis** - отдельный написанный с 0 проект NoSQL базы. Смысл его для наших целей практически тот же (в реальности couchBase это уже больше document oriented хранилище, | ||
+ | |||
+ | Для того что бы начать его использовать надо | ||
+ | - попросить админа поставить Redis | ||
+ | - попросить его же поставить модуль redis для пхп | ||
+ | - прописать в config.php | ||
+ | < | ||
+ | $config[' | ||
+ | $config[' | ||
+ | $config[' | ||
+ | $config[' | ||
+ | |||
+ | если redis висит на сокете то выглядеть будет примерно так | ||
+ | |||
+ | $config[' | ||
+ | $config[' | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | и все. | ||
+ | |||
+ | В данным конфиге кроме понятных полей есть несколько новых. redis_password - в большинстве случаев не актуально посколько сейчас все на dedicated servers. | ||
+ | redis_database - у Redis нет буквенных названий баз, а есть номера. те если у вас несколько сайтов - вы можете указать каждому сайту свой номер. Но можно и не указывать и использовать одну базу для всех сайтов. Разница будет в том, что если вы захотите скинуть весь кеш и у вас используется одна база для всех сайтов - кеш удалится для всех сайтов. Если же у каждого сайта будет своя база - кеш скинется для одного. | ||
+ | |||
+ | **Чем это лучше чем memcached** | ||
+ | * Все теже плюсы и в случае couchbase. | ||
+ | * Redis более заточенное под кеш решение, | ||
+ | |||
+ | |||
+ | |||
+ | ===== Где хранится кеш ? (memcache) ===== | ||
+ | |||
+ | По умолчанию используется файловый кеш (храниться в / | ||
+ | |||
+ | $config[' | ||
+ | $config[' | ||
+ | |||
+ | адрес и порт могут меняться (уточните у вашего админа), | ||
+ | |||
+ | Имеет смысл настроить memcache на работу через сокт - это быстрее. В этом случае конфиг будет примерно такой | ||
+ | | ||
+ | $config[" | ||
+ | $config[" | ||
+ | |||
+ | |||
+ | Есть несколько ньансов: | ||
+ | - файловый кеш не такой медленный как можно подумать. Смысл в том, что работа с ним эффективно кешируется системой и разница не глобальна | ||
+ | - при этом кеш перманентно лежит на диске и в случае перегрузки сервера никуда не пропадет и скрипту не придется по новой генерить весь кеш по новой. Те ситуация такая: у нас много трафа, вдруг что-то пошло не так и мы перегружаем сервак. После поднятия сервака какая-то часть сайта уже есть в кеше и все продолжает работать, | ||
+ | - если вы все же ставите мемкеш - убедитесь, | ||
+ | - размер мемкеша должен быть достаточным, | ||
+ | |||
+ | ===== Почему у меня в админке и на такой-то странице сайта тумбы стоят в разном порядке ===== | ||
+ | |||
+ | При одинаковой сортировке порядок должен быть одинаковым с учетом следующих ньансов: | ||
+ | |||
+ | 1. в админке показывает имено так как оно есть в базе по цтр например, | ||
+ | |||
+ | 2. Новая тумба может получить неожиданно большой цтр. Например, | ||
+ | |||
+ | |||
+ | ===== Почему у меня на старнице пустое облако тагов ===== | ||
+ | |||
+ | Облако тагов генерится из активных тагов раз в 30 минут и кладется в кеш. Соответственно варианты: | ||
+ | |||
+ | * нет активных тагов | ||
+ | * не прошло 30 минут | ||
+ | * вы прибили кеш | ||
+ | |||
+ | |||
+ | ===== Тумбы (галереи) не удаляются ===== | ||
+ | |||
+ | * ранее была проблема при удалении большого кол-ва тумб, например у спонсора 10к тумб, вы удаляете спона, скрипт пыдается это удалить сразу, но не успевает - получается таймаут. Это усугубляется если надо удалить не просто тумбы, а кастом гали. | ||
+ | * сейчас тумбы удаляются по крону. Те когда вы жмете в админке " | ||
+ | * если надо удалить " | ||
+ | * < | ||
+ | * единственое исключение: | ||
+ | |||
+ | |||
+ | Скорость удаления гадер сложно прогнозируема и зависит от кол-во и нагрузки сервака, | ||
+ | |||
+ | ===== Сколько надо траффика чтобы отротировать тумбы ===== | ||
+ | |||
+ | Не обязательно отротировать все до конца, чтобы прода была хорошая, | ||
+ | |||
+ | Тумба считается отротированной, | ||
+ | Допустим на странице - 200 тумб, а % of test places on page по дефолту 15, те из 200 мест на старнице новые будут показываться на 30 местах. | ||
+ | Те каждый заход на старницу это +30 показов для новых тумб. | ||
+ | Например у нас 10 000 тумб, что б их отротировать нам надо 10000*500 = 5000000 показов. Одиз заход на старницу - это 30 показов, | ||
+ | |||
+ | ===== Not every thumb of a gallery is tested ===== | ||
+ | |||
+ | Если не считать банальной нехватики трафика, | ||
+ | |||
+ | Мы выводим ИД 1 - 15 как 15 лучших (а там пока цтр и показы получила только пурвая тумба с галеры). А потом 5 тестовых - тут мы можем взять тумбу номер 2 с галер ИД 16-20 | ||
+ | |||
+ | Получилось так что эти тумбы набрали меньше чем тумба 1 галер ИД 1-15, мы берем например 3ю тумбу с галер ИД 16-20. | ||
+ | |||
+ | |||
+ | Таким образом получается что у галер ИД 1-15 показы есть только у пурвой тумбы. Когда их ЦТР будет меньше чем ЦТР других - их " | ||
+ | |||
+ | У них там же есть возможность быть показанными на странице 2 пагинации, | ||
+ | |||
+ | |||
+ | ===== Параметр out.php &link= ... ===== | ||
+ | |||
+ | Изначально у out.php есть параметр & | ||
+ | |||
+ | |||
+ | ===== Что такое тумбы категории ===== | ||
+ | |||
+ | Тумба категории - это по-дефолтлу лучшая тумба из категории. Однако, | ||
+ | |||
+ | ===== How to create a master site from a slave ===== | ||
+ | |||
+ | - Делаем дамп базы мастера | ||
+ | - Смотрим в rot_linked_db номер слейва, | ||
+ | - Отсоединяем нужный слейв от мастера | ||
+ | - Заливаем в базу бывшего слева (дамп) из пункта 1, но только таблицы rot_* | ||
+ | - Удаляем все rot_gallery_stats* кроме номера из п2 | ||
+ | - rot_gallery_statsХ переименовываем в rot_gallery_stats1 | ||
+ | - В rot_linked_db удаляем все записи кроме записи с ИД 0 | ||
+ | |||
+ | |||
+ | |||
+ | ===== Gallery statuses ===== | ||
+ | |||
+ | Pool - Active - Old - фактически надо для работы Shift settings в группах ротации. Смысл в том, что бы наполнять сайт автоматически. Те вы добавили много галер в статус pool, поставили добвлять раз в день 10 галер и сайт их доабвляет из пула в активные, | ||
+ | |||
+ | На сайте в листинге показываются галеры только со статусом active. | ||
+ | |||
+ | preload - галеры добавляются в Preload (в админке) что б вы могли выбирать какие из сграбеленных тумб по итогу будут на сайте. Те которые вы не выберете - будут удалены. | ||
+ | |||
+ | to_grab - когда галеры добавляются в базу они получают этот статус прежде чем граббер создаст тумбы для них. В момент создания тумб они получают статус processing. to regrab - галера ожидает реграба. | ||
+ | |||
+ | to delete - галера ожидает удаления. Часо на удаление помечается много галер, и мгновенно удалить их невозможно, | ||
+ | |||
+ | grab error - если при грабе тумбы что-то пошло не так галера или удаляется или получает статус grab error в зависимости от ваших настроек. | ||
+ | |||
+ | Banned - урл остается в базе и не будет добавлен снова. Как и grab error это имеет смысл только в том случае, | ||
+ | |||
+ | Inactive (и аналог hidden в версии 1.X ) - галера не показывается в листинге, | ||
+ | |||
+ | Аналогичная опция есть у Gallery Checker. | ||
+ | |||
+ | Точный эффект от этого для СЕ - неизвестен. | ||
+ | |||
+ | |||
+ | ===== Как импортировать очень большой дамп ===== | ||
+ | |||
+ | |||
+ | Версия 2.* умеет добавлять большие файлы через importset самостоятельно (теоретически любого размера). Просто добавляете урл и он постепенно все добавит. | ||
+ | |||
+ | |||
+ | ===== eval()' | ||
+ | |||
+ | Если при заходе на любую страницу у вас пишет что-то вроде "Parse error: some error, in / | ||
+ | |||
+ | По опыту наиболее частой проблемой является несоблюдение ковычек. http:// | ||
+ | |||
+ | |||
+ | ===== Crop Profiles ===== | ||
+ | |||
+ | Это наборы параметров для обработки тумб. | ||
+ | |||
+ | Если вам надо размер только по одной стороне, | ||
+ | |||
+ | Image Command - это команда которая применяется ДО того как сделана тумба. единственный параметр {FILE} - это текущая картинка. Например, | ||
+ | |||
+ | / | ||
+ | |||
+ | Thumb Command - аналогично только для уже сделанной тумбы. | ||
+ | |||
+ | |||
+ | Face Detect - см [[FaceDetect]] | ||
+ | ===== How to grab custom galleries ===== | ||
+ | |||
+ | Иногда по какой-то причине вы не хотите делать другой сайт слейвом, | ||
+ | |||
+ | Лучше сделать так: | ||
+ | - создайте отдельный темпелйт, | ||
+ | - Rotation - export даст вам урлы вида http:// | ||
+ | - в любом редакторе поиск\замена и у вас http:// | ||
+ | - и уже эти урлы отдаете на граб в другой скрипт | ||
+ | |||
+ | ===== How to copy rotation info ===== | ||
+ | |||
+ | Данные по ротации хранятся в таблицах rot_gallery_stats*, | ||
+ | |||
+ | - посмотреть какой ИД у слейва с которого копируем | ||
+ | - какой ИД слейва на который копируем | ||
+ | - скопировать(!) таблицу условно rot_gallery_stats2 в rot_gallery_stats3 | ||
+ | |||
+ | |||
+ | ===== Category tags does not work ===== | ||
+ | |||
+ | Проблема обычно в использовании тага категории на страницах галеры, | ||
+ | |||
+ | |||
+ | ===== Group Deactivation (Group Exclusion) ===== | ||
+ | |||
+ | Допустим у нас есть мастер на котором группы А и Б. Мы подключаем слейв на котором деактивируем группу Б. При выборке для слейва у нас есть 2 варианта: | ||
+ | |||
+ | * выборка все галеры КРОМЕ группы Б | ||
+ | * или все галеры из группы А | ||
+ | |||
+ | на первый взгляд это одно и тоже. Однако если у нас галера состоит в обоих группах то в одном случае она попадет в выборку, | ||
+ | |||
+ | Поэтмоу в сетингах есть настройка Group Exclusion | ||
+ | |||
+ | - Hard = выборка идет как " | ||
+ | - Soft = выборка идет по 2му варианту, | ||
+ | |||
+ | |||
+ | Когда это надо: вариант hard - это когда у нас условно 3 группы: | ||
+ | |||
+ | |||
+ | |||
+ | ===== It does not grab this gallery | ||
+ | |||
+ | Некоторые страницы могут быть сделаны таким образом, | ||
+ | |||
+ | |||
+ | В этом случае можно сделать тн гейт что бы преобразовать ее в более понятный вид: | ||
+ | |||
+ | * например, | ||
+ | * мы делаем файл http:// | ||
+ | * импортируем дамп с галерами на http:// | ||
+ | * ваш скрипт gate.php получается параметр URL и может оттуда вытянуть картинку которую смарт будет воспринимать как обычную картинку и добавит в базу | ||
+ | |||
+ | |||
+ | **Пример: | ||
+ | |||
+ | Условно у нас есть галера http:// | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | |||
+ | стандартным парсер скрипта такое разобрать не может, поэтому мы делаем гейт http:// | ||
+ | |||
+ | < | ||
+ | <?php | ||
+ | |||
+ | if (!isset($_GET[' | ||
+ | |||
+ | if ($html = file_get_contents($_GET[' | ||
+ | preg_match_all(" | ||
+ | |||
+ | $image_num = (isset($_GET[' | ||
+ | |||
+ | if ($out[1][$image_num-1]) { | ||
+ | header(" | ||
+ | echo file_get_contents($out[1][$image_num-1]); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | проверяем что гейт работает | ||
+ | |||
+ | http:// | ||
+ | http:// | ||
+ | |||
+ | по этим урлам в браузере должны отобразиться соответственно http:// | ||
+ | |||
+ | Теперь импортируем эту галеру, | ||
+ | |||
+ | http:// | ||
+ | |||
+ | Как тут видно урл будет http:// | ||
+ | |||
+ | Тк мы не знаем сколько точно будет картинок на галере, | ||
+ | |||
+ | |||
+ | **Вариант 2: замена на стадии импорта** | ||
+ | |||
+ | Допустим у нас есть import set http:// | ||
+ | |||
+ | url|thumb_url|desc | ||
+ | |||
+ | и мы решили делать кастом галеры из этого контента, | ||
+ | |||
+ | Делаем гейт - вариант 2: | ||
+ | * gate.php? | ||
+ | * гейт получает урл фида, грабит его, обрабатывает каждую строку как галеру и добавляет поле с картинками для кастом галеры, | ||
+ | * мы добавляем в импорт сет сразу gate.php? | ||
+ | |||
+ | |||
+ | **Вариант 3: импорт с использованием XPath** | ||
+ | |||
+ | Например, | ||
+ | |||
+ | * Если не в курсе что такое xpath - надо почитать, | ||
+ | * открываем ваш любимый браузер - developer tools | ||
+ | * открываем страницу, | ||
+ | * получаем что-то вроде / | ||
+ | * добавляем как паттерн url|flv_url|flt_thumb_url , отмечая те поля в которых надо вытянуть Xpath как XPath:/.... в нашем варианте получается что-то вроде | ||
+ | |||
+ | http:// | ||
+ | | ||
+ | если вставить эту строку в импорт появиться кнопка Test Xpath. Если на нее нажать, | ||
+ | | ||
+ | Таким образом можно добавить сколько угодно урлов вида | ||
+ | |||
+ | < | ||
+ | http:// | ||
+ | http:// | ||
+ | http:// | ||
+ | </ | ||
+ | |||
+ | и таким образом галеры будут добавлены. Но это конечно не очень красиво. Поэтому можно добавить Import Replacements где | ||
+ | |||
+ | url contains = tubesite.com | ||
+ | replace FLV Url = XPath:// | ||
+ | |||
+ | Таким образом можно будет импортировать просто http:// | ||
+ | |||
+ | Как обычно наилучший способ - это добавить одну галеру и смотреть лог граба. | ||
+ | |||
+ | **Вариант 4: ааааа, все сложно, | ||
+ | |||
+ | Если вы не хотите делать самостоятельно вы всегда можете заплатить и работу сделают за вас. Сделать гейт или скопировать xpath в браузере сможет любой школьник. Если не хотите обращаться к школьникам - обращайтесь к суппорту с конретными сайтами. Ориентировочная цена - $100 за сайт. | ||
+ | |||
+ | |||
+ | ===== Lazy load, load on scroll, pinterest and so on ===== | ||
+ | |||
+ | Все эти варианты основаны на том, что при скроле до конца страницы подгружается новый контент и у пользователя не перегружается страница, | ||
+ | |||
+ | Выглядит это так: условно темплейт index в котором 50 тумб | ||
+ | |||
+ | < | ||
+ | <thumb num=1-50> | ||
+ | <a href='/ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | В темплейт мы добавляем например jquery.wookmark (не единственный вариант конечно) как на http:// | ||
+ | |||
+ | по достижении конца страницы он должен подгрузить дополнительный контент, | ||
+ | |||
+ | var P_BASE = '/? | ||
+ | | ||
+ | | ||
+ | как видно подгружается темплейт index_scroll_ajax и указывается & | ||
+ | |||
+ | Темплейт index_scroll_ajax где мы выводим по 10 тумб | ||
+ | |||
+ | < | ||
+ | <thumb num=1-10> | ||
+ | <a href='/ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Duplicate test thumbs | ||
+ | |||
+ | Проблема проявляется на базе где еще тумбы вообще не набрали цтр\показы: | ||
+ | |||
+ | Например у нас на странице 3 позиции для | ||
+ | тестовая позиция -1 на страницу, | ||
+ | На странице 1: берем 2 тумбы по цтр, тк у всех цтр 0 получаются тумбы 1 и 2. | ||
+ | Берем первую тестовую - 3. Получается 1 2 3. | ||
+ | |||
+ | Страница 2 - берем со сдвигом на страницу , те следующие 3 по цтр, но опять же тк цтр не то это получаются 4 5 подряд. И теперь надо одна тестовая - смотрим с самого начала , а у тумбы 1 нет показов, | ||
+ | |||
+ | Как только база набирает немного цтр - получается что по цтр достаточно тумб что б набрать страницу и таким образом тумбы не повторялись. | ||
+ | |||
+ | ===== Fast Navigation | ||
+ | |||
+ | Если у вас большая база то имеет смысл заменить < | ||
+ | |||
+ | Разница в том, что если у нас есть навигация, | ||
+ | |||
+ | Если же у нас только ссылки на следующую\предыдущую страницы то ничего считать не надо в базе. | ||
+ | |||
+ | Обратите внимание, | ||
+ | |||
+ | ===== User Thumbs ===== | ||
+ | |||
+ | Допустим у вас в импорте много тумб, но трафа что бы их отротировать все недостаточно (так бывает в большинстве случаев). Но хотелось бы оставить все тумбы для ролинга тумб. Для этого в импорте есть вариант с User Thumbs - смысл его в том, что указанные тумбы скачиваются, | ||
+ | |||
+ | Те мы можем импортить как URL|THUMB_URL|USER_THUMBS | ||
+ | |||
+ | Есть ньюанс - если в импорте нет возможности сделать 2 поля в тумбами, | ||
+ | |||
+ | Таким образом база не растет и не надо ротировать лишние тумбы. | ||
+ | |||
+ | При этом надо понимать, | ||
+ | |||
+ | В темплейте урл к каталогу с юзер тумбами для данной галеры можно получить тагом | ||
+ | |||
+ | < | ||
+ | | ||
+ | | ||
+ | | ||
+ | ===== Filter request parameters ===== | ||
+ | |||
+ | Например, | ||
+ | |||
+ | Добавляем в common.php | ||
+ | |||
+ | |||
+ | if (isset($_GET[' | ||
+ | | ||
+ | | ||
+ | и это будут только латинские символы | ||
+ | |||
+ | Так же есть опция "Log empty search queries " и если по запросу ничео не найдено то логгить его не будет. | ||
+ | ===== Multiniche trade ===== | ||
+ | |||
+ | Рассмотрим что есть в скрипте для поддержания мультинишевых сайтов с новой ротацией, | ||
+ | |||
+ | **Входящий редирект на нишевую страницу** - скрипт может редиректить траффик с трейдера сразу нужную нишу у вас на сайте ([[Tube Cms Pages# | ||
+ | |||
+ | **Отправка клика на нишемвую страницу трейдера** - если трейдер не можетавтоматически редиректить ваши хиты на нужную старницу, | ||
+ | - редактируем темпелйты и делаем линки вида / | ||
+ | - либо включить опцию ([[Tube Cms Pages# | ||
+ | далее в настройках каждого терйдера можно задать Special Urls для каждой группы. Те если для группы А у трейдера указан урл http:// | ||
+ | |||
+ | |||
+ | **Note** про что забывают при разборе этих функций | ||
+ | |||
+ | **Трейдер 1 в группе А, однако я вижу в рефах трейдера 1 рефы с моего сайта с категории B - трейдит не по группам !** | ||
+ | Обычно топ трейдеров составляется общий, а не по группам и этот топ инклудится на всех страницах сайта. Те на странице B так же будет топ ВСЕХ трейдеров, | ||
+ | |||
+ | Кроме этого если в группе A например 2 трейдера, | ||
+ | |||
+ | |||
+ | |||
+ | ====== Performance ====== | ||
+ | |||
+ | Ротация предполагает наличие большого кол-ва страниц. | ||
+ | |||
+ | Вот обычная ситуация: | ||
+ | |||
+ | Понятно, | ||
+ | |||
+ | Кроме этого есть тн " | ||
+ | |||
+ | |||
+ | Сколько сервак выдержит трафа: после того как создан кеш страницы отдаются условно мгновенно. Выглядит это так: 1 человек пришел на новый сайт на индекс, | ||
+ | |||
+ | Те если у нас условно 1 сайт то скажем 50к или 500к трафа - не имеет значения, | ||
+ | |||
+ | Но если у вас 50 сайтов по 10к трафа - по нагрузке это не одно и тоже что 1 сайт на 500к, потому что для 50 сайтов надо создать в 50 раз больше страниц, | ||
+ | |||
+ | Так же прямым образом влияет размер базы на нагрузку: | ||
+ | |||
+ | Переводы и слейв сайты: технически это как еще 1 сайт, тк что перевод, | ||
+ | |||
+ | |||
+ | Ответить на вопрос " | ||
+ | |||
+ | Тут стоит помнить о том, что сервак перегружается лавинообразно. Это значит что не будет такого что работает например сервак на 100% нагруженный и просто все начало немного тормозить. В какой-то момент запросы накапливаются и сервак падает. Проще всего это представить как вы раскручиваете двигатель машины, | ||
+ | ====== Performance Log ====== | ||
+ | |||
+ | Часто в темплейты включат много своего PHP кода и в какой-то момент становится не совсем ясно, что конкретно больше грузит сервак: | ||
+ | |||
+ | Performance Log | ||
+ | Writes performance info into logs/ | ||
+ | Adds some load at HDD as it writes each hit. | ||
+ | |||
+ | При включении он пишет в logs/ | ||
+ | |||
+ | Основной плюс в том, что позже в Maintenance -Logs вы можете посмотреть этот лог и скрипт автоматически сгруппирует показатели что бы вы могли видеть общую статистику, | ||
+ | |||
+ | |||
+ | |||
+ | ====== Custom gallery URL Refresh ====== | ||
+ | |||
+ | Классический урл выглядит примерно как http:// | ||
+ | |||
+ | Автоматически избежать этого невозможно тк рефреш - это когда браузер посылает точно такой же запрос и отличить на стороне скрипта никак нельзя. | ||
+ | |||
+ | В целом я не считаю это проблемой тк рефрешит галеру только сам вебмастер в процессе дизайна, | ||
+ | |||
+ | https:// | ||
+ | |||
+ | вместо alert(" | ||
+ | |||
+ | ====== Site Internationalisation (i18n) ====== | ||
+ | |||
+ | Перевод сайта на другие языки. | ||
+ | |||
+ | |||
+ | ===== Site menu ===== | ||
+ | |||
+ | Довольно просто сделать перевод меню сайта (те ссылок типа Most Popular, Order By date и прочее) на другие языки. Например у нас есть фраза " | ||
+ | |||
+ | |||
+ | Rotation - CMS - TPL Custom Vars создаем переменную most_popular, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====== Case Sensitive URLs ====== | ||
+ | |||
+ | По стандарту урлы - case sensitive, те большая или маленькая буква - имеет значение. Однако, | ||
+ | |||
+ | Однако бывает, | ||
+ | |||
+ | ALTER TABLE `rot_gallery_info` CHANGE `url` `url` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL; | ||
+ | ALTER TABLE `rot_gallery_info` CHANGE `source_url` `source_url` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL; | ||
+ | | ||
+ | и помнить что после этого урлы из примера выше станут разными и при поиске урла надо будет смотреть на регистр букв. | ||
+ | |||
+ | |||
+ | ====== How to move thumbs ====== | ||
+ | |||
+ | По умолчанию тумбы сохраняются в / | ||
+ | |||
+ | - физически переместить тумбы из scj/thumb в новое место | ||
+ | - сменить URL to thumbs в CJ settings - grabber settings | ||
+ | |||
+ | ====== Full page cache ====== | ||
+ | |||
+ | Для высоконагруженных сайтов значительно помогает кешить страницы в уже выполненном виде. Например, | ||
+ | |||
+ | < | ||
+ | |||
+ | <thumb num=1-2> | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | <?php | ||
+ | echo "date: " . date(" | ||
+ | ?> | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Скрипт парсит темплейт и заменяет данными из базы и кладет в кеш, что б для следующего серфера, | ||
+ | |||
+ | < | ||
+ | |||
+ | / | ||
+ | / | ||
+ | |||
+ | <?php | ||
+ | echo "date: " . date(" | ||
+ | ?> | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | при этом пхп код кешится в исходном виде. Те для каждого серфера этот пхп код будет выполняться. | ||
+ | |||
+ | В большинстве случаев это мелочи по нагрузке, | ||
+ | |||
+ | < | ||
+ | |||
+ | / | ||
+ | / | ||
+ | |||
+ | date: 2023-01-01 | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | В большинстве случаев - это ок, тк результат выполнения кода одинаковый для всех серферов. | ||
+ | |||
+ | Однако бывают редкие ситуации когда в темплейте есть код, который должен быть выполнен для каждого юзера тк зависит например от текущего IP пользователя. Для этого есть опция | ||
+ | |||
+ | $config[' | ||
+ | |||
+ | |||
+ | В этом случае в темплейте можно использовать таг | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <?php | ||
+ | echo "user IP: " . $_SERVER[' | ||
+ | ?> | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | и именно этот код не будет закеширован. | ||
+ | |||
+ | |||
+ | Например темплейт | ||
+ | |||
+ | < | ||
+ | |||
+ | <thumb num=1-2> | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | <?php | ||
+ | echo "Rand: " . rand(0, 100); | ||
+ | ?> | ||
+ | |||
+ | < | ||
+ | <?php | ||
+ | echo "user IP: " . $_SERVER[' | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | будет закешен как | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | / | ||
+ | / | ||
+ | |||
+ | Rand: 22 (тут надо обратить внимание что этот пхп код закешен в выполненном виде) | ||
+ | |||
+ | <?php | ||
+ | echo "user IP: " . $_SERVER[' | ||
+ | |||
+ | // а тут пхп код в исходном виде и будет выполнен для каждого серфера | ||
+ | |||
+ | ?> | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Надо что надо обратить внимание при изменении темплейта под full_page_cache. Например, | ||
+ | |||
+ | < | ||
+ | |||
+ | <?php | ||
+ | $img_src_hash = md5($_SERVER[' | ||
+ | ?> | ||
+ | |||
+ | < | ||
+ | |||
+ | some more HTML | ||
+ | |||
+ | </ | ||
+ | |||
+ | закешировать полностью мы не можем тк этот код должен быть разным для каждого серфера. Что бы хэш не кешировало хочется сделать | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | <?php | ||
+ | $img_src_hash = md5($_SERVER[' | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | some more HTML | ||
+ | |||
+ | </ | ||
+ | |||
+ | однако тут надо обратить внимание на то, что get_img.php? | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | <?php | ||
+ | $img_src_hash = md5($_SERVER[' | ||
+ | ?> | ||
+ | |||
+ | < | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | some more HTML | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | **Вероятные ошибки** | ||
+ | |||
+ | Нельзя | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | <?php | ||
+ | $img_src_hash = md5($_SERVER[' | ||
+ | ?> | ||
+ | |||
+ | some HTML | ||
+ | |||
+ | < | ||
+ | |||
+ | Another code | ||
+ | |||
+ | </ | ||
+ | |||
+ | more HTML | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | some more HTML | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | В этом случае это очевидно, | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | <?php | ||
+ | $img_src_hash = md5($_SERVER[' | ||
+ | ?> | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | some more HTML | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | в том темплейте который вы инклудите - так же есть < |