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

Тема в разделе "Как сделать...", создана пользователем Sunday, 4 июн 2012.

Статус темы:
Закрыта.
  1. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    724
    Симпатии:
    314
    Есть сайт, имеющий ссылки вида
    Код:
    site.ru/1443.html
    Хочу сделать ЧПУ с транслитом.
    Вопрос такой:
    Как лучше сделать, записывать транслит в базу и потом его оттуда брать и формировать ссылку или переводить заголовок в транслит на лету, перед выводом?
    Второй вариант для меня удобнее, т.к. сайт работающий и имеет более 10000 статей.
    А если делать 1-й вариант, то придется еще переводить заголовки всех имеющихся статей в транслит и записывать в базу.
    Есть какая-то принципиальна разница? Может производительность в каком-то случае будет хуже или еще какие-то минусы, подскажите.
     
  2. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Мой совет - делайте так, как вам удобнее. Есть простой способ проверки производительности.
    PHP:
    $mk_start microtime();
     
    // ... Ваша операция
    $tran make_translite($title);
     
    $mk_end microtime();
     
    //Выводит разницу меток времени в микросекундах
    echo ($mk_end $mk_start);
    Преобразование текста (100-150 символов) в транслит на моем сайте, на обычном хостинге происходит за меньше чем 100 микросекунд. Вывод такой: преобразование текста в транслит почти никак не нагружает сервер, в следствии не влияет на производительность сайта. Поэтому, производительностью в этом случае можно пренебрегать.
     
    latteo, UDAV и Sunday нравится это.
  3. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    724
    Симпатии:
    314
    Я думал о производительности из соображения посещаемости. Т.е. запрос в базу все равно есть и будет и если добавить туда выборку транслита, то ничего не изменится. А вот если делать транслит при каждом выводе ссылки, то эти ~100 микросекунд нужно умножить на посещалку. В среднем онлайн бывает ~ 300-500, но эти люди не листают постоянно сайт, а читают, т.к. статьи длинные.
     
  4. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Да даже 300-500 человек не угробят сервер. У меня есть сайт со скриптом в 1 млн хитов/сутки. работает на вдс 500mhz 256mb. там жуть жуткая, каждый хит делает около 10 запросов в БД. Собственно, запросы в БД - самая медленная часть. Чуть-чуть подтормаживает. Но генерация не более 0.5сек даже в самые посещаемые моменты. Пользователи тормозов не замечают. С преобразованием строк длиной до 1кб вообще можно не заморачиваться на производительность. Делайте так, как вам удобно.
     
    Sunday нравится это.
  5. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.036
    Симпатии:
    2.040
    Sunday, у Вас уже есть запрос в базу - зачем грузить дополнительной функцией? Сделайте простой парсёр, который забьёт в базу для всех старых статей новые данные по ЧПУ, а для новых генерируйте при их добавлении. Зачем же каждый раз то генерировать по новой?

    Конечно, сервер Вам не убьют такой мелкой операцией, но если таких мелочей со временем понаделать 1000 - Вас и один юзер убьёт...
     
    Sunday нравится это.
  6. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.036
    Симпатии:
    2.040
    Кто мешает сделать редирект со стврой ЧПУ на новую? И тИЦ сохраним, и новый ЧПУ получим...
     
    Sunday нравится это.
  7. PhpEbasher

    PhpEbasher Писатель

    Регистр.:
    5 июн 2012
    Сообщения:
    5
    Симпатии:
    1
    конечно лучше транслит в базе хранить, поставить поле unique(если хранить полный путь) тогда поиск соответствий будет максимально быстрым.
    Иначе значения не имеет
     
  8. pixelranger

    pixelranger

    Регистр.:
    24 июн 2006
    Сообщения:
    386
    Симпатии:
    117
    Если стоит nginx, пропиши редирект на новый скрипт и передавай туда id статьи, там по id бери алиас из бд и 301 редиректом отправляй на новую ссылку. А чтобы уменьшить ко-во запросов к бд - мемкеш
     
  9. zaxap83

    zaxap83 Постоялец

    Регистр.:
    6 дек 2010
    Сообщения:
    87
    Симпатии:
    28
    Делать на лету - извращение, хотя бы потому, что иногда возникает необходимость поправить ту или иную ссылку. По быстродействию вообще и говорить нечего, может я не так что-то понимаю, но чтоб найти в базе статью, по переведенной на лету ссылке, нужно выбрать поочередно каждое название статьи, перевести его в транслит и сравнить, что куда дольше чем искать определенное значение.
    Обычно в таких случаях пишется модуль для генерации ссылок и записи в бд одним махом, раз написать его и не нужно извращаться, тем более ничего сложного тут нет, так же желательно добавить генерацию ссылки при добавлении новой статьи/раздела.
     
Статус темы:
Закрыта.