| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Минималистский календарик в 1 кБ? |
| Автор: SelenIT 27.10.2007, 04:20 |
| Однажды как-то случайно получился у меня минималистский а-ля календарик одной ф-цией, сегодня я снова на него наткнулся, чуть "причесал" код, в итоге весь http://silverflame.at.tut.by/calendarik.html уместился в 2 кБ. Вроде работает, при клике на день выполняется заданная при его создании ф-ция (в примере это простой alert) с выбранной датой как аргументом. Нутром чую, что можно сделать еще рациональнее, спортивный азарт подмывает ужать те же возможности до как минимум 1 кБ читабельного и красивого кода. Буду благодарен за соучастие в этом "интеллектуальном изв... упражнении" Upd.: http://forum.vingrad.ru/index.php?showtopic=179110&view=findpost&p=1302019 трудов (для тех, кому лень читать всю тему, в которой действительно много оффтопной воды;). |
| Автор: cruelangel 27.10.2007, 11:09 |
| а я бы лучше обсудил практическую ценность сего виджета. я лично оной не наблюдаю. |
| Автор: SelenIT 27.10.2007, 18:37 |
| cruelangel, вообще это задумывалось как часть очередного date picker'а (вместо alert-а может быть функция подстановки отформатированной как надо даты в текстовое поле). Но вопрос действительно скорее из абстрактного научно-спортивного интереса, чем из практического P.S. http://silverflame.at.tut.by/calendarik1.html - 1361 байт. Много |
| Автор: cruelangel 28.10.2007, 00:10 |
| в том-то и дело, что быстрее и проще забить дату руками, чем ковыряться мышкой в датепикере... |
| Автор: SelenIT 28.10.2007, 00:14 |
| На вкус, на цвет |
| Автор: cruelangel 28.10.2007, 01:46 |
| хорошая автоматика распознает любой формат... |
| Автор: SelenIT 28.10.2007, 02:59 |
| |
| Автор: AKS 28.10.2007, 11:08 |
Да ну-у-у, много! Нормально! Лучше добавьте самую малость. А то один "красный" день в неделе - это не по-нашенски (хотелось бы как минимум три). |
| Автор: cruelangel 28.10.2007, 12:34 |
| SelenIT, для этого достаточно рядом показывать распознанную дату. к тому же, локализацию в зависимости от выбранного языка ещё никто не отменял.. yalo, скажу по секрету: навигация реализованная в виде датепикера - полный идиотизм. особенно прикольно это выглядит, когда новостей мало и на каждой странице получается по 1-2 записи. покажите мне пользователя, которого интересуют новости за определённый день прошлого месяца! нет, пользователей обычно интересуют новости за определённый период: сегодняшние за последнюю недёлю за последний месяц с момента последнего посещения не менее часто период его вообще не интересует - он просто выводит все новости с разбиением на страницы и жмёт для перехода между ними "ещё более древние новости" |
| Автор: yalo 28.10.2007, 17:55 | ||
| cruelangel, по-моему, Вы не правы, лично мне приходилось искать новости на одном из сайтов, сайт очень большой, за каждый день там было как минимум пять а может и больше новостей, адрес не вспомню, помню, что сайт объединял информацию юридического, экономического и еще возможно какого-то плана, что-то типа последних изданных законов, поправок к ним + всевозможные новости в мире бизнеса и экономики. Мне нужен был почти конкретный день, скажем плюс-минус 2 дня, а в новостях внизу была очень длинная простыня ссылок-страниц, я реально тогда замучилась искать какой-то определенный факт с того сайта среди новостей (узнав от кого-то, что на этом сайте есть интересующий меня факт среди новостей) кликая на стр. 1, 2 и т.д. и пытаясь примерно просчитать в уме куда же еще надо кликнуть и сколько пропустить страничек...:( интересующий меня факт я так и не нашла, терпения не хватило, а трафика съела нормально так, кликая по ссылкам-страничкам, несказанно была бы рада тогда чудесному календарику Selenа
все-таки, это Ваша субъективная точка зрения |
| Автор: SelenIT 28.10.2007, 18:32 | ||||
До боли знакомое ощущение, полностью поддерживаю! Имхо, едва ли не чаще, чем для навигации, дейтпикеры используются для задания границ диапазонов (напр. при поиске по тем же новостям, при построении графиков статистики и т.п.). Причем юзеру-гуманитарию вполне может понадобиться диапазон "с позапрошлой среды по прошлую пятницу" - например, от анонса товара до его поступления в продажу. Переводить дни в числа в уме или лезть в "часики" - долго и неудобно, а с помощью дейтпикера - наглядно, быстро и очевидно, особенно для юзера с проводниково-аутлучными привычками. Впрочем, это мое субъективное мнение
http://silverflame.at.tut.by/calendarik2.html, заодно слегка почистив код для валидатора. Размер не изменился Вообще, основная цель этой демонстрации - проверка возможностей объекта Date, которому, по-моему, вполне можно доверить всю календарную арифметику (число дней в месяце, високосные года...), которую обычно пытаются реализовать вручную. Хотелось бы услышать комментарии по этому поводу. |
| Автор: cruelangel 28.10.2007, 20:33 |
| yalo, нужно было воспользоваться поиском по сайту. как вариант - http://www.google.ru/advanced_search?hl=ru - он ищет как правило лучше. если известна конкретная дата, то гораздо удобнее просто её ввести, а не тыкать десять раз на "предыдущий месяц" и пару раз на "предыдущий год". Добавлено @ 20:39 > "с позапрошлой среды по прошлую пятницу" - например, от анонса товара до его поступления в продажу. вот и сделай ссылку "от анонса до начала продаж", а не заставляй его вспоминать в какой день недели это произошло. даже если это невозможно фильтра "за последние две недели" более чем достаточно. в пользовательских интерфейсах не нужна излишняя точность. |
| Автор: SelenIT 28.10.2007, 21:01 |
| cruelangel, я не понимаю, с чего такая ярость? ;) Это ж все дело вкуса, кому-то удобнее ввести, кому-то - покликать. Чем наличие рядом с полем ввода даты ма-аленькой кнопки открытия пикера мешает любителю текстового ввода? Имхо, такая комбинация всяко удобнее, чем три select-а, включая 31-строчный для числа А если понадобится "за три недели" или "за десять дней"? Плодить фильтры? Зачем, если есть универсальная выбиралка диапазона? ...для каждого товара, на всякий случай? Да если сам юзер забыл точное число, какого гейтса я должен их все помнить? Пользовательские интерфейсы вообще не нужны. Все можно сделать в консоли, кто не может - тому и в системе делать нечего |
| Автор: cruelangel 28.10.2007, 21:27 |
| три селекта - это вообще жэсть... > А если понадобится "за три недели" или "за десять дней"? также как и в случае 11 дней 14 часов 35 минут и 46 секунд Ж-) вполне достаточно: 1, 2, 4 дня, 1, 2, 3 недели, 1, 2, 3, 6 месяцев > Зачем, если есть универсальная выбиралка диапазона? зачем, если есть универсальное поле ввода? > Чем наличие рядом с полем ввода даты ма-аленькой кнопки открытия пикера мешает любителю текстового ввода? ничем. речь не об этом. |
| Автор: SelenIT 28.10.2007, 21:35 | ||
Недостаточно. По опыту подобной системы, примерно каждый пятый-шестой юзер слезно просит добавить "еще фильтрик". Выбиралка диапазона решает проблему навсегда. ...дополненное опциональным датапикером для тех, кто не дружит с клавой ...а о чем тогда? Тогда я вообще не понимаю смысла дискуссии... |
| Автор: _Michael 29.10.2007, 19:39 |
| cruelangel, человек спрашывает как можно скрипт оптимизировать а не зачем он нужен. пускай для тебя ненужно он без нужды, но кому-то так нравится. Если можно не только поле ввода а еще и такой датапикер раелизовать? то что ето плохо? Конечно надмерная перегруженность страницы контентом плохо, но в данном случае, маленькая кнопочка для ввода даты двумя тремя кликами, думаю намного поднимет например общее мнение среднестистического "проводниково-аутлучного" пользователя о сайте. Большинству, подавляющему большинству юзеров намного удобнее развалившись в кресле все операции делать мишей нежели отвлекаться на клаву чтоб там найти нужную клавишу. Но еще раз повторю человек не ето спрашывал открывая данную тему. Если хочешь поспорить о том, надо такое или нет, открывай новую тему. |
| Автор: SelenIT 30.10.2007, 01:18 |
| Ой, йо... Хотя с другой стороны, алгоритм-то тривиальнейший, диктуется структурой данных... может быть и конвергенция в мыслях такая... Но все равно, теперь придется срочно изобретать оригинальную оптимизацию и брать килобайтную планку, чтоб избавиться от "комплекса вторичности"...;) |
| Автор: AKS 30.10.2007, 07:59 |
Зачем? Здесь все по-другому - лучше, проще (никакой вторичности). |
| Автор: cruelangel 30.10.2007, 09:37 |
| обфускатором её |
| Автор: _Michael 30.10.2007, 15:29 |
| SelenIT, ну смотри, если забрать все переводы строк, ето будет 1361-32*2 = 1297 байт. если в скрипте табуляцию убрать будет еще -27 байт тоесть 1270. Если заменить container на с например и calendar на l например, то будет еще -37 байт, то-есть 1233. байта. если со стилей убрать px будет уже 1229, еще пробелов с десять можно убрать уже будет 1219. Нуу, больше не знаю как. Да и вообще то сам скрипт то меньше, всего 995 байт, что менее 1к. а етих 1361 ето ж вся страница. |
| Автор: _Michael 30.10.2007, 15:50 |
| Еще можно вместо d.getElementById(id).innerHTML писать просто id.innerHTML. ( еще -19 байт |
| Автор: _Michael 30.10.2007, 16:13 |
| Сорри, только что попробовал id.innerHTML у меня не работает, но container.innerHTML работает отлично |
| Автор: SelenIT 30.10.2007, 17:50 | ||
| _Michael, спасибо, но хотелось бы сохранить подобие читаемости. Сжатие за счет переносов строк и пробелов - это, имхо, уже немножко неспортивно;). А замена getElementById на all и тем паче глобальную переменную нарушает кроссбраузерность... Пока удалось преодолеть планку в 1.3 кБ, за счет убирания лишних переменных и злоупотребления "добротой" HTML-модели, самостоятельно закрывающей незакрытые <td>, <tr> и т.п.. Итого, текущий рекорд (с двумя "красными днями", на пределе читаемости) - 1242 знака (при "неспортивном" сжатии в одну строку, убирании ";" перед "}" и переименовании переменных в однобуквенные - 1065). Имхо, это можно уже постить прямо сюда...;)
...А что, раз браузеры умные и умеют сами поправлять кривые, по их мнению, данные - почему бы иногда, в меру, этим не попользоваться? Вот ведь сколько трафика и сил можно на этом сэкономить... Upd.: путем варварского насилия над HTML (присвоения целевого id самому body и незакрытия body и table) удалось приблизиться к вожделенному килобайту почти вплотную - 1033 байта. Обрезав названия месяцев по трем первым буквам, получаем 1001 байт на всю работоспособную страницу (а с document.all - http://silverflame.at.tut.by/calendarik990.html!). Формально (хоть и с применением "запрещенных препаратов") цель достигнута? ;) |
| Автор: _Michael 30.10.2007, 18:27 | ||
Ето конечно можно, но страница не будет соответсвовать спецификациям W3C, или стандартам, в которых говорится что все теги должны закрываться |
| Автор: SelenIT 30.10.2007, 18:30 |
| _Michael, по спецификации HTML не закрывать эти теги допустимо (хотя и не рекомендуется). При генерации DOM браузеры закрывают их сами перед началом следующего. А в режиме XML этот скрипт, увы, все равно не работает (по крайней мере в FF)... P.S. Решил убедиться, сходил в http://www.w3.org/TR/html401/index/elements.html - table, оказывается, все-таки не закрывать нельзя. В примере исправил. В итоге минимальный вариант, не противоречащий стандартам, занимает 1045 байт с полными названиями месяцев и 1013 байт - с сокращенными. Планка 1024 все равно преодолена;). |
| Автор: _Michael 30.10.2007, 18:54 | ||
не работает поскольку нету XML заголовка
|
| Автор: SelenIT 30.10.2007, 19:29 |
| _Michael, какой вариант и в каком браузере не работает? Или имеется в виду, что не проходит валидацию? Не спорю, для полной валидации даже как HTML 4.01 нужно добавить DOCTYPE, <title> и атрибут type для <script> и <style>, что скажется на калорияхбайтах Правда, в настоящем XHTML (который с Content-type:application/xhtml+xml) не хочет innerHTML присваиваться, "неизвестная ошибка" вылетает. Для него придется делать версию на чистом DOM. Но тут уж я на килобайт и не замахиваюсь... |
| Автор: cruelangel 30.10.2007, 20:37 |
| в данном случае лучше верстать дивами... |
| Автор: _Michael 31.10.2007, 15:36 |
| Не, я имел ввиду например здесь http://validator.w3.org/ |
| Автор: SelenIT 31.10.2007, 18:47 | ||
Видимо, да. Получилось http://validator.w3.org/check?uri=http%3A%2F%2Fsilverflame.at.tut.by%2Fcalendarik_w3.html. С точки зрения семантики не согласен (списки - еще куда ни шло), с точки зрения "спортивной оптимизации" - возможно, стоит попробовать, но имхо тогда CSS будет далеко не таким минималистским... |
| Автор: cruelangel 31.10.2007, 20:13 |
| float: left width: 1em |