[NumberAbbreviation] - модификатор для сокращения больших чисел (1.2K)
Уже несколько раз поднимался вопрос по сокращению больших чисел до удобного формата как в социальных сетях.
Я сначала не совсем понимал принцип формирования подобного формата чисел. Но благодаря пользователю Neonich решение было найдено.
Итак, есть решение — почему бы не сделать его для всех?
Как следствие этого появился пакет NumberAbbreviation, который добавляет новый модификатор numabbr.
По правде говоря использовать подобное сокращение можно лишь на больших числах, а значит на больших сервисах или соцсетях, где подсчёт идёт тысячами, но думаю своё применение он найдёт.
Дополнение использует плагин, который добавляет феном-модификатор в момент инициализации Fenom и одноимённый сниппет-модификатор, который используется если не установлен pdoTools или если используется обычный синтаксис MODX.
Преимущество использования феном-модификатора очевидно — это скорость и отсутствие дополнительных запросов для вызова сниппета.
{$views|numabbr} — вызываем через fenom-модификатор
[[+views:numabbr]] — вызываем через синтаксис MODX (используется сниппет-модификатор)
{1000|numabbr} — выведет 1K
{1229|numabbr} — выведет 1.2K
{1500|numabbr} — выведет 1.5K
{154000|numabbr} — выведет 154K
{1000000|numabbr} — выведет 1M
{1500000|numabbr} — выведет 1.5M
Установить пакет вы можете подключившись к репозиторию modstore.pro либо скачав сам транспортный пакет с страницы дополнения.
• ДЕМОНСТРАЦИЯ И ДОКУМЕНТАЦИЯ =>
• БЕСПЛАТНО В MODSTORE.PRO =>
UPD:
— (22.12.2017) — новый логотип дополнения, старый: file.modx.pro/files/e/f/1/ef13fa1285ae08a963024d964cbc225b.png
Я сначала не совсем понимал принцип формирования подобного формата чисел. Но благодаря пользователю Neonich решение было найдено.
Итак, есть решение — почему бы не сделать его для всех?
Как следствие этого появился пакет NumberAbbreviation, который добавляет новый модификатор numabbr.
По правде говоря использовать подобное сокращение можно лишь на больших числах, а значит на больших сервисах или соцсетях, где подсчёт идёт тысячами, но думаю своё применение он найдёт.
Что под капотом?
Дополнение использует плагин, который добавляет феном-модификатор в момент инициализации Fenom и одноимённый сниппет-модификатор, который используется если не установлен pdoTools или если используется обычный синтаксис MODX.
Преимущество использования феном-модификатора очевидно — это скорость и отсутствие дополнительных запросов для вызова сниппета.
Примеры использования
{$views|numabbr} — вызываем через fenom-модификатор
[[+views:numabbr]] — вызываем через синтаксис MODX (используется сниппет-модификатор)
Другие примеры
{111|numabbr} — выведет 111{1000|numabbr} — выведет 1K
{1229|numabbr} — выведет 1.2K
{1500|numabbr} — выведет 1.5K
{154000|numabbr} — выведет 154K
{1000000|numabbr} — выведет 1M
{1500000|numabbr} — выведет 1.5M
Установить пакет вы можете подключившись к репозиторию modstore.pro либо скачав сам транспортный пакет с страницы дополнения.
• ДЕМОНСТРАЦИЯ И ДОКУМЕНТАЦИЯ =>
• БЕСПЛАТНО В MODSTORE.PRO =>
UPD:
— (22.12.2017) — новый логотип дополнения, старый: file.modx.pro/files/e/f/1/ef13fa1285ae08a963024d964cbc225b.png
Поблагодарить автора
Отправить деньги
Комментарии: 37
Надеюсь, это-то хейтить не будут
И я надеюсь. Это дополнение больше ориентировано на программистов.
А чего бесплатно то? Уж если снежинки стоят 290р — то тут не меньше 490 думаю надо брать.
Обсуждали уже это в телеграме…
На свои дополнения ставь хоть миллион, я не буду против.
У этого дополнения другая целевая аудитория. Програмисты != клиенты.
На свои дополнения ставь хоть миллион, я не буду против.
У этого дополнения другая целевая аудитория. Програмисты != клиенты.
можно ссылку на канал в телеге
спасибо
У этого дополнения другая целевая аудитория. Програмисты != клиенты.Ты же ранее написал
Это дополнение больше ориентировано на программистов.
Может я неверно выразился: предыдущее дополнение ориентировано на клиентов-заказчиков. Это дополнение — инструмент для разработчиков. Следовательно Программисты-разработчики != (не равно) клиенты-заказчики. Поэтому и ценовая политика другая.
Надеюсь ясно объяснил, как-то так.
Надеюсь ясно объяснил, как-то так.
Давайте обойдёмся без токсичных комментариев.
Новый год на носу, будьте добрее.
Новый год на носу, будьте добрее.
Дополнение использует плагин, который добавляет феном-модификатор в момент инициализации Fenom и одноимённый сниппет-модификаторНа всякий случай — Fenom отлично вызывает модификаторами обычные сниппеты. Добавление модификатора в него напрямую нужно только если ты используешь файловые сниппеты.
Модешь прямо сейчас отключить свой плагин и у Fenom всё равно всё будет работать.
- плагин: 0.0012100
- сниппет: 0.0076529
Я руководствовался твоим советом отсюда: modx.pro/development/10910/
Понятно что у Fenom и через сниппет будет работать, но если вызывается именно fenom-модификатор, то работать будет быстрее, ты сам обратил на это внимание:
Вызов сниппета, это всё-таки дополнительная нагрузка
Понятно что у Fenom и через сниппет будет работать, но если вызывается именно fenom-модификатор, то работать будет быстрее, ты сам обратил на это внимание:
Так как этот модификатор является внутренним методом Fenom и загружается один раз при его инициализации — работает он быстрее любого сниппета.
По идее — да (хотя разницу я не тестировал).
Но если у тебя 2 раза прописан один код в сниппете и плагине, то лучше бы оставить его в одном месте. А если и там, и там вызывается один метод из общего класса — то спасибо, что позаботился о пользователях Fenom!
Но если у тебя 2 раза прописан один код в сниппете и плагине, то лучше бы оставить его в одном месте. А если и там, и там вызывается один метод из общего класса — то спасибо, что позаботился о пользователях Fenom!
Я тестировал, перед тем как писать пакет — если используется феном, то вызывается модификатор фенома, а не сниппет и скорость на больших количествах разительно отличается. Могу попробовать собрать тест.
Спасибо за идею затолкнуть это в общий класс — так и сделаю!
Но если у тебя 2 раза прописан один код в сниппете и плагине, то лучше бы оставить его в одном месте.У меня сейчас дубляж кода, типа если не сработает у пользователя плагин, то сниппет его страхует повторяя тот же код.
Спасибо за идею затолкнуть это в общий класс — так и сделаю!
Могу попробовать собрать тест.Только если есть свободное время — в теории оно так и должно быть, но интересно же, как на практике.
Запустил тест на modhost взяв за основу твой тест скорости.
На чистом MODX:
Ну и на Fenom:
Тут даже и говорить ничего не надо, с феном-модификатором страница грузится моментально.
Fenom FOREVER... )))
На чистом MODX:
$tpl = '@INLINE <p>[[+val1:numabbr]] - [[+val2:numabbr]] - [[+val3:numabbr]]</p>';
0.0003231: Created inline "modChunk" with name "9ac2f45dface999372b73c0e849b6e2b"
6.4335611: Total time
2 097 152: Memory usage
Ну и на Fenom:
$tpl = '@INLINE <p>{$val1|numabbr} - {$val2|numabbr} - {$val3|numabbr}</p>';
0.0003171: Created inline "modChunk" with name "1eb147a25d4f0c2e1d98d1677831e5a7"
0.0079300: Compiled Fenom chunk with name "modchunk/1eb147a25d4f0c2e1d98d1677831e5a7"
0.0751421: Total time
4 194 304: Memory usage
Тут даже и говорить ничего не надо, с феном-модификатором страница грузится моментально.
Fenom FOREVER... )))
Не совсем корректный тест. Должен быть всегда
Таким образом будет видна разница между сниппетом и встраиванием напрямую.
$tpl = '@INLINE <p>{$val1|numabbr} - {$val2|numabbr} - {$val3|numabbr}</p>';
но в одном случае плагин для встраивания модификатора включен, а в другом — нет, и тогда будет запускаться сниппет, но тоже через Fenom.Таким образом будет видна разница между сниппетом и встраиванием напрямую.
Разница тоже потрясающая!
С плагином для феном-модификатора:
Без плагина (на основе сниппета-модификатора):
С плагином для феном-модификатора:
0.0004969: Created inline "modChunk" with name "1eb147a25d4f0c2e1d98d1677831e5a7"
0.0092301: Compiled Fenom chunk with name "modchunk/1eb147a25d4f0c2e1d98d1677831e5a7"
0.0684869: Total time
4 194 304: Memory usage
Без плагина (на основе сниппета-модификатора):
0.0001199: Created inline "modChunk" with name "1eb147a25d4f0c2e1d98d1677831e5a7"
0.0011730: Compiled Fenom chunk with name "modchunk/1eb147a25d4f0c2e1d98d1677831e5a7"
0.0009501: Loaded "modSnippet" with name "numabbr"
2.6079650: Total time
10 485 760: Memory usage
Ого!
Настолько разницы я не ожидал, круто.
Настолько разницы я не ожидал, круто.
А вот за тесты тебе респект, не знал что такая большая разница!
Что-то тут явно не так. На модхосте тестовая полупустая страница рендериться за 2.6 секунды?
Да ещё видимо это данные только одного прогона на чистом кэше. Такой тест малоинформативен. Прогони 10 раз и дай средний результат.
П.С. Ради интереса проверил на том же модхосте. Страница со сниппетом грузится за 0.04 сек. с пустым кэшем. Второй запрос за 0.02 сек. Видимо твой сниппет так грузит сайт.
Да ещё видимо это данные только одного прогона на чистом кэше. Такой тест малоинформативен. Прогони 10 раз и дай средний результат.
П.С. Ради интереса проверил на том же модхосте. Страница со сниппетом грузится за 0.04 сек. с пустым кэшем. Второй запрос за 0.02 сек. Видимо твой сниппет так грузит сайт.
Логично, прогнал каждый тест по 10 раз и вывел среднее значение Total time:
С плагином для феном-модификатора: 0.07425782
Без плагина (на основе сниппета-модификатора): 3.01222153
Код в сниппете и в плагине идентичный. Проверял на тестовом тарифе модхоста.
С плагином для феном-модификатора: 0.07425782
Без плагина (на основе сниппета-модификатора): 3.01222153
Код в сниппете и в плагине идентичный. Проверял на тестовом тарифе модхоста.
Да быть такого не может. Ну как страница с одним сниппетом может столько грузиться?
А какие цифры чистой страницы без модификатора и плагина?
А какие цифры чистой страницы без модификатора и плагина?
Вот усреднённое значение из 10 прогонов страницы без модификатора: 0.05295319
Скрипт один в один как в оригинале. Тестовый тариф модхост, PHP 7.0
Скрипт один в один как в оригинале. Тестовый тариф модхост, PHP 7.0
Ну и какой вывод напрашивается? :)
Вывод:
№1. Если нужен этот (или любой другой) модификатор, то лучше всегда использовать феном-модификаторы, а не сниппеты.
№2. Если есть модификаторы на сниппетах, переписать их все на феном.
№3. Если есть возможность, не использовать ни то ни другое. Вообще не стоит разрабатывать сайты, тогда никаких проблем не будет.
№1. Если нужен этот (или любой другой) модификатор, то лучше всегда использовать феном-модификаторы, а не сниппеты.
№2. Если есть модификаторы на сниппетах, переписать их все на феном.
№3. Если есть возможность, не использовать ни то ни другое. Вообще не стоит разрабатывать сайты, тогда никаких проблем не будет.
Аж целых 3! А третий я бы с небольшой правкой отправил нашей футбольной сборной. )
А я выскажу свой вывод, который ты можешь легко проигнорировать. Если пустая страница грузится за 0.05 сек, а со сниппетом за 3 сек, то проблема или в тесте или в сниппете.
А я выскажу свой вывод, который ты можешь легко проигнорировать. Если пустая страница грузится за 0.05 сек, а со сниппетом за 3 сек, то проблема или в тесте или в сниппете.
А как тебе такой тест?
Используем самый простой сниппет-модификатор, который просто возвращает $input:
Среднее значение с сниппетом: 2.59597648
Такой же упрощённый плагин для феном: 0.0543768
Не забывай, что тест проходит 10000 итераций.
Вывод: модификаторы — необходимое зло, но из двух зол лучше выбрать меньшее...
Используем самый простой сниппет-модификатор, который просто возвращает $input:
<?php
return $input;
Среднее значение с сниппетом: 2.59597648
Такой же упрощённый плагин для феном: 0.0543768
Не забывай, что тест проходит 10000 итераций.
Вывод: модификаторы — необходимое зло, но из двух зол лучше выбрать меньшее...
Как я и говорил, проверял на PHP 7.0. Когда переключил на 7.2 значения сильно поменялись в лучшую сторону, но пропорции остались:
Сниппет — 2.0118967666667
Плагин — 0.0478010
Сниппет — 2.0118967666667
Плагин — 0.0478010
Не забывай, что тест проходит 10000 итераций.Вот и причина. Теперь понятно, откуда такая разница. Кстати, Василий в свое время предложил решение для оптимизации именно такого случая — замена фильтров на функции.
Честно говоря, я не понимаю, что показывает твой тест. Никто не будет вызывать на странице 10 тыс. раз этот сниппет-фильтр. Обычно пользуются пагинацией и выводят 10 записей. Поэтому твой тест показывает непонятно что. Василий хоть тестирует работу хостинга, а что ты загадка. А если 10 млн. прогонов сделать, то вообще глаза округлятся.
П.С. Это я к тому, что твоим сниппетом можно пользоваться и с феномом и без. Всё будет хорошо. )
Честно говоря, я не понимаю, что показывает твой тест. Никто не будет вызывать на странице 10 тыс. раз этот сниппет-фильтр. Поэтому твой тест показывает непонятно что.Ну, мне показалось что на больших объёмах разница лучше видна невооружённым взглядом.
Это я к тому, что твоим сниппетом можно пользоваться и с феномом и без. Всё будет хорошо.Поэтому я и вшил в пакет оба варианта, кто не пользуется одним, воспользуется другим. А кому важна скорость работы — тот уже и так использует феном везде.
А третий я бы с небольшой правкой отправил нашей футбольной сборной. )Посмеялся от души, спасибо за юмор! :D
Ну, мне показалось что на больших объёмах разница лучше видна невооружённым взглядом.Думаю, разница исчисляется сотыми секунды. Но если увеличить в 10 тыс. раз, то впечатлительные будут потом мучаться бессонницей. )
А можешь сделать тест для более реального случая — 10 циклов?
10 циклов:
Как правильно загрузить свой класс из плагина на pdoToolsOnFenomInit?
loadClass и getService не срабатывают — ломают Fenom на странице. В логах сервера появляется что-то типа этого:
В модификаторе-сниппете с этим проблем нету.
loadClass и getService не срабатывают — ломают Fenom на странице. В логах сервера появляется что-то типа этого:
Uncaught Error: Call to a member function loadClass() on null in путь_к_плагину
В модификаторе-сниппете с этим проблем нету.
Нашел решение, просто нужно было подключить в функцию переменную $modx:
function ($input) use ($modx)
Кстати, спасибо большое за возможность добавлять свои fenom-модификаторы — это очень крутая вещь!
Спасибо за вашу работу!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.