Pull to refresh
  • by relevance
  • by date
  • by rating

Еще раз про утилиты, экономящие ваше время

Lumber room
Да-да, об этом уже писали, но у меня свой подход к решению проблемы ускорения работы. Это связка из трех компонентов:
— Launchy
— Punto Switcher
— Свое Меню

Все они важны, о каждом подробнее…

Читать дальше →
Total votes 40: ↑31 and ↓9 +22
Views336
Comments 77

JavaScript: ограничение частоты исполнения функции

Website development
JavaScript — удивительный язык, с которым порой удаётся вытворять неожиданно классные вещи. Хочу познакомить вас с немножко нестандартным решением одной проблемы быстродействия, с которой я недавно столкнулся. Предупреждение: не для новичков.

Исходные данные: ресурсоёмкая функция, обновляющая определённые элементы на экране по наступлению определённых событий (движение мышки, например).
Проблема: когда события, вызывающие функцию, происходят слишком часто за короткий промежуток времени, интерфейс может начать серьёзно тормозить. Скажем, если событие произойдёт 1000 раз за несколько секунд, то и обновление — столько же. Для интерфейса молниеносная скорость отрисовки изменений может быть не так важна, а вот общее быстродействие, которое в данном случае страдает — очень даже.
Задача: ограничить функцию таким образом, чтобы она исполнялась не чаще, чем раз за определённый промежуток времени. При достаточном малом таком промежутке визуально задержки не будут заметны, зато кол-во вызовов может сократиться в несколько раз, что в свою очередь очень сущесвенно сократит нагрузку и поможет избавиться от торможения.

Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Views12.5K
Comments 14

Ускорение Оперы, часть 1

Opera
  • Flash часто загружает всю виртуальную машину Java из-за технологии Live Connect (она часто бывает совершенно лишней);
    Также очень увеличивает использование памяти Оперой.
    (Как отключить: operawiki.info/FlashBlock)
    Попробуйте «Удалить личные данные», если вы считаете это оправданым для повышения произвдительности (действительно хорошо помогает в большинстве случаев)
    Если ваши оптимизаторские наклонности достигают маниакальной степени, отключите JavaScript
    (попробуйте нажать F12 и вы увидите удобную менюшку, где можете сделать еще много всякого)
    Включите «Принимать все Cookies» (Это также повлияет на вашу безопасность, www.opera.com/support/tutorials/security/privacy) (лично я не знаю, как это влияет на производительность, но на официальной wiki так пишут)
    Отключите FavIcons ( Prefs » Advanced » Browsing » Page Icons )
    Отключите спец.эффекты UI и используйте родной скин (он потребляет меньше ресурсов)
    Храните кэш на диске отличном от того, куда установлена ось, делайте иногда дефрагментацию этого диска
    Вы можете распаковать исполнимые файлы (http://operawiki.info/PackedExecutables)
    Если у вас кроме Опервы не открты другие программы, задайте приоритет процесса Opera в 'High' через диспетчер задач

    Материал по operawiki.info/OperaPerformance (EN) и с множества форумов.
    Завтра читайте продолжение, если в комментариях будут интересные заметки на тему — я их учту, так что пишите.
    Спасибо за внимание, это пока только общие рекомендации, в продолжении будет больше, надеюсь, кому-то это окажется полезным.
Total votes 19: ↑10 and ↓9 +1
Views2.6K
Comments 13

Ускорение Оперы, часть 1

Opera
  • Flash часто загружает всю виртуальную машину Java из-за технологии Live Connect (она часто бывает совершенно лишней);
    Также очень увеличивает использование памяти Оперой.
    (Как отключить: operawiki.info/FlashBlock)
    Попробуйте «Удалить личные данные», если вы считаете это оправданым для повышения произвдительности (действительно хорошо помогает в большинстве случаев)
    Если ваши оптимизаторские наклонности достигают маниакальной степени, отключите JavaScript
    (попробуйте нажать F12 и вы увидите удобную менюшку, где можете сделать еще много всякого)
    Включите «Принимать все Cookies» (Это также повлияет на вашу безопасность, www.opera.com/support/tutorials/security/privacy) (лично я не знаю, как это влияет на производительность, но на официальной wiki так пишут)
    Отключите FavIcons ( Prefs » Advanced » Browsing » Page Icons )
    Отключите спец.эффекты UI и используйте родной скин (он потребляет меньше ресурсов)
    Храните кэш на диске отличном от того, куда установлена ось, делайте иногда дефрагментацию этого диска
    Вы можете распаковать исполнимые файлы (http://operawiki.info/PackedExecutables)
    Если у вас кроме Опервы не открты другие программы, задайте приоритет процесса Opera в 'High' через диспетчер задач

    Материал по operawiki.info/OperaPerformance (EN) и с множества форумов.
    Завтра читайте продолжение, если в комментариях будут интересные заметки на тему — я их учту, так что пишите.
    Спасибо за внимание, это пока только общие рекомендации, в продолжении будет больше, надеюсь, кому-то это окажется полезным.
Rating 0
Views552
Comments 0

Ускорение Оперы, часть 1

Opera
  • Flash часто загружает всю виртуальную машину Java из-за технологии Live Connect (она часто бывает совершенно лишней);
    Также очень увеличивает использование памяти Оперой.
    (Как отключить: operawiki.info/FlashBlock)
    Попробуйте «Удалить личные данные», если вы считаете это оправданым для повышения произвдительности (действительно хорошо помогает в большинстве случаев)
    Если ваши оптимизаторские наклонности достигают маниакальной степени, отключите JavaScript
    (попробуйте нажать F12 и вы увидите удобную менюшку, где можете сделать еще много всякого)
    Включите «Принимать все Cookies» (Это также повлияет на вашу безопасность, www.opera.com/support/tutorials/security/privacy) (лично я не знаю, как это влияет на производительность, но на официальной wiki так пишут)
    Отключите FavIcons ( Prefs » Advanced » Browsing » Page Icons )
    Отключите спец.эффекты UI и используйте родной скин (он потребляет меньше ресурсов)
    Храните кэш на диске отличном от того, куда установлена ось, делайте иногда дефрагментацию этого диска
    Вы можете распаковать исполнимые файлы (http://operawiki.info/PackedExecutables)
    Если у вас кроме Опервы не открты другие программы, задайте приоритет процесса Opera в 'High' через диспетчер задач

    Материал по operawiki.info/OperaPerformance (EN) и с множества форумов.
    Завтра читайте продолжение, если в комментариях будут интересные заметки на тему — я их учту, так что пишите.
    Спасибо за внимание, это пока только общие рекомендации, в продолжении будет больше, надеюсь, кому-то это окажется полезным.
Total votes 8: ↑2 and ↓6 -4
Views4.1K
Comments 3

Архитектура YASS. Часть 3: проблема выбора

JavaScript
Это третья статья из цикла, посвященного разбору практических методов, заложенных в основу YASS. Первая статья была про модульное построение, вторая — про логику выбора CSS-селектора и организацию циклов.

Условное ветвление



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

var a = 1,
	b = 2,
	c = 3;
if(a == 1) {
	if (b == 2) {
		if (c == 3) {
			...
		}
	}
}

Читать дальше →
Total votes 35: ↑29 and ↓6 +23
Views732
Comments 33

Производительность и оптимизация отрисовки графики во Flash

Adobe Flash

Во время создания нашей игры на флэше (осторожно — вконтакт!), в определенный момент мы столкнулись с проблемой производительности.

FPS начал падать даже на весьма производительных системах… Проблема была типична для всех флэш-игр — большое количество векторной графики. Как вы понимаете, векторная графика — это весьма ресурсоемкая штука. Ведь при рендере плееру приходится заново рассчитывать разнообразные хитрые кривые и т.п., что явно проигрывает по скорости работе с растровой графикой. При чем — проигрывает на порядок (а то и несколько порядков).

По старой доброй традиции в зубы был взят Google и начался поиск решения…
Читать дальше →
Total votes 47: ↑34 and ↓13 +21
Views11.3K
Comments 49

Массивы против контейнеров в задачах матмоделирования

C++
Sandbox

Введение

Так уж сложилось, что моя работа тесно связана с математическим моделированием физических процессов. Математическое моделирование — это совершенно особенная область программирования. Расчет даже относительно простого физического процесса может занимать несколько дней и даже недель. Поэтому на первый план выходит производительность программы, пускай даже в ущерб удобству написания и чтения кода. Однако до недавнего времени быстродействие моих программ меня мало заботило: вполне хватало грубых сеток, для которых расчеты занимали что-то около суток. Но постепенно сетки становились все подробнее, и время работы программ неуклонно росло. Тогда я стал искать узкие места в своей программе. Сначала в алгоритмах. Потом дело дошло до структур данных. И тут меня очень заинтересовал вопрос «а что же лучше использовать для хранения векторов: массивы или контейнеры?»
Читать дальше →
Total votes 18: ↑15 and ↓3 +12
Views11K
Comments 80

Маленькая хитрость для отображения большого объёма данных в ListView

Development for Android
Tutorial


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

Проблема


Стандартный механизм отображения списков из базы данных в Android выглядит примерно так:
  • Activity содержит ListView
  • ListView обращается к экземпляру CursorAdapter
  • CursorAdapter получает данные из объекта, реализующего интерфейс Cursor
  • Cursor получен либо из ContentProvider, либо сразу из SQLiteDatabase


Всё работает нормально ровно да тех пор, пока количество строк в Cursor сравнительно небольшое. Но если в нём 50 тысяч, 100 тысяч и более строк (хотя дело не только в количестве строк, но об этом чуть позже), время от времени список будет притормаживать. Особенно это заметно при «быстрой прокрутке», если у ListView установлено в true свойство fastScrollEnabled.
Читать дальше →
Total votes 49: ↑46 and ↓3 +43
Views39.9K
Comments 26

Насколько плохим код должен быть?

High performanceProgrammingSystem Analysis and Design
Translation
Эрик Липперт — ветеран Microsoft, проработавший в компании 16 лет и стоящий за разработкой VBScript, JScript и C#.

На прошлой неделе в комментариях к одной из статей разгорелся спор о роли низкоуровневой оптимизации в программировании, и я вспомнил относящуюся к этому статью Эрика. Она была написана в конце 2003, и хотя реалии с тех пор несколько изменились — принципы остались теми же самыми. Можете мысленно заменить ASP и VBScript на PHP, JavaScript, или на другой скриптовый язык по вашему вкусу.

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


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

Например, за семь лет в Microsoft я получил десятки вопросов, аналогичных по своей сути этому, заданному в конце 1990-х:
У нас есть код на VBScript, и в одной часто вызываемой функции мы определяем оператором Dim несколько переменных, которые нигде в функции не используются. Не замедляется ли каждый вызов функции из-за объявления этих переменных?
Какой интересный вопрос! В компилируемом языке, таком как Си, объявление локальных переменных общим размером n байт всего лишь вычитает n из указателя стека при входе в функцию. Если n будет чуть больше или чуть меньше, затраты времени на вычитание никак не изменятся. Наверное, в VBScript точно так же? Оказалось, что нет! Вот что я написал автору вопроса:
Читать дальше →
Total votes 171: ↑146 and ↓25 +121
Views72.7K
Comments 246

Мониторинг PostgreSQL + php-fpm + nginx + диска с помощью Zabbix

PostgreSQL
Sandbox
Tutorial
Много информации в сети по Zabbix, много и шаблонов самописных, хочу представить на суд аудитории свои модификации.
Zabbix — очень удобный и гибкий инструмент мониторинга. Хочешь — сотню мониторь, хочешь — тысячу станций, а не хочешь — следи за одним сервером, снимай сливки во всех разрезах. Буду не против отдать на github, если кто коллекционирует схожие.

image

Так случилось, что решили мы выложить на хостинг базу данных с оберткой из php-fpm+nginx. В качестве БД — postgres. Мысли собирать данные о работе машины были еще до покупки хостинга — это нужно, это полезно! Волшебным пенделем к внедрению системы послужили тормоза жесткого диска на нашей VDS станции — в начале скриптом каждую минуту кладем время и замерянную скорость в файл, а потом в экселе строим графики, сравниваем как было/стало, снимаем количественную статистику. И это всего один параметр! А вдруг виноват не VDS, а наши приложения, которые на нем работают. Вобщем, мониторить надо много, мониторить надо удобно!
Читать дальше →
Total votes 23: ↑22 and ↓1 +21
Views32.9K
Comments 34

Применение инфраструктуры кеширования в ASP.NET, продолжение

Website development.NETC#
В прошлом посте я рассказывал, как применять инфраструктуру кеширования в ASP.NET для увеличения производительности сайта. Добавлением нескольких строк кода мне удалось увеличить производительность домашней страницы сайта в 5 раз. В этот раз пойдем дальше и выжмем еще больше производительности, не прибегая к различным хакам.
Читать дальше →
Total votes 16: ↑14 and ↓2 +12
Views15.4K
Comments 3

Практика автоматизации измерения показателей быстродействия СЭД

ДоксВижнERP-systemsECM
Системы электронного документооборота и ERP-системы представляют собой комплексные программные продукты, чаще всего состоящие из множества подсистем. Части любой системы работают как непосредственно в диалоге с пользователем, так и фоновом режиме, выполняя определённую часть задач на сервере.

Чтобы контроль производительности системы проводился в обоих направлениях, администратору системы нужны удобные инструменты для замеров, позволяющие вовремя найти слабое звено и предпринять меры по улучшению быстродействия. В этой статье я поделюсь своим опытом в том, как можно решить вопрос автоматических замеров показателей быстродействия системы на примере системы электронного документооборота*.
В отличие от других программных продуктов, для СЭД существуют определённые требования по быстродействию: это один из важных параметров, за которым необходимо следить.

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


Читать дальше →
Total votes 3: ↑3 and ↓0 +3
Views5.8K
Comments 2

Пишем быстрый и экономный код на JavaScript

JavaScriptProgrammingClient optimization
Translation
Такой движок JS, как V8 (Chrome, Node) от Google, заточен для быстрого исполнения больших приложений. Если вы во время разработки заботитесь об эффективном использовании памяти и быстродействии, вам необходимо знать кое-что о процессах, проходящих в движке JS браузера.

Что бы там ни было — V8, SpiderMonkey (Firefox), Carakan (Opera), Chakra (IE) или что-то ещё, знание внутренних процессов поможет вам оптимизировать работу ваших приложений. Но не призываю вас оптимизировать движок для одного браузера или движка – не делайте так.

Задайте себе вопрос:
— можно ли что-то в моём коде сделать более эффективным?
— какую оптимизацию проводят популярные движки JS?
— что движок не может компенсировать, и может ли сборка мусора подчистить всё так, как я от неё ожидаю?



Есть много ловушек, связанных с эффективным использованием памяти и быстродействием, и в статье мы изучим некоторые подходы, которые хорошо показали себя в тестах.
Читать дальше →
Total votes 78: ↑72 and ↓6 +66
Views65.2K
Comments 29

Пуленепробиваемые тесты JavaScript

JavaScriptWeb services testing
Translation
Писать тесты скорости JS не так легко, как кажется. Даже не касаясь вопросов кроссбраузерной совместимости, можно попасть во множество ловушек.

Именно поэтому я и сделал jsPerf. Простой веб-интерфейс для того, чтобы каждый мог создавать и делиться тестами, и проверять быстродействие различных фрагментов кода. Ни о чём не нужно беспокоиться – просто вводите код, быстродействие которого необходимо измерить, и jsPerf создаст для вас новую задачу по тестированию, которую вы затем сможете запустить на разных устройствах и в разных браузерах.
Читать дальше →
Total votes 21: ↑19 and ↓2 +17
Views14.1K
Comments 9

Большое обзорное тестирование языков программирования

Entertaining tasksProgrammingCompilers
Sandbox
Недавно очередной раз отработал со студентам 2-го курса 2-семестровую дисциплину «Алгоритмические языки». Обзорно рассмотрели несколько дюжин языков программирования. Один из студентов, Вадим Шукалюк, захотел получше с ними познакомиться, получить более четкое представление о каждом из них. Посоветовал ему провести небольшое исследование. Чем и увлёк. Предлагаю свой отчёт по проделанной за несколько месяцев вместе с ним работе.

У каждого языка программирования есть свои достоинства и недостатки. Одна из важнейших характеристик транслятора с любого языка — это скорость исполнения программ. Очень трудно или даже невозможно получить точную оценку такой скорости исполнения. Ресурс http://benchmarksgame.alioth.debian.org/ предлагает игровую форму для проверки такой скорости на разных задачах. Но число языков, представленных на этом ресурсе, довольно невелико. Предельную ёмкость стека, критическую величину для рекурсивных вычислений проверить проще, но она может меняться в разных версиях транслятора и быть зависимой от системных настроек.

Тестировались следующие трансляторы: си (gcc, clang, icc), ассемблер (x86, x86-64), ява (OpenJDK), паскаль (fpc), яваскрипт (Google Chrome, Mozilla Firefox), лисп (sbcl, clisp), эрланг, хаскель (ghc, hugs), дино[1], аук (gawk, mawk, busybox), луа, рубин, бейсик (gambas, libre office), питон-2, пи-эйч-пи, постскрипт (gs), пролог (swipl, gprolog), перл, метапост, ТEХ, тикль, бэш. Исследовались как собственно скорость исполнения нескольких небольших, но трудоёмких алгоритмов, так и:

  • качество оптимизации некоторых трансляторов;
  • особенности при работе с процессорами Intel и AMD;
  • предельное число рекурсивных вызовов (ёмкость стека).

Читать дальше →
Total votes 50: ↑25 and ↓25 0
Views63.9K
Comments 59

Скорость локального форматирования чисел

High performanceJavaScriptNode.JSBrowsers

I. Задача



В одном из скриптов столкнулся с необходимостью отформатировать вывод больших чисел для удобства чтения. Нашёл несколько рецептов, как разделить число на группы по разряду, но в обсуждениях высказывались сомнения в производительности. Решил провести несколько тестов.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Views6.9K
Comments 29

Супермедленный и супербыстрый бенчмарк

ProgrammingJava

В недавней статье про производительность Java разгорелась дискуссия на тему измерения производительности. Глядя на неё, с грустью приходится сознавать, что многие люди до сих пор не понимают, насколько сложно правильно измерить время выполнения того или иного кода. Кроме того, люди вообще не привыкли, что один и тот же код в разных условиях может выполняться существенно разное время. К примеру, вот одно из мнений:


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

К сожалению, самый примитивный бенчмарк в мире — это как правило неправильно написанный бенчмарк. И не следует надеяться, что неправильный бенчмарк измерит результат хотя бы с точностью до порядка. Он может измерить что-нибудь абсолютно другое, что будет совершенно отличаться от реальной производительности программы с аналогичным кодом. Давайте рассмотрим пример.

Читать дальше →
Total votes 65: ↑60 and ↓5 +55
Views22.4K
Comments 47

Автоматное программирование. Часть 4. Эффективность автоматно-спроектированных программ

System Analysis and DesignPerfect codeAlgorithmsProgramming microcontrollers
В предыдущих двух статьях речь шла о диаграмме состояний и переходов, используемой для описания динамических процессов в автоматном стиле, и о том, что диаграмма состояний и переходов даёт наилучшее понимание таких процессов. Также были рассмотрены базовые методы реализации автоматов, заданных диаграммой состояний, и были очерчены артефакты автоматной схемотехники, доставшиеся от неё автоматному программированию. Но, до сих пор совершенно не затронут вопрос: насколько эффективны автоматно-реализованные программы?

Я бы сформулировал вопрос иначе: насколько эффективны автоматно-спроектированные программы? Такая формулировка вопроса намекает, что автоматное проектирование — источник высокой эффективности программ. Я ещё практически не касался столь важной темы как эффективность, и пример «Дисплей» идеально подходит для иллюстрации эффективности автоматного проектирования. В первой статье я познакомил читателей с «лабораторной» версией этого модуля, но тестировать я буду «боевой» вариант, процесс проектирования которого я приведу в следующей статье. Исследование эффективности будет выполнено для платформ msp430 и CortexM3.

Чтобы не быть субъективным, оценивая эффективность, нужно с чем-то сравнивать результаты. Поэтому я проведу тот же комплекс испытаний для неавтоматной реализации примера «Дисплей» любезно предоставленной michael_vostrikov, за что ему огромная благодарность и плюсы в карму.

Читать дальше →
Total votes 12: ↑11 and ↓1 +10
Views8.3K
Comments 11

Автоматный практикум — 1. Пример «Дисплей», разработка ОА и УА

System Analysis and DesignPerfect codeAlgorithmsProgramming microcontrollers
Тесты в предыдущей статье убедительно показали высокую эффективность «автоматной» реализации примера «Дисплей» по сравнению с условно названной «неавтоматной» версией. Вкратце итог: обе реализации автоматные, но разница в эффективности многократна и глубинная причина видится в том, что вариант А1 («автоматный») изначально проектировался как автомат, а вариант А2 («неавтоматный») нет. Не столько автоматная реализация, сколько автоматное проектирование является основой высокой эффективности. Для простых алгоритмов автоматные реализации получаются сами собой. Есть смысл говорить о том, что автоматное программирование, это не столько реализация программы в виде конечного автомата, сколько автоматное проектирование, фундаментом которого является конструктивная декомпозиция. Я несколько раз касался темы автоматного проектирования и конструктивной декомпозиции, но чтобы раскрыть эту тему нужны практические примеры. В этой и следующих нескольких статьях я проведу практикум, покажу процесс автоматного проектирования, пытаясь по возможности приводить ход рассуждений присущих автоматному проектированию.
Читать дальше →
Total votes 11: ↑9 and ↓2 +7
Views5.6K
Comments 24
1