@JaneHolland смотрите, у вас есть файлик index.php. Все запросы идут на него в таком виде:
index.php/user/foobar
в index.php можно будет вычленить эту вот строку: /user/foobar и разобрать ее по правилам. Это называется "маршрутизация". Писать самому подобную штуку можно, но проще взять готовое нормальное решение.
index.php из урлов скрывается уже в htaccess или в настройках хоста. Таким образом у нас уменьшается зависимость от web сервера, мы вольны делать все так как хотим и не нужно будет постоянно мудохаться с этими htaccess.
@VjacheslavP да, глянул код. Там очень много оптимизаций за счет пересекающихся линий идет. За счет этого сильно уменьшается количество точек, которые необходимо отрисовать. То есть оно формирует из этих простых фигур новые, оптимизированные, объедененные в общие шейпы и т.д. За счет этого отрисовка и выходит быстрее.
@xmdy вы видимо не прочли мой ответ. Никто и нигде пузырек не пишет, ибо это просто трата времени. Но вот скажите, вы можете сказать при каких ситуациях какой алгоритм будет эффективнее? Можете расчитать сложность алгоритмов при определенных ситуациях? Сложность алгоритмов сортировки тех же различается, исходя из того какие данные мы туда суем. Можно рассматривать плохие случаи, например когда мы пытаемся отсортировать массив по возрастанию, хотя у нас он уже отсортирован по убыванию. При этом если бы данные были бы распределены рандомно, то некоторые алгоритмы обладали бы меньшей сложностью.
Для 99% задач это не нужно знать, но для меня интерес как раз составляет тот самый 1%.
@xmdy PHP, Javascript в основном. Балуюсь с C++ и D (DSP, балуюсь с процессингом аудио, классификацией и все такое прочее)... Сейчас вот планирую Go освоить.
@psyhO_octopus тем что выборка по селекторам с атрибутами быстрее в разы чем выборка по классу (хотя это не столь уж и важно) и это намного удобнее чем выборка по айдишникам и вообще. Более универсально, можно назначать несколько действий, удобно искать в коде и т.д. Да и классы больше для оформления, биндить на них логику js как-то нехорошо. А так у вас получаются довольно специфичные селекторы, не нужно проверять вложенность и т.д. Из всех доступных вариантов это самый быстрый, удобный и надежный способ. Если вы можете подсказать более удобный способ, который при этом не засоряет js код стремными селекторами, или который позволяет так же быстро добавить поведение на любой элемент на странице, метод при котором можно красиво и удобно инкапсулировать логику - предлагайте. Я для себя ничего удобнее не нашел.
выборка по атрибутам судя по тестам работает не намного медленнее getElementById (раз в 5-10) но всеравно быстрее чем выборка по классу, и при этом код выходит намного более гибким. Да и обычно выборки элементов кешируют, так что если у вас есть необходимость в более быстрой выборке по селекторам - либо у вас кривые селекторы, либо вы что-то делаете не так. Производительность в этом вопросе вообще можно оставить на второй план.
@lexxpavlov я добавил в бенчмарке вариант, который сравним по скорости с вашим и все так же универсален. Сейчас вынесу в ответ. Да и пара милисекунд на массив из 1000 элементов - не думаю что так страшно, при том что это реально самый медленный способ.
@lexxpavlov добавил результаты для HHVM. Любопытно было бы еще на phpng или php 5.6 опробовать, но на это уже нету времени к сожалению. Если вам будет скучно, можете любопытства ради прогнать. Ну а так я бы сказал что все 4 способа достаточно быстры.
@samlewis все просто. array_filter фильтрует массив исходя из результата работы функции-обработчика. Тот должен вернуть true если нужно включить его в коллекцию, или false если мы хотим его скипнуть.
array_intersect_key берет эллемет нашей коллекции (массив) и формирует из него новый массив, который содержит только те же ключи, что и наш нужный массивчик. Далее мы делаем нестрогое сравнение (именно не строгое, со строгим работать не будет) и возвращаем результат оного.
Все 4 способа я считаю достаточно универсальными что бы их использовать в проекте. Может добавить свои варианты если хотите, и если можно, запустите тест на своей машине. Мой ноут не может похвастаться такой уж большой производительностью.
@slip31 извините, просто angularjs чаще с SPA используют.
Если честно, я бы всеравно делал это как два разных приложения. У меня только админки на ангуларе (тот же SPA по сути) либо целиком все приложение. Да и со структурой Yii2 я пока не знаком.
по поводу кросдоменных запросов могу только сказать, что вам в любом случае либо нужно запихивать все шаблоны в templateCache что бы тот не делал этих запросов, либо делать все реально в пределах одного домена. Либо CORS на уровне web-сервера.
@ImmortalCAT, перефразируя одну поговорку, "любишь практикой баловаться, люби и теорию читать". Да и практика разной бывает. У меня все задачи в универе были связаны с системным программированием, сетевыми службами, web, клиент-серверы и т.д. и задачи я по большей части сам и выдумывал. Правда к моменту сдачи курсовых и прочее приходилось половину функционала в срочном порядке подпирать кастылями или выкидывать. Но то что я это не успел сделать не значит что я в итоге не знаю как это надо было делать.