Pull to refresh

PHP Performance Series: Caching Techniques

Reading time 6 min
Views 9.6K
PHP *
Translation
Кеширование промежуточного кода (Opcode Caching)
Кэширование кода это один из самых легких и эффективных путей увеличения производительности в PHP. Использовании данного вида кэширования позволит избавиться от большого количества неэффективностей, возникающих при процессе запуска выполнения кода. Кэширование кода сохраняет промежуточный код в памяти для того чтобы не компилировать PHP-код каждый раз при запуске файла.
Читать дальше →
Total votes 59: ↑50 and ↓9 +41
Comments 66

Облако тэгов на ASP.Net с кэшированием.

Reading time 11 min
Views 1.1K
Lumber room
Одим хмурым воскресным утром мне было нечего делать и я решил попробовать написать свой вариант велосипеда – облако тэгов на ASP.Net. Результат получился довольно интересным, поэтому решил оформить его в виде статьи и выложить на Хабре.
Сразу оговорюсь – это результат всего-лишь полуторачасового кодинга, соответственно просьба не воспринимать его как полностью готовый контрол, а лишь как концепт, который еще можно развивать и развивать.

так что же я там написал
Total votes 17: ↑14 and ↓3 +11
Comments 4

поиск + кеширование в CodeIgniter

Reading time 2 min
Views 780
Lumber room
Привет Хабр и всем кто использует PHP фреймворк CodeIgniter!

В процессе создания некого приложения на CI у меня возник вопрос о поиске информации в базе данных без использования GET.
Никаких готовых решений в CI wiki я не нашел, так что решил сделать свой «велосипед».

Далее
Total votes 10: ↑8 and ↓2 +6
Comments 19

Scala: Кэширование результатов исполнения методов

Reading time 4 min
Views 2.3K
Scala *
Иногда возникает необходимость кэширования результатов исполнения методов. Одно из возможных решений для java описано здесь. Всё, в принципе, тривиально: EHCache, Spring AOP для перехвата вызовов, немножко кода.

Рассмотрим, как мне кажется, более элегантное решение на scala.
Читать дальше →
Total votes 2: ↑2 and ↓0 +2
Comments 2

Подводные камни при использовании кэширования в nginx

Reading time 10 min
Views 55K
High performance *
В web-сервер и reverse-proxy nginx встроены очень мощные возможности по кэшированию HTTP-ответов. Однако в ряде случаев документации и примеров не хватает, в результате не все получается так легко и просто, как хотелось бы. Например, мои конфиги nginx-а местами написаны кровью. Этой статьей я попробую немного улучшить ситуацию.

В этой статье: а) подводные камни при полностраничном кэшировании; б) кэширование с ротацией; в) создание динамического «окна» в закэшированной странице.

Я буду предполагать, что вы используете связку nginx+fastcgi_php. Если вы применяете nginx+apache+mod_php, просто замените имена директив с fastcgi_cache* на proxy_cache*

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

Кэширование всей страницы целиком


Если на вашем сайте главная страница хоть и генерируется динамически, но меняется достаточно редко, можно сильно снизить нагрузку на сервер, закэшировав ее в nginx. При высокой посещаемости даже кэширование на короткий срок (5 минут и меньше) уже дает огромный прирост в производительности, ведь кэш работает очень быстро. Даже закэшировав страницу всего на 30 секунд, вы все равно добьетесь значительной разгрузки сервера, сохранив при этом динамичность обновления данных (во многих случаях обновления раз в 30 секунд вполне достаточно).
Читать дальше →
Total votes 91: ↑87 and ↓4 +83
Comments 83

Flowplayer и Internet Explorer (IE)

Reading time 1 min
Views 631
Lumber room

Проблема


Ставил тут Flowplayer на сайт Агуши и столкнулся с непонятным поведением IE относительно этого плеера. Первый раз открываю страницу — всё ок (видео подгружается и играется), а если сделать refresh (f5) — то на сером фоне крутится кружочек загрузки и ничего не происходит.

Поиски


Долго гуглил по этой теме, нагуглил лишь только открытую тему на форуме самого плеера. Стал копаться сам.
Читать дальше →
Total votes 5: ↑1 and ↓4 -3
Comments 4

Еще один взгляд на кэширование на Drupal

Reading time 3 min
Views 3.5K
Drupal *
Sandbox
На хабре недавно была опубликована статья под названием "Кэширование на Drupal". Хотелось бы добавить несколько соображений по теме.

Ни для кого не секрет, что Drupal голоден до ресурсов, а кэширование это чуть ли не первое что приходит в голову. Расскажу как выстроена общая схема кэширования на нашем сайте.

Первая линия обороны — мы используем CDN (Content Delivery Network), в нашем случае это AKAMAI. AKAMAI настроен на кэширование всего. Картинки, CSS, JavaScript, ответы на все GET запросы, все это кешируется в не зависимости от того аноним пользователь или зарегистрирован. Интервал кэширования от 1 до 5 минут для страниц, 45 минут для CSS и JavaScript, и час для остальных ресурсов. Такое распределение позволяет существенно уменьшить нагрузку на сервера.
Читать дальше →
Total votes 39: ↑34 and ↓5 +29
Comments 20

Postsharp. Решаем задачу кэширования

Reading time 6 min
Views 2.6K
.NET *C# *
Translation
Иногда попадаются такие ситуации, в которых нет никакой возможности ускорить работу некоторой операции. Она может зависеть от какого-то сервиса, который располагается на внешнем web сервере, или это может быть операция, которая дает высокую нагрузку на процессор. Или же это могут быть быстрые операции, однако, их параллельная работа может высосать из вашего компьютера все ресурсы производительности. Существует огромное количество причин чтобы использовать кэширование. Следует отметить, что PostSharp, изначально не предоставляет решений для вас какого-либо фреймворка кэширования, просто он позволяет сделать эту задачу на порядки быстрее, без каких-либо занудных действий, типа расстановки кода, отвечающего за кэширование по всему исходному тексту программы. Он позволяет решить эту задачу элегантно, вынося задачи в классы и позволяя их повторно использовать.
Читать дальше →
Total votes 14: ↑8 and ↓6 +2
Comments 11

Как бы я рассказал о возможностях чипсета Intel Z68 Express на примере MSI Z68A-GD80 (B3)

Reading time 10 min
Views 14K
Computer hardware Video cards
image

Предлагаю от лица подготовленного пользователя познакомиться с возможностями нового чипсета от ребят из Санта-Клары на примере флагманской материнской платы MSI Z68A-GD80 (B3). Разумеется, заранее я знаю, с чем мне придется столкнуться: возможность разгона процессора и встроенной графики, технология Intel RST SSD Caching (Rapid Storage Technology) и, конечно же, уникальная в своем роде инициатива LucidLogix Virtu.
Читать дальше →
Total votes 40: ↑35 and ↓5 +30
Comments 25

Установка и настройка memcacheq на CentOS 6.2

Reading time 3 min
Views 4.5K
*nix *Server Administration *
Sandbox
Понадобилось недавно установить memcached и memcacheq на CentOs 6.2 и к сожалению было обнаружено, что готовых в репозитории нет, и надо компилировать самостоятельно. Причем, по сборке второго — нормальной и актуальной инструкции нету ни на русском, ни на английском. Последняя которая есть на всех сайтах достаточно древна и не совсем актуальна. Поиск гуглом находит только какие-то убогие китайские сайты. Вот и хочу восполнить этот пробел в русском сегменте сети.
Читать дальше →
Total votes 19: ↑10 and ↓9 +1
Comments 6

Модуль кэширования ASP.NET приложений

Reading time 5 min
Views 4K
.NET *
Sandbox
При работе над большим, высоконагруженным проектом часто возникает необходимость кэширования ряда страниц. Это помогает уменьшить нагрузку, избавив от повторного выполнения страниц и, как следствие, повторной загрузки данных. Так же необходимым условием является возможность проверки валидности кэша по определенному условию или набору условий. В принципе, задача выглядит стандартной, но, как мы увидим далее, решение ее далеко не тривиальное.
Читать дальше →
Total votes 11: ↑8 and ↓3 +5
Comments 2

Дружим System.Web.Optimization Bundle с Windows Azure Storage

Reading time 3 min
Views 2.5K
.NET *C# *Microsoft Azure *
Я все ждал, ждал, ждал, когда же все-таки умные ребята, разрабатывающие System.Web.Optimization добавят поддержку автоматической загрузки содержимого бандла в контейнер Azure Storage. На днях вышла «1.0.0-beta2», но желаемого функционала так я и не нашел, а быстроты то хочется…
Читать дальше →
Total votes 13: ↑7 and ↓6 +1
Comments 4

Тонкости Rails 4 — Cache Digests

Reading time 5 min
Views 13K
Ruby *Client optimization *Ruby on Rails *
Tutorial
Recovery mode
Translation


Гем под названием "cache_digests" (включен по умолчанию в Rails 4) автоматически добавляет цифровую подпись к каждому фрагментному кэшу, основываюсь на представлении (вьюхе). При этом, если страница изменяется, то старый кэш автоматически удаляется. Но остерегайтесь подводных камней!
Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Comments 38

PHP + Java, или In-memory кластер теперь и для PHP разработчиков

Reading time 9 min
Views 8.9K
High performance *Open source *PHP *

Intro


image
PHP + Java. Картинка взята отсюда

В этом комментарии к статье под названием «Пишите код каждый день» я сказал, что скоро покажу свой проект, на который я выделял ежедневно 1 час (кроме выходных). Так как в последнее время моя работа связана с написанием распределенных Java приложений, которые используют in-memory data grid (IMDG) в качестве хранилища данных, то мой проект связан именно с этим.

Подробнее про IMDG можно почитать в моих предыдущих статьях (1, 2). Но если кратко, то это кластерное распределенное хранилище объектов по ключам, которое держит все данные в памяти, за счет чего достигается высокая скорость доступа к данным. Позволяет не только хранить, но и обрабатывать данные, не извлекая их из кластера.
И если интерфейс для обработки данных у каждого конкретного IMDG свой, то интерфейс доступа к данным обычно идентичен хеш-таблице.

О чем эта статья


Большинство IMDG написано на Java и поддерживают API для Java, C++, C#, при этом API для веб языков программирования (Python, Ruby, PHP) не поддерживается, а протокол для написания клиентов сильно ограничен. Именно этот факт я и считаю основным тормозом для проникновения IMDG в массы — отсутствие поддержки самых массовых языков.

Так как производители IMDG пока не предоставляют поддержку веб языков, то веб программисты не имеют возможностей по такому же легкому масштабированию приложений, какие есть у серверных Java разработчиков. Поэтому я решил сделать нечто подобное самостоятельно и выложить в open source, взяв в качестве движка open source IMDG JBoss Infinispan (компания JBoss, принадлежащая Red Hat, довольно хорошо известна в кругу java разработчиков). Мой проект называется Sproot Grid, пока доступен только для PHP, но если у сообщества будет интерес, то сделаю и интеграцию с Ruby и Python.

В этой статье я еще раз расскажу про in-memory data grid и про то, как конфигурировать, запускать и использовать Sproot Grid.
Читать дальше →
Total votes 17: ↑16 and ↓1 +15
Comments 11

Страничное кеширование в WordPress

Reading time 6 min
Views 29K
WordPress *PHP *
image

В последнее время на Хабре появилось довольно много постов по данной теме, но по своей сути их можно назвать: «Смотрите, я поставил Varnish / W3 Total Cache и держу миллион запросов на «Hello world» страничке». Данная же статья рассчитана больше на гиков, желающих познать, как же это все работает и написать собственный плагин для страничного кеширования.

Зачем?


Стандартный вопрос, который возникает у каждого разработчика перед созданием велосипеда уже существующего функционала. Действительно, готовых плагинов уйма и многие из них довольно качественные, но нужно понимать что в первую очередь они рассчитаны на статические блоги. Что же делать, если у вас не стандартный WordPress сайт?
Читать дальше →
Total votes 17: ↑16 and ↓1 +15
Comments 14

Spring Boot стартер для Apache Ignite своими руками

Reading time 11 min
Views 9.9K
Programming *Java *System Analysis and Design *Big Data *

Вот уже вышло две статьи в потенциально очень длинной серии обзоров распределённой платформы Apache Ignite (первая про настройку и запуск, вторая про построение топологии). Данная статья посвящена попытке подружить Apache Ignite и Spring Boot. Стандартным способом подключения некой библиотеки к Spring Boot является создание для этой технологии «стартера». Несмотря на то, что Spring Boot весьма популярен и на Хабре описывался не единожды, про то, как делать стартеры, вроде бы ещё не писали. Этот досадный пробел я постараюсь закрыть.

Статья посвящена преимущественно Spring Boot'у и Spring Core, так что те, кого тема Apache Ignite не интересует, всё равно могут узнать что-то новое. Код выложен на GitHub, стартера и демо-приложения.
Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Comments 1

Измеряем производительность кэша Apache Ignite

Reading time 7 min
Views 6.5K
High performance *Programming *Java *Big Data *
После того, как в предыдущих статьях данной серии обзоров распределённого Java-фреймворка Apache Ignite мы сделали первые шаги, познакомились с основными принципами построения топологии и даже сделали стартер для Spring Boot, неизбежно встаёт вопрос о кэшировании, которое является одной из основных функций Ignite. Прежде всего, хотелось бы понять, нужно ли оно, когда библиотек для кэширования на Java и так полным-полно. Тем, что предоставляется реализация стандарта JCache (JSR 107) и возможность распределённого кэширования в наше время удивить сложно. Поэтому прежде чем (или вместо того чтобы) рассматривать функциональные возможности кэша Apache Ignite, мне бы хотелось посмотреть, насколько он быстр.

Для исследования применялся бенчмарк cache2k-benchmark, разработанный с целью доказательства того, что у библиотеки cache2k кэш самый быстрый. Вот заодно и проверим. Настоящая статья не преследует цель всеобъемлющего тестирования производительности, или хотя бы научно достоверного, пусть этим занимаются разработчики Apache Ignite. Мы просто посмотрим на порядок величин, основные особенности и взаимное расположение в рейтинге, в котором будут ещё cache2k и нативный кэш на ConcurrentHashMap.
Читать дальше →
Total votes 19: ↑18 and ↓1 +17
Comments 4

Облачное хранилище корпоративного класса на базе NGINX Plus и Minio

Reading time 5 min
Views 31K
Southbridge corporate blog System administration *Nginx *Server Administration *Data storage *
Translation

В этой статье говорится о том, как настроить обратный прокси-сервер NGINX или NGINX Plus в качестве балансировщика нагрузки для хранилища объектов (object storage) на базе Minio.

Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Comments 16

Веб-кэширование на примере покупки молока в магазине

Reading time 6 min
Views 19K
Alconost corporate blog High performance *Website development *Development of mobile applications *Server Administration *
Translation

Если вы покупали молоко в магазине, вы сможете понять, как работает кэширование на стороне сервера и на стороне браузера.

Если вы — активный пользователь Интернета (а это, скорее всего, именно так), вы постоянно используете кэширование, но можете и не знать «закулисье»: когда и как оно работает.

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

При кэшировании время загрузки страницы снижается с 2 секунд до 1 секунды… что не очень впечатляет, верно? Но без него не обойтись, когда приходится обрабатывать запросы от большого числа пользователей.

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

Чтобы понять мое объяснение, нужно немного знать об основах работы веб-серверов. Приступим!

Переведено в Alconost
Читать дальше →
Total votes 10: ↑8 and ↓2 +6
Comments 5

Торжественное переоткрытие Store: загрузка данных в Android с помощью корутин

Reading time 13 min
Views 4.1K
Development of mobile applications *Designing and refactoring *Development for Android *Data storage *Kotlin *
Translation

Предлагаю вашему вниманию перевод оригинальной статьи от Mike Nakhimovich


Давным-давно я работал в «Нью-Йорк Таймс» и создал библиотеку под названием Store, которая была «библиотекой Java для легкой, реактивной загрузки данных». Мы создали Store, используя RxJava и шаблоны, взятые из реализации Guava’s Cache. Сегодняшние пользователи приложений ожидают, что обновления данных будут происходить в UI без необходимости делать такие вещи, как pull-to-refresh, чтобы обновить данные или переходить между экранами туда-сюда. Реактивный фронтенд заставил меня задуматься о том, как мы можем иметь декларативные хранилища данных с простыми API, которые абстрагируют сложные функции, такие как многозадачный троттлинг и дисковое кэширование, которые необходимы в современных мобильных приложениях. За три года работы у Store 45 контрибьютеров и более 3500 звёзд на GitHub. Отныне я рад объявить, что Dropbox возьмет на себя активное развитие Store и выпустит его полностью на Kotlin с поддержкой Coroutines и Flow. И теперь Store 4 — это возможность воспользоваться тем, что мы узнали, переосмысливая API и текущие потребности экосистемы Android.




Загрузить данные
Total votes 3: ↑3 and ↓0 +3
Comments 4
1