Рубрика «php» - 197

20 апреля в Санкт-Петербурге пройдет конференция о Highload веб-разработке DEV {highload}.

DEV {highload} — это профессиональная конференция, где выступают только выдающиеся спикеры. Они будут рассказывать о том, что хочется знать веб-разработчику сложных высоконагруженных проектов.

Web-canape выступает партнером мероприятия и мы хотим вручить один бесплатный билет самому проактивному Хабра-юзеру. Читайте про это в конце поста.

DEV {highload} — конференция о Highload веб разработке

Предыдущая конференция, посвященная Highload веб-разработке, прошла с успехом и пользой для участников из разных городов и стран. Некоторые ее материалы можно посмотреть здесь. Новая DEV {highload} обещает быть еще интереснее! Только новые темы – так же профессионально и актуально. Читать полностью »

Здравствуй! Данная статья — презентация javascript-класса, к которому я пришел в результате перевода веб-сервисов на ajax-навигацию.

Что я имел перед началом работы

  1. веб-сервис на PHP-MVC-фреймворке с URI вида controller/method
  2. несколько неподходящих примеров ajax-навигации из гугла и хабра

Требования были такими

  1. минимальное взаимодействие с пространством имён
  2. минимальное взаимодействие с представлениями (view)
  3. автоматическая установка/восстановление по URI обработчиков событий, которые исчезают после перезаписи html на странице
  4. работа с URI вида любой_контроллер/конкретный_метод, напирмер «*/view»
  5. работа с URI вида конкретный_контроллер/любой_метод, напирмер «profile/*»
  6. работа с URI вида конкретный_контроллер/конкретный_метод, например «profile/edit»
  7. глобальная обработка на всех URI, фактически «*/*»
  8. возможность неиспользования ajax-навигации для некоторых ссылкок

Читать полностью »

в 10:43, , рубрики: php, Песочница, метки:

Для справки:
Tokenizer (лексер) предоставляет интерфейс для анализа кода. Таким образом, можно писать утилиты без необходимости работы с языковой спецификацией.
Tokenizer, начиная с версии php >= 4.3 включен в сборку php по-умолчанию.

Какие задачи можно решать с помощью tokenizr'а?
Да самые разные, связанные с анализом и модификацией кода.

Удаление комментариев из кода

Самый простой пример приведен на php.net — по удалению комментариев:
Читать полностью »

DVelum — платформа разработки на PHP + ExtJS4 Выпуск версии 0.9Основная цель проекта — создание удобной RAD-платформы разработки web-приложений, интерфейсов управления базами данных, CRM-систем, автоматизированных рабочих мест. Функционал платформы максимально автоматизирует рутинные процессы разработки, освобождая пространство для творческой самореализации.

В прошлом году мы уже знакомили вас с платформой DVelum в публикации «DVelum – платформа разработки на PHP + ExtJS4».

На тот момент платформа была достаточно сырая (beta release), после публикации получили много полезных советов и отзывов. Многое из предложенного внедрено и исправлено, хотелось бы познакомить вас с тем, что было сделано за это время. Проект окреп, приобрел более стройный вид, включил в себя достаточный набор инструментов для повседневной разработки.
Читать полностью »

В данном небольшом посте я бы хотел поделиться своими мыслями насчёт скорости работы скриптов/программ, которые мы с вами пишем каждый день и обратить внимание на то, сколько «невидимой» работы совершается при выполнении привычных действий.

Выполнение SQL-запросов

Все знают, что работа с SQL обычно является одной из самых медленных компонентов любого сайта. Есть ли какие-то объективные причины для этого? Действительно ли базы данных такие медленные и срочно нужно переходить на NoSQL :)? Давайте посмотрим.

Создадим тестовую табличку в MySQL и наполним её 1 млн записей:

Код на PHP!

<?php
mysql_connect(...) or die("Cannot connectn");
mysql_select_db(...) or die("Cannot select DBn");

mysql_query('CREATE TABLE IF NOT EXISTS `one_million` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `one` int(11) NOT NULL,
  `two` int(11) NOT NULL,
  `three` int(11) NOT NULL,
  `four` int(11) NOT NULL,
  `five` int(11) NOT NULL,
  `six` int(11) NOT NULL,
  `seven` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB') or die("Cannot create tablen");

for ($i = 0; $i < 1000000; $i++) {
if ($i % 1000 === 999) echo "Done $in";
mysql_query('INSERT INTO one_million VALUES(NULL, ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ')');
}

// Да, код не использует batch insert, а также использует устаревшее, но до сих пор работающее расширение mysql

Давайте теперь выполним какой-нибудь простенький запрос, который прочитает нам 1 млн записей:

SELECT COUNT(*) FROM one_million WHERE three = 333

На моем компьютере запрос выполнился за 200 мс! Таким образом, можно заключить, что InnoDB в состоянии просмотреть около 5 млн записей за 1 секунду! Давайте подумаем, где же на веб-сайтах может потребоваться просматривать столько записей на одну страницу :)? На моей прошлой работе я принудительно выставил ограничение в 20 000 просмотренных строк на все SQL-запросы, и после вычищения всех «тормозных» мест время открытия страницы упало в 5 раз!
Читать полностью »

Добрый день, уважаемыее. В данном посте речь пойдет о совместном проекте S. C. Chen и John Schlick под названием PHP Simple HTML DOM Parser (ссылки на sourceforge).

Идея данного проекта — создать инструмент позволяющий работать с html кодом используя jQuery подобные селекторы. Оригинальная идея принадлежит Jose Solorzano's и реализована для php четвертой версии. Данный же проект является более усовершенствованной версией базирующейся на php5+.

В обзоре будут представлены краткие выдержки из официального мануала, а так же пример реализации парсера для twitter. Справедливости ради, следует указать, что похожий пост уже присутствует на habrahabr, но на мой взгляд содержит слишком малое количество информации. Кого заинтересовала данная тема, добро пожаловать под кат.
Читать полностью »

Приветствие

Всем привет! В этот радостный и, достаточно, теплый пятничный денек приключилась у меня (процитирую в более приятном варианте) «рука-лицо». Честно говоря, приключается сие действие достаточно часто, но, по обыкновению, вызывается оно от ощущения:

Боже, какой же я тупой.

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

Всем привет!

Сегодня я хочу поделиться с вами решением задачи, с которой мы столкнулись при разработке социальной игры. Игровой клиент был написан на flash, а для back-end был выбран php. Игра относится к тайм-менеджмент играм.
Схема работы была выбрана следующая:

  1. игрок совершает действие на клиенте
  2. клиент проверяет возможность совершения действия
  3. отсылает команду на сервер
  4. сервер проверяет возможность совершения действия, выполняет команду, производя изменения в базе
  5. клиент уведомляется о том, что все ок или информируется об ошибке

Все работало отлично, пока не происходило резкое возрастание количества игроков.
Сначала начались тормоза со стороны php. Основная проблема данной реализации заключалась в том, что на каждое действие игрока дергается сервер, который производит довольно много вычислений по обсчету объектов на карте перед выполнением команды. Эта проблема была решена путем добавления дополнительных серверов с обработчиками php.
Потом мы уперлись в производительность mysql. Было слишком много запросов. Так как шардинг не был заложен в систему, то выкручивались как могли. Что-то перенесли в mongodb, где-то улучшили работу с кэшем.

Кстати, mongodb оказался не таким простым хранилищем, как может показаться на первый взгляд. Учитывая то, что у нас было включено шардирование и стояли правильные индексы, мы все равно словили там тормоза, с которыми не смогли разобраться на тот момент. Периодически просто высыпалась пачка запросов в log, которые вдруг затупили. Хотя через секунду те же запросы работали нормально при том же количестве запросов. Но это тема отдельного поста.

Собственно для нового аналогичного проекта было принято решение использовать другую схему взаимодействия клиента и сервера.
Именно об это я и хочу рассказать.

Читать полностью »

в 9:47, , рубрики: php, метки:

Привет всем! Работаю я в одной компании по написанию различных web систем, к нам довольно часто приходят на собеседование, и оказалось, что довольно трудно найти человека которые знает что такое паттерны, а еще сложнее того, кто умеет ими пользоваться. А ведь паттерны, это ничто иное как решение тривиальных задач. По идеи это то, что начинающий программист должен сразу изучить и понять. В интернете довольно много статей на эту тему с примерами, но не все понятны и прозрачны. Я хотел бы рассказать о них по своему. В каждом посте я буду рассказывать об одном паттерне. Для кого эта статья, для тех кто знает что такое ООП (наследование, полиморфизм, инкапсуляция и т.д), также знает какие виды паттернов бывают. Я буду рассматривать их в произвольном порядке. Сегодня хотелось бы поговорить о Strategy Pattern.
Читать полностью »

Четвертого апреля на stackoverflow появился вопрос, касающийся работы операторов сравнения в PHP. Почти сразу же на него поступил развернутый ответ. Наверняка для многих это является интересной темой.

Вопрос

PHP славится своим приведением типов. Я потратил много времени в поисках основ логики сравнения в нем.

Например: если $a > $b является истиной и $b > $c является истиной, значит ли это, что $a > $c также является истиной?

Руководствуясь простейшей логикой я могу предположить что это выражение также верно, однако я не очень доверяю PHP в этом в вопросе. Может кто-нибудь привести мне пример, в котором данное утверждение будет ложным?
Читать полностью »


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