Рубрика «optimization» - 6

Будущее — за локацией - 1

Реклама на основе месторасположения все ощутимее набирает конкурентные преимущества — таков вывод из свежего исследования Forbes Insights совместно с xAd “Локация — императив стратегического маркетинга”. Читать полностью »

В этой небольшой статье я хочу поделиться с вами опытом, как программно оптимизировать производительность приложения Андроид за 5 простых шагов на примере создания цифровой версии игры «Корона Эмбера».

До создания серьезных приложения со сложной структурой View и Layout'ов мы особо не задумывались над тем, как простые и логичные действия в стиле «смотрите, я набросал дизайн из лэйаутов» могут серьезно замедлить работу всей программы.

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

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

Привет!

Буквально на днях мы выпустили очередной релиз CLion 2016.1, нашей кросс-платформенной IDE для разработки на C и C++. Передохнув от релизной суматохи, хотим поделиться впечатлениями о проведенном недавно нами мероприятии, посвященному разработке на C++.

24 февраля этого года в офисе компании JetBrains собралось более 50 человек на мероприятие JetBrains C++ night. Основную часть аудитории составляли C++ разработчики из питерских и не только IT-компаний.

Хотя большую часть времени заняли доклады наших разработчиков, видеозаписи которых опубликованы на нашем канале (см. ссылки ниже), нашей основной целью было неформальное общение с C++ сообществом, которое есть в Питере или приехало поучаствовать в конференции C++ Russia.

В целом, нам кажется, что первый блин вышел не комом, хотя нам есть над чем работать. Главное, нам удалось пообщаться, узнать много интересного, услышать множество пожеланий и вопросов к нашим продуктам, да и просто понять, какой же разработкой занимаются в C++ мире в Питере и в России вообще. Так, например, мы неожиданно для себя получили запрос на поддержку Android проектов на CMake (Android Studio, в которую включена поддержка C++ на базе CLion, CMake не поддерживает; а CLion в свою очередь не имеет сейчас Android поддержки).
Читать полностью »

4 условия идеальной мобильной email-рассылки - 1

Несмотря на все прелести современного SMM, email-рассылка продолжает оставаться эффективным способом воздействия на потенциальных клиентов.

Email-платформа Litmus приводит данные о том, что 53% email-рассылок открывают с мобильных девайсов. Открываемость писем Google-почты с мобильных устройств, по сведениям Google, составляет 75% пользователей.

Большинство пользователей читает электронную почту на смартфонах и планшетах. Вы учитываете этот факт при составлении маркетинговой стратегии? Читать полностью »

Как преуспеть в мобильном SEO? Делимся наблюдениями - 1

В привлечении органического трафика важно не только создать полезный и “вкусный” контент, который пользователи употребят с большим аппетитом. Здесь также важноЧитать полностью »

Всем привет. Эта статья продолжение 10к на ядро с конкретными примерами оптимизаций, которые были проделаны для повышения производительности сервера. С написания первой части прошло уже 5 мес и за это время нагрузка на наш продакшн сервер выросла с 500 рек-сек до 2000 с пиками до 5000 рек-сек. Благодаря netty, мы даже не заметили это повышение (разве что место на диске уходит быстрее).

Blynk load
(Не обращайте внимание на пики, это баги при деплое)

Эта статья будет полезна всем тем кто работает с netty или только начинает. Итак, поехали.

Нативный Epoll транспорт для Linux

Одна из ключевых оптимизаций, которую стоит использовать всем — это подключение нативного Epoll транспорта вместо реализации на java. Тем более, что с netty это означает добавить лишь 1 зависимость:

<dependency>
   <groupId>io.netty</groupId>
   <artifactId>netty-transport-native-epoll</artifactId>
   <version>${netty.version}</version>
   <classifier>linux-x86_64</classifier>
</dependency>

и автозаменой по коду осуществить замену следующих классов:

  • NioEventLoopGroup → EpollEventLoopGroup
  • NioEventLoop → EpollEventLoop
  • NioServerSocketChannel → EpollServerSocketChannel
  • NioSocketChannel → EpollSocketChannel

Дело в том, что java реализация для работы с не блокирующими сокетами реализуется через класс Selector, который позволяет вам эффективно работать с множеством соединений, но его реализация на java не самая оптимальная. Сразу по трем причинам:

  • Метод selectedKeys() на каждый вызов создает новый HashSet
  • Итерация по этому множеству создает iterator
  • И ко всему прочему внутри метода selectedKeys() огромное количество блоков синхронизации

В моем конкретном случае я получил прирост производительности около 30%. Конечно же, эта оптимизация возможна только для Linux серверов.
Читать полностью »

Всемирная социальная сеть №1 разрешит запустить «пауков» Google'а в свое мобильное приложение Facebook для индексирования контента.

Конечно речь идет о публичном контенте: открытые профили, записи, группы, события и т. д. Большая часть информации будет закрыта от «паучков».
Они не будут находить ту информацию, которая доступна только после авторизации в Facebook.

Google пробил внутреннюю броню Facebook: отныне приложение поддается индексации - 1
Читать полностью »

В продолжение предыдущей статьи "Ethernet & FC", хотел бы дать конкретные рекомендации по оптимизации Ethernet сети для работы с СХД NetApp FAS. Хотя, полагаю, многие вещи описанные здесь могут быть полезны и для других решений.
Ненадёжный Ethernet - 1
Читать полностью »

Когда-то я написал очень простую функцию, которая казалась мне костылем в том уже не помню каком проекте. Но она хорошо выполняла свою обязанность. Тогда я называл ее ожидающей функцией, а JavaScript называл ее fnDelay. Дело в том, что в приложении может быть функционал, который срабатывает после изменения какого-нибудь состояния. Но это изменение происходит (или может гипотетически происходить) так часто, что функционал будет срабатывать очень много раз, хотя на самом деле нам необходимо выполнить его только для уже измененного состояния (или еще для нескольких промежуточных). Иначе может быть чувствительная проблема в производительности вашего приложения. Ну ладно, достаточно пустых слов, разберем конкретный пример.
Читать полностью »

Прочитав статью Базы данных в онлайн играх и особенно комменты к ней, я в очередной расстроился от мысли, что многие разработчики меняют БД в своём проекте, пытаясь этой сменой решить свои проблемы, не исчерпав, однако, всех возможностей, предоставляемой заменяемой БД. Я принимаю участие в работе над проектом, БД которого характеризуется:

  • Количеством транзакций порядка 5'000 — 10'000 в секунду
  • Объемом примерно в 100ГБ (который бодро растёт)
  • Примерно равным количеством операций на чтение/запись
  • Преимущественно мелкими транзакциями

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

Я опишу некоторые проблемы, с которыми мы сталкиваемся, и применённые решения. Если кто-то сочтёт это полезным — ради Бога. Если кто-то поправит — я буду только рад обнаружить уязвимость в используемых подходах и увеличить эффективность работы БД. Описанное может быть применено без вмешательства в логику приложения, исключительно путём модификации схемы БД.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js