За последнее время проскочило великое множество статей на тему того,
какая плохая штука шебенги (#!
) и как все срочно должны перестать их
использовать. Меня эта тема немножко волнует и мне тоже хочется
высказаться.
Начнëм с того, почему они плохие. Основные аргументы:
- сайты с ними тормозят
- они ломают поисковики
- они ломают curl/wget
Очевидно, что первый пункт никакого отношения к шебенгам не имеет вообще. Это уже вопрос того, насколько авторы сайта решили сделать его крутым, динамическим и прочее (флеш-подобным ;). Например, новый твиттер может порядочно тормозить - и даже если бы этих шебенгов не было и он бы перезагружался на каждом клике, тормозил бы он точно так же.
Google они не ломают, более того, используется именно шебенг вместо просто хеша специально для того, чтобы Google мог проиндексировать эти страницы.
Так что единственный реальный аргумент - это то, что они ломают курл. Вот этот момент мне тоже очень не нравится. Для твиттера, правда, на мой взгляд, есть оправдание - у него есть API. API с большой степенью нивелирует необходимость ручного разбирания страниц (да и понадëжнее обычно).
И еще есть два момента - когда поддержка HTML History API будет более широкой (вот выйдет ФФ4, большая часть людей до него обновится, и будет счастье и красота), то можно будет использовать нормальные урлы и не перегружать страницу всë равно. Никаких проблем с курлом или гуглом, но есть одно маленькое но - так невозможно сделать веб-приложение (с акцентом на слове “приложение”), только веб-сайт.
Самый обычный сайт, который рендерится на сервере и просто умеет отдавать целую страницу или кусочек (для замены) - так можно сделать, будет и курл работать, и гугль не заикнëтся, и частичное обновление страницы будет работать (если браузер умеет History API, конечно) - для примера можно посмотреть на браузер по дереву файлов у гитхаба.
Но вот веб-приложение рендерингом на сервер-сайде не сделаешь. Такое, как Gmail, 280 Slides и прочие. И почему-то забывают все ругатели хешбенгов и History API, что с таким приложением всего два выхода - либо URL не меняется, либо меняется. Вопрос поддержи гугла и курла не стоит, им нечего делать.
Возможно, с текущим увлечением Node.js, кто-нибудь сделает прокси, которое будет рендерить такое приложение на бекенде и отдавать курлу (как бы еще при этом получше определять, что клиент не умеет JS?), но это мне пока кажется довольно оптимистичной идеей. Хотя, наверное, вариант, который работает хотя бы для простых случаев, сделать не очень сложно - имплементация DOM’а есть, jQuery et al работают, так что может и получиться.