Как стать автором
Обновить
3
0
Отправить сообщение

Работа с объектами в JavaScript: теория и практика

Время на прочтение15 мин
Количество просмотров219K
В этой статье я хочу по возможности полно и последовательно рассказать о том, что такое объект в JavaScript, каковы его возможности, какие взаимоотношения могут строиться между объектами и какие способы «родного» наследования из этого вытекают, как это все влияет на производительность и что вообще со всем этим делать :)

В статье НЕ будет ни слова про: эмуляцию традиционной класс-объектной парадигмы, синтаксический сахар, обертки и фреймворки.

Сложность материала будет нарастать от начала к концу статьи, так что для профи первые части могут показаться скучными и банальными, но дальше будет намного интереснее :)

если не боимся многабуков, то читаем дальше
Всего голосов 104: ↑103 и ↓1+102
Комментарии216

Кунг-фу: стиль JavaScript

Время на прочтение5 мин
Количество просмотров2.2K
Эта статья начиналась как комментарий к другой статье на habrahabr. После написания первого листа, я понял, комментарий слишком обширный получился :). Я решил написать, потому что хочу заострить внимание на моментах, которые, на мой взгляд, были упущены. Ограничение этой статьи — моя цель изложить всё максимально доступно, не ищите здесь математической точности в определении терминов, и всё же я прилагаю ссылки где математики найдут высококлассные понятные только им определения :)

Наверно каждую статью по JS принято начинать со слов о его недооцененности :) Это правда :) Когда я пару лет назад говорил о том что JS мой любимый язык на меня смотрели, как на школьника-переростка, который только что написал свою первую страницу на HTML, а те кто меня знал, как на гроссмейстера, который сказал что он только и знает как фигуры ходят :). Таких людей не стало намного меньше, увы :(

Итак, ...
Всего голосов 104: ↑96 и ↓8+88
Комментарии59

GNU Make может больше чем ты думаешь

Время на прочтение3 мин
Количество просмотров6.8K
Как только исходники проекта надо распространять, то возникает необходимость использовать систему сборке, вместо того что нагенерила любимая IDE. В мире unix (с подачи gnu) традиционно используется autotools, ему есть отличные альтернативы в виде cmake или scons. Но почему-то ядро Linux собирается при помощи GNU Make, а вся FreeBSD включая порты при помощи BSD Make. WTF?

Однажды намучившись с autotools, я решил провести эксперимент — насколько можно перелопатить Makefile, чтобы обеспечить себе более-менее удобную сборку.

Читать дальше →
Всего голосов 45: ↑35 и ↓10+25
Комментарии60

«Совершенный Ajax» – новый подход к построению настоящих клиент-серверных web-приложений

Время на прочтение11 мин
Количество просмотров10K
«Совершенный Ajax» — новый подход к построению web-приложений, при котором web-сервер не генерирует ни строчки HTML-кода и взаимодействует с внешним миром только посредством web-служб; а клиентский интерфейс реализуется только на основе клиентских HTML, CSS, JavaScript.

Статья состоит из двух частей. В первой части — более живой и провокационной я постараюсь заинтересовать проблемой, рассказать о технологии «Совершенный Ajax» и показать ее применение на примере нашего проекта «Система Интерактивного Тестирования Знаний “Синтез”» (который имеет ряд интересных особенностей, таких, как использование серверного JavaScript на платформе Mozilla Rhino, прототипно-ориентированная ORM и поддержка SPARQL — языка запросов к Semantic Web).

Вторая часть – более занудная будет содержать много технических деталей и выйдет в следующий раз.

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



Попробуйте угадать: к какой архитектуре относятся web-приложения?

К клиент-серверной говорите? Я ожидал, что Вы так ответите :-)

Что ж, давайте разберемся. В клиент-серверной архитектуре выделяют:
  • Сервер — отвечает за хранение данных и реализацию бизнес-логики приложения.

  • Клиент — отвечает за взаимодействие с пользователем [1].

Реализация бизнес-логики на сервере и взаимодействие с пользователем на клиенте четко разделены.

Преимущества клиент-серверной архитектуры очевидны; мы их все знаем:
  1. Бизнес-логика не смешивается с пользовательским интерфейсом.
  2. Можно реализовать несколько клиентов с разными пользовательскими интерфейсами: интерфейс командной строки, оконный Windows-интерфейс, Flash, web-интерфейс, мобильный интерфейс и т.д.
  3. Клиентский компьютер не требователен к ресурсам;
  4. И т.д.


Но, относятся ли web-приложения к клиент-серверной архитектуре? Web-сервер

Действительно, в web-приложениях есть сервер, отвечающий за бизнес логику приложения.

Но! За реализацию интерфейса отвечает не клиент, а тоже сервер. На сервере происходит обработка клиентской формы. Сервер генерирует HTML-код пользовательского интерфейса.

Браузер Клиент, т.е. браузер лишь визуализирует уже готовый HTML-код интерфейса. Это, фактически, то же самое, что прицепить к серверу монитор и объявить этот монитор клиентом…

Читать дальше →
Всего голосов 150: ↑115 и ↓35+80
Комментарии152

JsOOP

Время на прочтение4 мин
Количество просмотров841
В статье речь пойдет об имитации классического ООП и строгой типизации в JavaScript (< 2.0).

Я расскажу про JsOOP – мини-фреймворк для написания JavaScript-кода в объектно-ориентированном стиле.

Читать дальше →
Всего голосов 40: ↑31 и ↓9+22
Комментарии145

Курсоры в Mysql.

Время на прочтение6 мин
Количество просмотров111K
По долгу службы мне пришлось сталкиваться с курсорами. Хотелось бы рассказать, что это такое и о некоторых особенностях работы с ними. Официальная документация тут — dev.mysql.com/doc/refman/5.1/en/cursors.html Википедия даёт такое определение курсору курсор:
Читать дальше →
Всего голосов 44: ↑40 и ↓4+36
Комментарии13

Форматирование длинных SQL-запросов

Время на прочтение1 мин
Количество просмотров15K
Вступил недавно в локальный оффлайн-холивор на тему форматирования длинных SQL-запросов.

Собственно, весь холивор сводится к тому, что удобнее читать — INNER JOIN ДО таблицы, или ПОСЛЕ неё, а так же — AND — до или после обьявления условия.

Два варианта и вопрос к хабровчанам под катом:

Читать дальше →
Всего голосов 67: ↑42 и ↓25+17
Комментарии94

Верстка скругленных границ и острых углов

Время на прочтение4 мин
Количество просмотров21K
Сложность элементов интерфейса увеличивается с каждым новым макетом, что доставляет немало хлопот верстальщикам. Развивающиеся технологии позволяют создавать в WEBе сложные приложения (Google не даст мне соврать), поэтому дизайнеры себя не сдерживают и рисуют всё более навороченные вещи. Как правило, это приводит к большому количеству графики на страницах.

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

Читать дальше →
Всего голосов 190: ↑183 и ↓7+176
Комментарии96

Хранение файлов в MySQL и их быстрая раздача

Время на прочтение3 мин
Количество просмотров97K
Думаю у многих возникала необходимость хранить файлы, связанные с записью в таблице. Это может быть картинка к новости, аватар, загруженный пользователем файл — да все, что угодно. Обычно в этому случае поступают просто — файл ложится в файловую систему, а ссылка на него — в запись БД.
Но у такого классического похода множество недостатков:
  • файлы не удаляются при удалении соответствующей записи БД
  • проблемы при одновременной попытке обновления файла
  • нарушение синхронизации между БД и файловой системой при откате транзакции
  • при резервном копировании и восстановлении информации в БД может возникнуть рассинхронизация с файловой системой
  • файлы не подчиняются ограничениям доступа, наложенным с помощью БД

Больше о проблемах, возникающих при хранении файлов отдельно от БД можно почитать в презентации SQL Antipatterns, раздел Phantom Files, страница 60. Кстати, автор презентации предлагает решение — хранить файлы прямо в БД, в поле типа BLOB. Правда следует замечание, что это должно быть взвешенное решение в каждом конкретном случае. Ведь при таком способе хранения файлов вебсервер должен при каждом запросе вызывать некий скрипт, который будет извлекать файл из БД и отдавать пользователю, что неминуемо отрицательно скажется на производительности.
Для поиска решения данной проблемы был проведен мозговой штурм и придумано несколько вариантов решения проблемы:
Читать дальше →
Всего голосов 71: ↑59 и ↓12+47
Комментарии99

MySQL и JOINы

Время на прочтение6 мин
Количество просмотров148K
Поводом для написания данной статьи послужили некоторые дебаты в одной из групп linkedin, связанной с MySQL, а также общение с коллегами и хабролюдьми :-)

В данной статье хотел написать что такое вообще JOINы в MySQL и как можно оптимизировать запросы с ними.

Читать дальше →
Всего голосов 85: ↑83 и ↓2+81
Комментарии67

Вертикальный скрол c краткой информацией.

Время на прочтение1 мин
Количество просмотров2.3K
Когда то давно, не помню где я читал о том, что обычный скрол можно сделать более функциональным и предлагалось ряд решений.
Мне эти идеи понравились и вот спустя много лет :)…
Предлагаю свою реализацию на javascripte. Идея в том чтобы на фоне скрола показывать эскиз всего текста, а с помощью движка скрола видимую часть текста. При таком подходе сразу видно где находится картинка, заголовок, а где параграф.
Читать дальше →
Всего голосов 91: ↑88 и ↓3+85
Комментарии85

Визуализируем данные на JavaScript

Время на прочтение3 мин
Количество просмотров4.5K

Развитие компьютерной графики подталкивает нас к изобретению всё новых способов графического представления данных. Разрабатывались различные прикладные программы для визуализации данных на локальных компьютерах. Однако всё изменилось с развитием интернета: в нём содержатся колоссальные объёмы информации, которые нам постоянно хочется представить как-то удобнее, дружелюбнее, понятнее. Что же мы имеем на сегодняшний день?

Существует немалое число серверных библиотек и утилит, способных генерировать сложные графики. Однако я считаю, что такой подход не всегда оптимален. Если мы можем производить визуализацию на стороне клиента с помощью JavaScript, то почему бы нам не воспользоваться такой возможностью? Логика работы подобной связки проста: сервер генерирует данные, а клиент их визуализирует.

Разумеется, вы можете воспользоваться Flash, Silverlight или Java-апплетами, однако в этом обзоре я хотел бы вам показать библиотеки визуализации, написанные на чистом JavaScript.

Читать дальше →
Всего голосов 74: ↑72 и ↓2+70
Комментарии27

Template + jQuery + MVC = jsMVC

Время на прочтение5 мин
Количество просмотров2.9K
Разрабатывая сайты мне всегда хотелось облегчить себе жизнь, так я познакомился с jQuery. Все было бы хорошо если бы проекты не погружались в зыбучую смесь UI и js кода. Следующим этапом стало то что мы выделили UI Шаблоны в отдельные файлы, код стал более чистым, но, черт побери, все равно приходилось писать кучу UI кода, например вставка и настройка дополнительных компонентов в шаблон, event bind, надписи и т.д. И только после всего этого на выходе получался нужный нам компонент. Возникало, конечно, много проблем, особенно когда дизайнер менял шаблон, но все это решаемо.
Читать дальше →
Всего голосов 55: ↑49 и ↓6+43
Комментарии25

Интервально-ассоциативный массив

Время на прочтение2 мин
Количество просмотров4.7K
Замечательная вещь — ассоциативный массив. Самые разные задачи решаются с его помощью легко, приятно и быстро. А как быть когда значение должно принадлежать не одному ключу, а быть «размазанным» на некоторый интервал?
Представьте, что вам нужно сделать программу для составления расписания дежурства менеджеров интернет-магазина. Работа с ним должна была максимально простой, примерно так:
# легко назначить
>>> timetable['08:00' : '12:00'] = 'Иванов'
>>> timetable['12:00' : '16:00'] = 'Петров'

# как узнать кто дежурил в 13:51 ?
>>> print timetable['13:51']
Петров

# легко просмотреть поэлементо полный список
>>> for interval, person in timetable.items(): print interval, person
('08:00', '12:00') Иванов
('12:00', '16:00') Петров

# ...или одной строкой
>>> print timetable
{['08:00', '12:00'] => 'Иванов', ['12:00', '16:00'] => 'Петров'}


Дальше - больше!
Всего голосов 103: ↑96 и ↓7+89
Комментарии80

Анти-паттерны Test Driven Development

Время на прочтение4 мин
Количество просмотров19K
Я надеюсь, что как грамотный разрабочик, вы имеете представление о unit-тестировании и сделаете себе в голове пару мысленных отметок о том, чего надо избегать при написании тестов. Знакомьтесь:

Лжец (The Liar)

Unit-тест, который успешно выполняет все кейсы и выглядит работающим правильно, однако при более детальном рассмотрении обнаруживается, что он на самом деле не тестирует то, что должен.

Читать дальше →
Всего голосов 111: ↑109 и ↓2+107
Комментарии64

120 dpi и шрифты в em

Время на прочтение8 мин
Количество просмотров12K
шрифт в em

Шрифты в Em/% хороши всем — возможностью пользователей IE увеличивать кегль, заботой о пользователях, что предпочитают увеличивать размер шрифта браузера по-умолчанию, чтоб лучше видеть текст, да и просто являются нормой для профессиональных верстальщиков.

Минусы: … их вроде как нет, но!
А что если у пользователя разрешение экрана выставлено не в стандартное 96 dpi, а в 120?
Сайт с увеличенными шрифтами смотрится уже не так красиво, как нарисовал дизайнер — ведь масштабируются только шрифты, а не весь сайт! А разрешение 120dpi становится всё популярней, особенно на ноутбуках! Что же делать? Возвращаться к px?

Нет!
как сделать сайт одинаковым на 96 dpi и 120
Всего голосов 157: ↑150 и ↓7+143
Комментарии65

CSS Font-Size: em vs. px vs. pt vs. percent

Время на прочтение3 мин
Количество просмотров275K
Одним из наиболее запутанных аспектов CSS является применение font-size атрибута для масштабирования текста. Используя CSS, вы можете изменить размер текста в браузере с помощью четырех разных единиц измерения. Какая из этих четырех единиц лучше всего подходит для веб? Это вопрос, который породил разнообразные дискуссии и критику. Поиск окончательного ответа затруднен, поскольку вопрос сам по себе сложный.
Читать дальше →
Всего голосов 87: ↑75 и ↓12+63
Комментарии136

Делаем вращательный регулятор.

Время на прочтение11 мин
Количество просмотров12K
Этим топиком я продолжаю цикл статей о написании всяких вкусностей для MooTools. Сегодня мы на чистом JavaScript сделаем вращательный регулятор — контрол, который часто используют в работающих со звуком программах для регулировки громкости или баланса. Вот примерно такой:

Sample
Итак, поехали
Всего голосов 104: ↑99 и ↓5+94
Комментарии72

Оптимизация MySQL запросов

Время на прочтение4 мин
Количество просмотров125K
В повседневной работе приходится сталкиваться с довольно однотипными ошибками при написании запросов.

В этой статье хотелось бы привести примеры того, как НЕ надо писать запросы.
Читать дальше →
Всего голосов 143: ↑132 и ↓11+121
Комментарии142

Компоненты в Unobtrusive JavaScript

Время на прочтение7 мин
Количество просмотров1.7K
Это продолжение моей статьи «Клиентская оптимизация и этапы разработки». В ней были даны рекомендации по созданию быстрых сайтов, а в том числе, фактически, я рассказал что должен сделать Web-разработчик, чтобы следовать принципам «Ненавязчивого JavaScript»:
  • разделение структуры (HTML) / оформления (CSS) и поведения (JavaScript);
  • использование JavaScript для повышения удобства использования уже рабочего приложения;
  • применение техники Graceful degradation — если браузер не поддерживает те или иные функции, которые мы добавляем в приложение с помощью JavaScript — приложение всё равно остается рабочим.
В этой же статье я хотел бы рассказать об алгоритме реализации принципов «ненавязчивости» на JavaScript.
Читать дальше →
Всего голосов 27: ↑24 и ↓3+21
Комментарии18

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность