За последние 24 часа нас посетили 22549 программистов и 1009 роботов. Сейчас ищут 649 программистов ...

ЧПУ - великое зло!

Тема в разделе "Прочие вопросы по PHP", создана пользователем dark-demon, 11 июл 2007.

  1. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    рассмотрим такое явление как ЧПУ на примере форумов:

    классический вариант ури выглядит так:
    /forum/viewtopic.php?t=6485
    - короткий, удобный, но нифига не понятный

    более продвинутый, с указанием полного пути:
    /forums/programming/javascript/misc/thread/34442.xhtml
    - длиннющий, но не содержит информации о содержании топика, зато содержит излишнюю информацию о том, что яваскрипт относится к программированию. при этом перенос топика в другой форум требует изменения ури, хотя содержимое самого топика ни чуть не меняется. в результате мы имеем битые закладки, битые ссылки в индексах поисковиков и тп проблемы, которые приходится решать редиректами со старых урлов.

    убер ури:
    /comments/lib/6_dbsimpleVersion1XLakonichnayaRabotaSRazlichnimiSubd.html
    - ещё более длинный и ещё менее читабельный вариант. чесное слово, чем это недоразумение - лучше четыре циферки. ан-нет, все гонятся за ЧПУ. и у каждого свой монстрик...

    попробуем абстрагироваться от модного слова ЧПУ и попытаемся понять, чего же мы хотим от ури?

    прежде всего ури - это не путь к файлу на диске, а уникальный идентификатор ресурса. сам "ресурс" мы можем перемещать как по диску, так и по каталогу сайта, но его идентификатор не должен меняться, иначе какой же это идентификатор? отсюда следует банальный вывод: всяким "programming/javascript/misc" в ури делать просто нечего, потому как они относятся скорее к идентификации местоположения ресурса внутри некоторой иерархии - внешней по отношению к самому ресурсу.

    но что же такое ресурс? ресурс - это некоторый набор данных представленных в определённом виде. то есть, в ури должно быть однозначно зашифрованы идентификаторы данных и способ их представления (view). то есть мы получаем, что наиболее адэкватной является первая схема формирования ури или фактическое отсутствие какого бы то ни было ЧПУ. но всё портит нечитабельность и незапоминаемость ури. если с первым существующие решения хоть как-то пытаются справиться, то на второе все дружно забивают. а зря!

    всвязи с вышесказанным напрашивается следующее очеловечивание ури:
    /topic/javascript_faq/
    где первая часть ури (topic) - идентификатор представления, а вторая (javascript_faq) - идентификатор данных
    естественно, это может быть и что-то более сложное, типа: /topic/xml/all/javascript_faq/
    у такой схемы отличная запоминаемость, по скорости она лишь немногим уступает варианту с числовым идентификатором, но вот его формирование несколько проблематично - идентификатор должен быть достаточно информативным, но не слишком длинным. варианты типа "перевести название топика на англиский и записать без пробелов" естественно не подходят. переводить в транслит - ещё хуже. русским - обретём букет других проблем.

    конкретизируем требования к идентификатору, которому надлежит оказаться в ури:
    1. это должна быть латиница
    2. английский язык, на крайняк - транслит
    3. не более 3 слов и 30 символов (ориентировочно)
    4. он должен быть уникальным вообще или хотябы в пределах одного указываемого представления

    наиболее вменяемым мне видится только вариант с дополнительным полем в которое пользователь может вписать наиболее адэкватный идентификатор. в случае коллизий есть несколько путей их разрешений, которые можно применять в любой комбинации:
    1. просто приписывать (если ещё нет), либо увеличивать индекс в конце предложенного идентификатора (topic,topic1,topic2,topic3)
    2. предложить пользователю переформулировать
    3. предложить пользователю не создавать новый топик, а продолжить обсуждение в существующем
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Однако многие так и делают, и не жалуются...

    (хотя меня вообще ЧПУ не "прёт" если я вижу что нибудь типа "viewtopic.php?t=6604" меня это не чуть не смущает)
     
  3. Anonymous

    Anonymous Guest

    dark-demon, гы, мну тя лю! ;)
    На самом деле, я крайне негативно отношусь к ЧПУ в динамических данных. Имхо, это удел именно статики, например раздела со статьями, где содержимое не меняется месяцами и даже годами.
    Во вторых, как показывает практика, никто не будет набирать руками ни ЧПУ длинной больше 20 знаков, ни вообще никакой другой УРЛ!
    В общем, +1 =)
     
  4. Davil

    Davil Guest

    Вопрос - а кого это вообще смущает? (кроме создателей ресурсов с ЧПУ URI)
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Уверен что никого, но их-то это смущает вот в чём проблема-то.

    Многие ЧПУ-шники ссылаются на SEO (думая что поисковому боту больше нравятся "красивые" ссылки) но видимо они забывают что поисковой робот тоже робот и ему глубоко плевать на "красоту". (ему важно чтоб ссылка на страницу была постоянная без всяких SID а страница имела заголовок Last-modified причём желательно соответствующий истине)
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Для статики ЧПУ подходит хорошо. Пример Википедия. Нет необходимости пользоваться поиском, достаточно ввести в URI термин и перейти на нужную станицу.
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Я вообще почти никогда не набираю адреса, у меня всё либо в закладках, либо я нахожу через гугл/яндекс (а то что нравится кидаю в закладки) по этому мне ровным счётом всё равно что там в адресе написано...
     
  8. Anonymous

    Anonymous Guest

    хороший пример еще поиск на php.net
     
  9. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Горбунов Олег
    и на php.ru между прочим тоже.
     
  10. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Дык, ребята, ЧПУ могут и не быть такими монструозными.
    У нас вот в бумтайме ЧПУ содержит от одного до (в основном) 3-х слов, типа
    /friends.html
    /friend/gallery.html

    /forums.html
    /forums_topic/ID.html

    и.т.д.

    У них не только чисто визуальное назначение, но и практическое - первое слово указывает какой модуль необходимо загрузить, остальные параметры разбирает уже сам модуль. Как правило для обычных операций вывода хватает 2, максимум 3 уровня. Урлов более чем с 4-мя параметрами (как правило это попапы с редактированием/добавлением/удалением чего-либо и.т.д.) практически нету, очень редко где и там уже пользователь обычно их даже не видит (ибо попапы) или ему дофени, потому-что урл бесполезно запоминать.

    Можете тут полазить по форуму http://groups.boomtime.lv/ , регистрация для просмотра не требуется. ИМХО вполне понятно и просто. /forums_topic.php?id=ID или /forums_topics/ID.html - ИМХО, 2-й лучше всё-же :)
     
  12. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Psih в твоём примере УРЛ выглядит красиво и понятно. А вот URL на форуме dklab выглядит уже монструозно, при всём моём уважении к авторам ресурса.
    Сам у себя на сайте отказался от длиных URL, вида
    и пришёл, как сам считаю, к более умному решению
    ^_^
     
  13. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Дык такие простые и я делаю (хотя скорее чисто от нефиг делать) вот у меня на сайте
    (в гостевушке)
    /start10.html
    /start20.html

    Но ИМХО никому это не нужно и никто на это не обратит внимание... (разве что какой нибудь педант)
     
  14. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    ну вот данный топик имеет ури: /forum/viewtopic.php?t=6604&start=0&postdays=0&postorder=asc&highlight=
    если пофиксить баги пхпББ, то он сократится до: /forum/viewtopic.php?t=6604
    фактически он является "статьёй с обсуждением", хотя и располагается в "форуме". сама статья наврятли будет меняться, поэтому её вполне можно назвать статикой.
    почему бы не предоставить пользователю возможность сформировать короткий и лаконичный ури для неё, чтобы при необходимости можно было бы быстро по памяти набрать её адресс (а браузер с закладками не всягда находится под рукой, да даже если и под рукой - ковыряться в куче закладок не слишком-то эффективно..), чтобы видя на форуме ссылку куда-то было бы сразу понятно "ага, это тот топик, где мы обсуждали чпу"?
    конечно, если пользователь пришёл спросить как сложить два числа и ему не то, что идентификатор, а даже заголовок придумывать лень, то для него сформируется ури вида /topic/6604/, но не стоит лишать адэкватных пользователей (да и самих же себя) возможности формировать ури вида /topic/chpu_hell/
     
  15. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Можно пример лаконичной ссылки?
    я бы еще понял \catalog\subcatalog\index.html?p=2
     
  16. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    А как определять адэкватность?
     
  17. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    а зачем её определять?
     
  18. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Тоесть ты предлагаешь дать такую возможность всем? Я не удивлюсь, если появятся урл вида:
     
  19. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    ну, если это будет на порнофоруме, то я тоже не удивлюсь :) в общем же случае, freexxxvideo несёт информации не больше, чем число 6604, а запоминаемость лучше (да что там говорить, первое я набрал сейчас по памяти, а второе - пришлось кнопку "назад" нажать). впрочем, за неадэкватный ури можно спрашивать по всей строгости неадэкватного заголовка топика...
     
  20. Davil

    Davil Guest

    При посещаемости форума больше 2х человек в день, скоро такие названия закончатся.
    Представь - на этом форуме хочешь создать тему, а тебе пишут - "тема с таким названием уже существует"...
     
  21. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    значит я просмотрю эти темы, и если там обсуждается что-то не то, то уточню идентификатор либо положусь на автоматику, которая сформирует уникальный индентификатор просто добавлением индекса в конце.
     
  22. Davil

    Davil Guest

    И получится /topic/ajax_problem_234/
    Намного ли лучше чем topic.php?t=6604
     
  23. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Davil
    Код (Text):
    1. topic/6604.html
    лучше :)
     
  24. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Гы, короче начинаем холивар, "Динамика vs ЧПУ" :D
     
  25. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    +1 за ЧПУ. Если оно не наворочено, а сделно просто и со вкусом ;)