-
Рано или поздно наступает момент, когда возможностей фреймворка вам недостаточно. "Ах, как же так, забыли такую полезную кнопочку/контрол/приложение сделать..." - сетуете вы. Вот тогда и приходит в голову идея написать нехватающий функционал самому. Точнее дописать. И любой уважающий себя фреймворк предоставляет механизмы для собственного расширения/изменения. ExtJs не стал исключением.
По сути расширение это класс, наследованный от уже существующего в библиотеке и реализующий дополнительный функционал. Представим себе, что нам необходимо реализовать контрол, весьма похожий по своему назначению и функционалу на Ext.Panel, но с небольшим отличием - новая панель всегда должна быть квадратной формы (т.е. ширина всегда должна быть равна ее высоте)...
Что же там дальше...
-
Сегодня я начинаю цикл статей посвященных фреймворку ExtJs. Это не будут туториалы или мануалы для пошагового изучения библиотеки. Я просто хочу поделиться своим опытом, поэтому начну с чего попало, а именно – с событий.
С изобретением GUI и Мыши, DOM-объекты, подобные кнопкам и текстовым полям стали обладать некими событиями. Например, click, mouseover, keydown и другими. По сути событие – это сообщение, вызов функции, генерируемое одной частью приложения (источником), которое извещает другую часть приложения (приемник или подписчик) о том, что что-то случилось.
1:
Click me!
В ExtJs DOM-элементы оборачиваются в Ext.Element, поэтому подписка на тоже событие будет выглядеть так:
1: Ext.get('theDiv').on('click', function() {alert('You clicked me');});
При разработке сложных пользовательских интерфейсов...
Дальше об ExtJs: События
-
Вы бородатый веб разработчик и думаете уже видали всякие чудеса в JavaScript-коде? Хм, чтож тогда следующие задачки для вас.
1. ++Math.PI
2. (0.1 + 0.2) + 0.3 == 0.1 + (0.2 + 0.3)
3. typeof NaN
4. typeof typeof undefined
5. a = {null:null}; typeof a.null;
Разгадывать дальше...
-
Думаю все уже в курсе, что у нас кризис (теперь кажется финансовый), впрочем как и у всех. И каждый понимает что ничего хорошего ему это событие не принесет. А одним из "благ" кризиса является минимальная зарплата, т.е. та сумма денег, за которую и вы не против поработать и шефу увольнять вас пока нет повода. Звучит неплохо, правда? Неправда. У большинства людей хорошо развито чувство собственничества, поэтому пока это не мое, мне все равно кто этим владеет, но как только оно стало моим - хрен кто это у меня отберет! А тут такое дело - зарплату понижают!
Читать полностью....
-
Давно известно, что операции с DOM'ом весьма и весьма трудоемки. Потери в производительности заметны обычно в трех случаях:
- когда скрипт выполняет манипуляции с деревом объектов (создает, удаляет или изменяет часть дерева)
- если скрипт "заставляет" браузер перерисовывать (redraw) или перестраивать разметку (reflow) страницы
- и наконец, в случае когда скрипт "ищет" один из узлов дерева объектов (если дерево большое).
Последний пункт я уже рассматривал в одной из статей своего цикла Скаженi кабани,
на примере JQuery. Поэтому сегодня мы поговорим о первых двух. Эм...на
самом деле я схитрил, и первый пункт представляет собой ни что иное,
как причину появления второго пункта. Тогда сразу перейдем ко второму
пункту и попробуем разобраться в терминах перерисовывать и
перестраивать разметку:
Перерисовка страницы браузером
происходит в случае, когда что-то визуально изменилось, но разметка
страницы осталась прежней. Например, изменился цвет элемента или
элемент стал видимым/невидимым (с помощью visibility: [hidden,
visible], так как это не повлияет на разметку). Эта операция
существенно влияет на производительность веб приложения, так как
заставляет браузер пройтись по дереву объектов и определить какие
элементы видимы и как они должны быть отображены.
Читать полностью...
-
По роду деятельности получаю различного рода документы(требования) от наших
клиентов. Ввиду подписанного мною NDA, я не могу их публиковать. Поэтому я
представляю требования к проекту, как требования к постройке дома.
Уважаемый Архитектор,
Пожалуйста спланируте и построте мне дом. Я не совсем уверен, что именно мне
нужно, поэтому полностью полагаюсь на вас. Тем не менее, у меня есть несколько
идей, которые я бы хотел видеть реализованными в моем доме. К примеру, я бы
хотел иметь 2 или 44 спальных комнаты. Спланируйте пожалуйста, так чтобы эти
комнаты можно было потом легко убрать или добавить, потому что я приму
окончательное решение только тогда, когда увижу чертежи. А также оцените
финансовые затраты на каждый вариант, чтобы я мог принять правильное решение.
Читать полностью...
-
John Resig, создатель JQuery, совсем недавно провел небольшую презентацию
в Гугле. Темой встречи были улучшения производительности в браузерах(в
ближайших релизах), некие новшества в Javascirpt движках, новые способы
работы с DOM и изумительные эффекты с помощью CSS стилей. Но обо всем
по порядку.
Количество процессов на браузер
Одним из интереснейших нововведений в IE8 и Chrome стало то, что
теперь вкладки разделены на несколько процессов. Это дает огромное
преимущество в производительности, так как теперь различные веб
страницы могут загружаться и исполняться параллельно, не отнимая
машинных ресурсов друг у друга. В тоже время такие браузеры как FF,
Opera и более старые версии IE загружают/исполняют несколько страниц в
одном процессе (различные страницы выполняются отдельными потоками).
Читать полностью...
-
NHaml это .NET реализация популярного Rails Haml. Поэтому, сначала давайте попробуем понять что такое Haml. Расшифровывается он как XHTML Abstraction Markup Language, то есть это язык разметки для упрощёной генерации XHTML. В нашем арсенале уже имеются средства для достижения подобных целей: XSLT, ASP.NET Web Forms или даже лучше ASP.NET MVC и др. NHaml предоставляет альтернативный способ построения разметки ваших страниц, причем если сам XHTML весьма многословный язык, то NHaml пронизан духом лаконичности. Сокращения, ключевые слова, обозначение блоков — все направлено на сокращение объема кода при максимальном сохранении его ясности. Давайте рассмотрим следующий кусок кода:
ASP.NET MVC (винегрет из кода и html)
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true"
CodeBehind="List.aspx" Inherits="MvcApplication5.Views.Products.List" Title="Products" %>
<asp:Content ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
<h2><%= ViewData.CategoryName %></h2>
<ul>
<% foreach (var product in ViewData.Products) { %>
<li>
<%= product.ProductName %>
<div class="editlink">
(<%= Html.ActionLink("Edit", new { Action="Edit", ID=product.ProductID })%>)
</div>
</li>
<% } %>
</ul>
<%= Html.ActionLink("Add New Product", new { Action="New" }) %>
</asp:Content>
Эту же разметку (причем сохранив логику ее построения) можно написать и так...
Читать полностью...
-
Одной из моих излюбленных фич в Firebug является console.log.
Полагаю, у меня есть единомышленники. И мы (я и мои единомышленники)
часто забываем в коде, на продакшин серверах, наши излюбленные
console.log. А пользователи, не поставившие себе Firebug, лицезреют
некоторые Javascript ошибки... Решением данной проблемы могут быть либо
таблетки от склероза (если такие уже придумали) или иммитация console объектов и методов. Выглядит это примерно следующим образом...
Читать полностью...
-
Разработка веб-сайтов, впрочем как и любых других софтверных строений,
всегда стояла на распутьи трех дорог: скорость разработки, качество
продукта и производительность веб-сайта. И именно на последнее и
пожаловался недавно наш заказчик...
Что-то случилось...
... понял я, когда в час ночи зазвонил мой телефон. Сквозь сон я
выслушал все новогодние "пожелания" заказчика и краткое описание
проблемы - "Страница медленно работает". Затем пока нашел штаны, пока
нашел где у меня ноги, пока оделся и, спустя часы, я оказался на
работе. Нагрузочное (или даже стресc-тестирование) показало, что
страница действительно забирает 90% процессорного времени при больших
объемах данных на ней. После небольшого разбирательства выяснилось, что
показания %Time in GC счетчика производительности меньше оптимальных. После чего наш консилиум заключил, что приложение нерационально использует оперативную память сервера.
Читать полностью...
-
Недавно John Resig писал в блоге
о релизе бета-версии JQuery 1.3. Большинство новых фич опубликованы в
официальном roadmap, но я вам расскажу то, о чем никто не знает..
Тсссс...
Sizzle Selector Engine
Новый движок
для навигации по ДОМу, который Джон аннонсировал еще в августе, должен
работать в четыре раза быстрее под Firefox. (А как же Internet
Explorer?)
Забиваем на определение версии браузера
Читать полностью...
-
Юнит-тесты это то, на что никогда нет времени. А если есть время, то
нет желания. И наконец, если есть время и желание, то обязательно
найдется какой-нибудь засранец, который найдет, как забрать твое время
и отобьет всякое желание что-либо делать вообще… Да, заказчику тяжело
объяснить что такое юнит-тесты и зачем они нужны. Но тем не менее, хочу
сделать небольшой обзор нового плагина для Firefox, который позволяет юнит-тестить ваш джаваскрипт. Если быть совсем точным, то это расширение для Firebug – излюбленного инструмента javascript-разработчиков.
Читать полностью...
-
Я, как вы знаете, пишу не только статьи в свой блог, но и код.
Программный код. Поэтому, меня зачастую интересуют вопросы, которые
нормальным людям в голову и не лезут. Суть сегодняшней дилеммы очень
простая – хорошо ли генерировать исключительные ситуации из
конструктора? Это скорее философский или этический вопрос, нежели
сложная техническая задача. И все же.
Читать полностью...
-
Разница в продуктивности между хорошим
программистом и плохим программистом уже давно известна. Спасибо Фрэду
Букс (Fred Books) за то, что все посчитал, измерял и рассказал другим в
своей книге Мифический Человеко-месяц
Менеджеры программных проектов давно поняли, что
хорошие и плохие программисты очень сильно различаются между собой по
производительности. Однако реально измеренные величины поразительны. В
одном из исследований Сакман (Sackman), Эриксон (Erikson) и Грант
(Grant) измеряли производительность труда в группе опытных
программистов. Внутри одной лишь этой группы соотношение между лучшими
и худшими результатами составило примерно 10:1 по производительности
труда и 5:1 по скорости работы программ и требуемой для них памяти!
Короче, программист, зарабатывающий 20 тысяч долларов в год, может быть
в десять раз продуктивнее программиста, зарабатывающего 10 тысяч
долларов. Правда, возможно и обратное. Полученные данные не выявили
какой-либо корреляции между стажем работы и производительностью. (Я не
уверен, что это всегда справедливо.)
Читать полностью...
-
Как вы обрабатываете свои XML-данные? С помощью LINQ to XML, XPath,
XmlDocument или же сами парсите (тогда вам пора в больничку). Лично я
предпочитаю писать XPath-выражение, потому что они (относительно)
просты в написании и, соответственно, в чтении. Да и скорость обработки
этих выражений всегда радовала своей производительностью. Какое-то
время назад вышел extension для LINQ to XML, позволяющий использовать
XPath выражения.
Читать полностью...