85 posts tagged

по-русски

/core.php, line 2
Error 2: Use of undefined constant k - assumed 'k' (this will throw an Error in a future version of PHP)

/core.php, line 2
Error 2: Use of undefined constant k - assumed 'k' (this will throw an Error in a future version of PHP)

/core.php, line 2
Error 2: Use of undefined constant k - assumed 'k' (this will throw an Error in a future version of PHP)

/core.php, line 2
Error 2: Use of undefined constant k - assumed 'k' (this will throw an Error in a future version of PHP)

/core.php, line 2
Error 2: Use of undefined constant k - assumed 'k' (this will throw an Error in a future version of PHP)

/core.php, line 2
Error 2: Use of undefined constant k - assumed 'k' (this will throw an Error in a future version of PHP)

/core.php, line 2
Error 2: Use of undefined constant k - assumed 'k' (this will throw an Error in a future version of PHP)

Later Ctrl + ↑

Про оптимизацию javascript кода (часть 1)

Нижеследующее — размышления после профилирования нескольких скриптов, и поисков быстрого кода.

Все больше статей по клиентской оптимизации появляется. Но проблема в том, что практики из статей начинают применять молодые разработчики без понимания причин. Зачастую авторы статей рассказывают как они решили свою проблему.

Видел людей, которые всерьез спорят про быстрые и медленные циклы, и использование бинарных операторов для ускорения. На практике потребность в подобных манипуляциях встречается очень редко. Эти споры процветают, пишутся тесты. Правда ребята забывают, что самым узким местом клиентского JS является DOM.

При переписывании цикла на более быструю версию, кеширование переменных (для более быстрого поиска по областям видимости) скрипт можно ускорить на 5%, ну на 10%. При этом произойдет
потеря в читаемости исходного кода, его понимании.

Но ситуация с оптимизацией — палка о трех концах. Второй конец: браузерная оптимизация. Например пример двух циклов:

 // 1
for (var i = 0; i < arr.length; i += 1) {}
// 2 
for (var i = 0, length = arr.length, i < length; i += 1){}
// 3
var length = arr.length;
while (length--){}

Вторая версия чуть более многословна, но быстрее первой. Третья менее многословна, но не совсем понятна слету (проход по массиву в обратном порядке не естественен для понимания).

На практике интерпретаторы сами оптимизируют код циклов, и большой разницы в скорости отработки в современном браузере профилирование не покажет, не говоря уже о пользовательских ощущениях. Какая разница, скрипт выполнится за 10мс или 9мс.

Подобные оптимизации сработают для старых браузеров. Но тут возникает вопрос целесообразности: надо ли держать такое количество непонятного кода только для оптимизации (еще не понятно необходимой ли) работы старых браузеров. Намного лучше оставить код многословным и однозначным. Пусть оптимизируют интерпретаторы.

А вот третий конец — это DOM. Обновление одного узла в DOM-e ведет за собой каскад телодвижений со стороны браузера: обновление свойств children, parentNode, nextSibling у нод, которые «цепляются» этим изменением, обновление liveCollections, триггер repaint и reflow, очистка памяти, если использован innerHTML, то еще дополнительный парсинг текста в DOM модель. На фоне такого количества действий низкоуровневые оптимизации меркнут. Слишком просто одним лишним обращением к DOM-у свести все оптимизации на нет.

Узких мест в DOM-е множество. Самые тяжелые — обновление: добавление и удаление узлов. При том время отработки одного и того же кода зависит от общей сложности DOM дерева, максимальной вложенности, количества таблиц стилей и количества правил. Это означает, что один и тот же способ оптимизации даст различный прирост, в зависимости от сложности страницы.

Браузерные производители понимают, и со своей стороны стараются оптимизировать код движков. И тут мы наблюдаем другую интересную ситуацию: разные подходы к оптимизации дают разный прирост в разных браузерах. Чем древнее браузер, тем вероятнее, что хитрые манипуляции дадут преимущество.

Снова повторяется история с циклами: не стоит усложнять исходны код, подстраивая его под браузер. Пусть этим занимаются браузеростроители.

Я к чему веду: смысла в особой оптимизации кода нет. Самый разумный подход — написать код как есть, структурировать и сделать его читаемым и понятным. И только если профилирование покажет необходимость оптимизаций, начать именно с оптимизации работы с DOM.

2012   по-русски   разработка

Неявный клик при работе с label и элементом формы

Бывает и такое, что откуда-то берется лишний клик. Низлежащее — вольная интерпретация происходящего.

По ссылке при клике по тесту генерируется 2 события click, при клике по самому инпуту — одно событие. Нифига не логично с точки зрения нормального человека, и понятный костыль с точки зрения разработчика. При клике на лейбле генерируется событие клик на инпуте, которое всплывает до лейбла, и обработчик клика срабатывает во второй раз. Событие, что было сгенерировано на инпуте не тригерит второй раз клик на инпуте, когда срабатывает на лейбле. Вероятно, в недрах браузера происходит проверка на event.target. Сие безобразие наблюдал в хроме, фаерфоксе, опере, сафари.

Разработчик, бди!

2012   по-русски   разработка

Блоги о верстке

Эти блоги — кладязи знаний по верстке. Не той, где анимации, тенюшки. А той, где позиционирование, удобочитаемый код, оптимизация. Некоторые из них давно не обновляются. При этом старые посты остаются актуальными и по сегодня.

Дополняйте комментариями, что я забыл упомянуть.

2012   по-русски   ссылки   что почитать

Ссылки среды

Webstorm
Официальный сайт. Страница с EAP билдами (в каждом билде лицензия на 30 дней, билды появляются раз в 2 недели).

Aptana
Aptana. Скачали, и сразу можно пользоваться.

Eclipse + WTP (Web Tools Platform)
Качаем саму платформу Eclipse, устанавливаем плагин WTP

Sublimetext2
Сайт редактора. Скринкаст по базовой настройке. Установка сниппетов для javascript, настройка jshint (с описанием возможных факапов).

Всякое
Отличия Strict mode от не Strict (не все, но основные).
Анализ исходного кода DOM методов-селекторов.

UPD
Скринкаст про работу с Ant (автоматизация повторяющийся действий, таких как сливание файлов, заливка на сервер, минификация).
2012   по-русски   ссылки

«Спасибо, Кэп». Сухой остаток

Сайт мероприятия. Встреча, судя по вопросам докладчиков к залу, планировалась больше для веб-дизайнеров. Дважды спросили про образование, будто но играет большую роль. Организацию нельзя называть блестящей, технические проблемы с открытием файлов, общее запаздывание по плану. Но это не главное. Главное — деление знаниями. Про все доклады не напишу. Некоторые ничего не оставили ни в голове, ни в блокноте.

«Вспомнить все или правдивая ложь о вэбдизайне» Максим Павлов
Суть доклада: «технология !== идея». Общему настроению конференции соотвествует. «Спасибо, Кэп».

«Небесный капитан и мир будущего» Павел Колодяжный
«Сегодня делаем для будущего». Последствия сегодняшних решений будут жить в будущем, так что будь начеку. Перекликается с историей про появление скрытых файлов в юниксе из-за программистской лени.

«Инди-проект: один против всех»Вадим Паясу
«Хватит сидеть на жопе и думать, реализуй идею в виде прототипа за неделю». Парень создал впечатление человека поверхностного, вызвал скептические вопросы со стороны взрослой аудитории. От себя бы добавил, что если идею можно уложить в одно предложение, значит все ок.

«Итерационный дизайн» Максим Ткачук
Ввел в краткую историю дизайна, рассказал про итерационный дизайн:
  1. исследование пробемы
  2. идея
  3. прототипирование
  4. исследование (если надо, возврат на шаг 1.
Очень похоже на то, что описывается в в процессе у Лебедева. Видно, что у чувака по полочкам лежит все в голове. После доклада остались приятные впечатления и страничка тегов в блокноте.

Сергей Кудряшов
Заменял другого докладчика, и как я понял, замены была выполнена стихийно. Рассказал про организацию работы в комманде (раньше работал в parallels (где 1000 человек), сейчас в macpaw (около 30 человек)). Поделился историями из жизни. Наехал на студию Лебедева, которая создала дизайн программы для parallelsопиской, между прочим). Аргументацию не запомнил. Может ее и не было. Так-же раскритиковал методику создания интерфейса, описанную в книге Раскина. Аргументация: методика результата не даст. Этот аргумент работает, если методики придерживаться шаг-в-шаг. Хотя иначе, она перестает быть методикой. А также советы относительно комманды: как можно плоские отношения внутри, объединение по проектам, а не процессам, горизонтальная ротация (из проекта в проект).

«Downshift design» Ольга Горенко
Downshifting — делание того, чего хочется, и чтобы без самообмана. Очень честно, что мне импонирует, подошла к вопросу чего пользователь ожидает от сайта. Рекоммендации, фильтрация контента согласно предыдущим выборам. Яркий пример — организацию людей в чате фейсбука. С подачей были проблемы, может потому и вызвала недовольство некоторых слушателей. Но видно, что котелок варит. В двух словах: data mining.

«Цифровое средневековье» Ярослав Трофимов
Безапелляционный вброс. Формат подачи с предыханиями, изменением тона, и ерничанием может означать или пренебрежительное отношение к аудитории и нежелание разбираться в вопросе в поиске истины или цель пропиарить себя и книгу. 
Если противник – человек “необстрелянный”, доверчивый, мыслящий медленно, хотя может быть и точно, то некоторые наглые “фокусники мысли” стараются “ошарашить” его в устном споре, особенно при слушателях. Говорят очень быстро, выражают мысли часто в трудно понимаемой форме, быстро сменяют одну другою. Затем, “не дав опомниться”, победоносно делают вывод, который им желателен и бросают спор: они – победители. Наиболее наглые иногда не стесняются приводить мысли без всякой связи, иногда нелепые, и пока медленно мыслящий и честный противник старается уловить связь между мыслями, никак не предполагая, что возможно такое нахальство, они уже с торжествующим видом покидают поле битвы.
Проф. С. И. Поварнин «Искусство спора. О теории и практике спора»

«Блат в прошлом? Нет, в будущем!» Денис Довгополый
80% сделок — в руках у 200 человек из Силиконовой долины. PayPal мафия: люди, поднявшиеся вместе на стартапе, держатся одной тусовки, вкладывают деньги в другие стартапы, и тихонько быстро богатеют. Прошелся по нескольким акулам IT инвестирования. В его жизни 90% результата достигнуты за счет связей. В общем думайте, где тусоваться, чтобы тебя заметили нужные люди с деньгами.
2012   по-русски   разработка

Что почитать

«S.N.U.F.F» В. Пелевин

Роман, описывающий утопию, люди откачены в технологиях назад, и разделены на 2 группы. Описана философия, которая помогла выжить человечеству. Пугает понимание того, что суждения неверны, можно было найти другие, но при этом они действенны и с точки зрения выживания помогли. Пересекаются линии представителя людей (в плане положения), орков (тоже людей, но низшей социальной прослойки) и робота. Во всей этой перепетии именно робот больше всего похож на идеал человека: она умна, добра. Занятно, как владелец робота не придает значению ее речам, и относится как к вещи. Пелевин описал абсурдные законы, политические интриги, социальные проблемы. Читается на одном дыхании, мозг работает непрестанно, проводя параллели. Удовольствия — море.

Человек, который принял жену за шляпу. О. Сакс

Книга выглядит как набор глав. Каждая глава посвящена одному случаю из практики автора (он нейропсихолог). Описаны крайние случаи заболеваний пациентов, которых наблюдал Сакс. Именно эти граничные случаи позволяют чуть лучше понять принципы работы мозга, по-другому взглянуть на то, что сейчас имеешь (возможность чувствовать тело, память, распознавать лица). Герои книги в чем-то лишены, обделены, при этом они и одарены. Кстати, название не фигурально, действительно в первой главе посетитель автора принимает свою жену за шляпу. Читается просто и приятно, главы не связаны между собой, что удобно для ознакомления. В итоге — масса удовольствия и переосмысление понятий дар и обделенность.
2012   по-русски   что почитать

Системы с обратной связью

Все любят системы с обратной связью. Но не все осознают что это такое.

Блоггеры, написав хороший пост могут определить как повлиял пост на читающих, прочитав комментарии. Положительный отзыв — подтверждение, что идея дошла до мозга читающего. Негативный — повод автору задуматься над материалом или формой подачи. Еще встречаются (к сожалению часто) откровенные тролли, выскочки, любители (далеко не профессионалы) ржаки. Они — источники шума, гомонящая без толку толпа.

На кухне, в 2-х рядом стоящих аквариумах, в одном — рыбки, в другом — декоративный рак. Проходящие любят смотреть на рака, потому что тот при приближении человека становится взащитную позу, реагирует, дает обратную связь.

В зоопарке каждый считает своим долгом заставить животное как-то отреагировать на свои действия. Не раз кривляение в обезъяннике было высмеянно в мультиках и фильмах.

На аяксовом сайте отсутствие индикатора состояния, что что-то делается, воснинимается как поломка сайта. Пользователь уходит.

Бобук в своем блоге (хорошем про технические темы) призывает твитить и репостить.

Отправив письмо в тех-поддержку, ожидаешь подтверждения, что оно получено и рассмотрено.

Вы можете подбодрить авторов, оставив свой отзыв. Для бесплатных продуктов, запостив тикет с ошибкой. Для условно платных — проявить свое признание покупкой. И для всего, что вам нравится — способствовать распространению.
2012   по-русски
Earlier Ctrl + ↓