ЧПУ, внедрение на работающем проекте

Статус
В этой теме нельзя размещать новые ответы.

Sunday

Cōgitō ergō sum
Регистрация
13 Дек 2009
Сообщения
823
Реакции
342
Есть сайт, имеющий ссылки вида
Код:
site.ru/1443.html
Хочу сделать ЧПУ с транслитом.
Вопрос такой:
Как лучше сделать, записывать транслит в базу и потом его оттуда брать и формировать ссылку или переводить заголовок в транслит на лету, перед выводом?
Второй вариант для меня удобнее, т.к. сайт работающий и имеет более 10000 статей.
А если делать 1-й вариант, то придется еще переводить заголовки всех имеющихся статей в транслит и записывать в базу.
Есть какая-то принципиальна разница? Может производительность в каком-то случае будет хуже или еще какие-то минусы, подскажите.
 
Мой совет - делайте так, как вам удобнее. Есть простой способ проверки производительности.
PHP:
$mk_start = microtime();
 
// ... Ваша операция
$tran = make_translite($title);
 
$mk_end = microtime();
 
//Выводит разницу меток времени в микросекундах
echo ($mk_end - $mk_start);

Преобразование текста (100-150 символов) в транслит на моем сайте, на обычном хостинге происходит за меньше чем 100 микросекунд. Вывод такой: преобразование текста в транслит почти никак не нагружает сервер, в следствии не влияет на производительность сайта. Поэтому, производительностью в этом случае можно пренебрегать.
 
Я думал о производительности из соображения посещаемости. Т.е. запрос в базу все равно есть и будет и если добавить туда выборку транслита, то ничего не изменится. А вот если делать транслит при каждом выводе ссылки, то эти ~100 микросекунд нужно умножить на посещалку. В среднем онлайн бывает ~ 300-500, но эти люди не листают постоянно сайт, а читают, т.к. статьи длинные.
 
Да даже 300-500 человек не угробят сервер. У меня есть сайт со скриптом в 1 млн хитов/сутки. работает на вдс 500mhz 256mb. там жуть жуткая, каждый хит делает около 10 запросов в БД. Собственно, запросы в БД - самая медленная часть. Чуть-чуть подтормаживает. Но генерация не более 0.5сек даже в самые посещаемые моменты. Пользователи тормозов не замечают. С преобразованием строк длиной до 1кб вообще можно не заморачиваться на производительность. Делайте так, как вам удобно.
 
Sunday, у Вас уже есть запрос в базу - зачем грузить дополнительной функцией? Сделайте простой парсёр, который забьёт в базу для всех старых статей новые данные по ЧПУ, а для новых генерируйте при их добавлении. Зачем же каждый раз то генерировать по новой?

Конечно, сервер Вам не убьют такой мелкой операцией, но если таких мелочей со временем понаделать 1000 - Вас и один юзер убьёт...
 
Вообще далать ЧПУ на старом, индексируемом сайте черевато потерей позиций по ключевым запросам и поисковым фразам в выдаче поисковых систем. Бывает оно это нужно как воздух. Но если сайт старый - то лучше 100 раз подумать..
Кто мешает сделать редирект со стврой ЧПУ на новую? И тИЦ сохраним, и новый ЧПУ получим...
 
конечно лучше транслит в базе хранить, поставить поле unique(если хранить полный путь) тогда поиск соответствий будет максимально быстрым.
Иначе значения не имеет
 
Если стоит nginx, пропиши редирект на новый скрипт и передавай туда id статьи, там по id бери алиас из бд и 301 редиректом отправляй на новую ссылку. А чтобы уменьшить ко-во запросов к бд - мемкеш
 
Делать на лету - извращение, хотя бы потому, что иногда возникает необходимость поправить ту или иную ссылку. По быстродействию вообще и говорить нечего, может я не так что-то понимаю, но чтоб найти в базе статью, по переведенной на лету ссылке, нужно выбрать поочередно каждое название статьи, перевести его в транслит и сравнить, что куда дольше чем искать определенное значение.
Обычно в таких случаях пишется модуль для генерации ссылок и записи в бд одним махом, раз написать его и не нужно извращаться, тем более ничего сложного тут нет, так же желательно добавить генерацию ссылки при добавлении новой статьи/раздела.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху