к слову за счет лишних операций ветвлений даже JS код работает чуточку медленнее. Если уж касаться вопросов производительности - развертка циклов дает намного более существенный прирост производительности при вычислениях. Даже в JS (благо JIT умеет хорошо это разруливать).
@AndreySolo а какова вообще исходная задача? Мне просто кажется что вы изначально придумали себе проблему на пустом месте.
Обновил ответ, предложил решение которое покрывает большинство возникающих задачь. Основная суть - управлять всем должен контроллер, но никак не шаблон. Из представления вы можете только сообщить контроллеру что состояние изменилось и попросить контроллер как-то среагировать на это.
Стоит проверить этот вариант на android-планшетах. Точно знаю что mousemove не эмулируется в iOS (как минимум до 6-ой версии включительно). Но за другие системы сложно отвечать.
Вам нужен класс RankDetector в таком случае. Старайтесь выделять компоненты по их функциям а не придумывать абстрактных коней в вакууме. Он же будет единым интерфейсом, а что будет происходить внутри - не столь важно. По сути интерфейс этого класса должен иметь один метод - getRank(User $user), который будет либо возвращать нужную сущность либо алиас ранка либо что там вам нужно по бизнес логике.
Реализовать внутри него можно уже при помощи отдельных драйверов-детекторов, каждый под вой ранг. Тогда и тестами покрывать удобно, и архитектура упрощается для понимания.
Как минимум да, хотя делать для рангов отдельный класс... хотя я не вкурсе особенностей логики вашего приложения. Мне кажется вы излишне усложняете и утяжеляете логику.
@nepster09 просто не просто предлагать решение, когда в исходных данных каша. У вас в коде мягко скажем треш. И почему у вас нету автозагрузчика? Почему такие кастыли?... Вот честно, лет 7 назад я не особо удивился бы такому коду, но сейчас подобное повергает меня в уныние... Хоть запускается это нечто через гермен а не по крону, уже радует.
@Csklassami а чем плохо 40 fps? Вообще у вас забавная логика таймера... Я так понимаю что у вас все это добро запущено в бесконечном цикле... если так, то попробуйте выставить приоритет процессу повыше.
лапшакод, процедурное программирование и т.д. очень сильно бьет по производительности труда. Имхо в 99% случаев дешевле докупить еще сервак чем третить деньги на рефакторинг.
Не пишите подобную чушь, ради бога, а то тут публика впечатлительная и будет воспринимать ваш совет слишком близко к сердцу ни разу не задумываясь.
@PiloTeZ, просто старайтесь делать как можно более слабосвязанные системы, завязывайтесь только на интерфейсах, старайтесь избегать статических методов а если этого не избежать - инкапсулируйте в сервисы и прячьте их за интерфейсы. Ну и да - тесты. Обызательно писать тесты если вы хотите масштабировать систему и делать ее рефакторинг. С первого раза у вас в любом случае не выйдет написать все правильно, да и ни у кого, затем и придумали рефакторинг.
@PiloTeZ Ух... Yii это не тот фреймворк на котором надо тренироваться писать гибкий и расширяемый код. В контексте Yii я бы порекомендовал вам посмотреть в сторону DTO (Data Transfer Objects), хотя это в большинстве случаев избыточно, зато позволяет полностью отвязать ваши сущности от ActiveRecord, что может пригодиться при возникновении необходимости использовать другие хранилища.
DI - Dependency Injection. В Yii2 вроде что-то смутно напоминающее DI контейнер уже ввели. Вообще почитайте в сети информацию по принципу инверсии зависимостей.
что значит ошибку в пароле? Он же регистрируется. Если вы про поле "повторите пароль" то считаю что в подбном случае от него можно спокойно избавиться. Вообще этот способ верификации что пользователь ничего не напутал уже давно устарел и не рекомендуется к применению. Обычно пихают по привычке.
@distorting_reality, если нашли решение проблемы, найдите пару минут времеи и отредактируйте ваш вопрос. В частности добавьте пояснений что вы хотели сделать и как вы это в итоге сдлали. Иначе ваш вопрос не представляет вообще никакой пользы.