То есть базовый объект Smarty требует в ≈2 раза больше памяти, чем Twig. Хоть память и дешёвая, всё равно хочется надеяться, в следующих версиях Smarty это оптимизируют, поскольку для исполнения скомпилированного шаблона скорее всего не нужно столько богатства, сколько загружает Smarty по умолчанию :)
Это по крайней мере странно. Вы постарались сделать из Twig «почти» Smarty, чтобы вам было удобнее. Однако игнорируете факты, что описанные вами проблемы не касаются Smarty 3, для которого привычный вам синтаксис — родной.
Я тоже когда-то читал эту статью, и думал, что Twig действительно самый быстрый. Однако, ещё тогда меня смутило, почему при использовании шаблонизаторов в реальных условиях (без принудительной компиляции) цифры по производительности предоставлены не были. Наверное, вот почему: habrahabr.ru/blogs/webdev/127906/#comment_4226462
Изучил скомпилированные версии шаблонов, и обнаружил, что Twig по умолчанию экранирует данные, на что он конечно же тратит время. Отключил экранирование ('autoescape' => false), получил 0.071 секунду в предыдущем тесте. То есть всё равно в 4-5 раз медленнее, чем Smarty.
Ещё интересным показалось то, что Smarty 3 объединяет всю цепочку из наследуемых шаблонов в один большой и затем компилирует, будто изначально и не было никакого наследования. То есть в результате при использовании наследования вообще не будет потерь производительности! К слову, при возможности Smarty 3 так же поступает с инклюдами.
Twig же старательно создал для каждого шаблона по красивому классу и файлу. И при каждой генерации страницы загружает всё это добро.
Провёл небольшое сравнение производительности Smarty 3.0, 3.1 RC1 и последней версии Twig. Тестировал базовые возможности: вставка значений переменных и циклы. В шаблоне вставляется значение 1000 переменных, а так же в цикле выводится содержимое массива из 1000 элементов. Результаты очень интересны.
Компиляция шаблона: Twig: 0.17 секунд
Smarty 3.0.8: 1.86 секунд
Smarty 3.1 RC1: 1.83 секунды
Да, медленно. Во время разработки придётся потерпеть. Но например меня больше всего интересует производительность в бою, когда сайт не в разработке, а уже работает. Очень важно, чтобы компилятор шаблона сделал свою работу качественно, и скомпилированный шаблон работал максимально быстро.
Итак, скорость работы скомпилированного шаблона: Twig: 0.132 секунды
Smarty 3.0.8: 0.021 секунда
Smarty 3.1 RC1: 0.014 секунд
То есть Smarty 3.0.8 в 6 раз быстрее, чем Twig. Smarty 3.1 RC1 — в 9!
Может быть я в чём-то ошибся, поэтому выкладываю архив с тестами: smarty_vs_twig.7z (169 кб., всё включено).
Прошу более компетентных в Twig проверить мой код — где я мог допустить ошибку?
Чтобы не вводить читателей в заблуждение, я думаю стоит указать в статье, что вы сравниваете устаревшую версию Smarty с современным Twig, а так же о том, что в Smarty 3 (которому, к слову, уже больше года) описанные вами синтаксические недостатки всё-таки были исправлены.
Не могли бы вы поделиться информацией о производительности подобных приложений на реалльных устройствах? Больше всего интересует время первого запуска приложения и общая отзывчивость программ, по сравнению с приложениями, напианных на Java.
У Android 2.2 есть возможность перенести установленную программу на SD карточку. Наверное, вопрос был в том, переносятся ли все эти мегабайты библиотек на карточку, или часть остаётся во внутренней памяти телефона.
Полученные бесплатной версией APK файлы вообще устанавливаются на телефон? Или только на эмулятор? Просто не вижу смысла писать «для себя», когда написанное добро можно запустить только на эмуляторе.
Наверное для тех, кто занимается разработкой одновременно для нескольких мобильных платформ, и кто хочет использовать написанный код на всех платформах (за исключением, конечно, специфичных для каждой платформы вещей).
Жалко правда, что Google не профинансировал подобную разработку, было бы очень приятно получить эту штуку за ту же цену, что и Android SDK =)
Как я понял, наиболее адекватное решение проблемы с отдельным консольным окном — только запуск консоли от имени администратора. По этой части я только улучшил вывод ошибки, если у программы нет прав на запись в hosts.
По поводу алиаса. Я долго размышлял что делать в подобных случаях. Внутренности программы позволяют обрабатывать их отдельно. Но разрывать строку на две на мой взгляд немного нелогично, ведь это алиасы. Для такого случая я и сделал операцию rollback. При hosts set a.pusher.we 192.168.0.2 выведется какая строка была обновлена, и пользователь сразу поймёт что не так, и при необходимости сделает откат.
Спасибо.
Сегодня вышла новая версия программы. Просьба протестировать на Windows 7.
— Поддержка IDN (на экране отображается в декодированном виде)
— Поддержка IPv6 адресов
— Поддержка алиасов (несколько доменных имён в строке)
— Новая операция rollback для отмены работы последней команды
— add и set — разные команды (добавление и обновление соответственно)
— Команда add сама догадывается о порядке параметров, всё что после # — комментарий
— Возможность создавать несколько резервных копий hosts, задавая имя копии
Samsung Galaxy S, Android 2.2
Config » Call settings » All calls » Answering call » Automatic answering » After 1 second
Написано, что будет срабатывать только при подключённой гарнитуре.
{$var|escape}
или просто{$var}
с включённым автоэкранированием Smarty преобразует в вызов htmlspecialchars:Код для Smarty:
Код для Twig:
Результат:
Smarty: 899872 байт
Twig: 360952 байт
То есть базовый объект Smarty требует в ≈2 раза больше памяти, чем Twig. Хоть память и дешёвая, всё равно хочется надеяться, в следующих версиях Smarty это оптимизируют, поскольку для исполнения скомпилированного шаблона скорее всего не нужно столько богатства, сколько загружает Smarty по умолчанию :)
Только что на тесте foreach сделал замеры памяти.
Для Smarty:
Для Twig:
Память во время компиляции:
Smarty: 2139904 байт
Twig: 1103960 байт
Память выполнения скомпилированного шаблона:
Smarty: 26472 байт
Twig: 100824 байт
То есть во время компиляции Smarty потребляет в ≈2 раза больше памяти, при обработке скомпилированного шаблона — в ≈4 раза меньше.
Ещё интересным показалось то, что Smarty 3 объединяет всю цепочку из наследуемых шаблонов в один большой и затем компилирует, будто изначально и не было никакого наследования. То есть в результате при использовании наследования вообще не будет потерь производительности! К слову, при возможности Smarty 3 так же поступает с инклюдами.
Twig же старательно создал для каждого шаблона по красивому классу и файлу. И при каждой генерации страницы загружает всё это добро.
Компиляция шаблона:
Twig: 0.17 секунд
Smarty 3.0.8: 1.86 секунд
Smarty 3.1 RC1: 1.83 секунды
Да, медленно. Во время разработки придётся потерпеть. Но например меня больше всего интересует производительность в бою, когда сайт не в разработке, а уже работает. Очень важно, чтобы компилятор шаблона сделал свою работу качественно, и скомпилированный шаблон работал максимально быстро.
Итак, скорость работы скомпилированного шаблона:
Twig: 0.132 секунды
Smarty 3.0.8: 0.021 секунда
Smarty 3.1 RC1: 0.014 секунд
То есть Smarty 3.0.8 в 6 раз быстрее, чем Twig. Smarty 3.1 RC1 — в 9!
Может быть я в чём-то ошибся, поэтому выкладываю архив с тестами: smarty_vs_twig.7z (169 кб., всё включено).
Прошу более компетентных в Twig проверить мой код — где я мог допустить ошибку?
Очень радует, что появилась поддержка Mono. Давно поднимались вопросы совместимости React OS с .net, а вот и ответ.
Жалко правда, что Google не профинансировал подобную разработку, было бы очень приятно получить эту штуку за ту же цену, что и Android SDK =)
По поводу алиаса. Я долго размышлял что делать в подобных случаях. Внутренности программы позволяют обрабатывать их отдельно. Но разрывать строку на две на мой взгляд немного нелогично, ведь это алиасы. Для такого случая я и сделал операцию rollback. При hosts set a.pusher.we 192.168.0.2 выведется какая строка была обновлена, и пользователь сразу поймёт что не так, и при необходимости сделает откат.
Сегодня вышла новая версия программы. Просьба протестировать на Windows 7.
— Поддержка IDN (на экране отображается в декодированном виде)
— Поддержка IPv6 адресов
— Поддержка алиасов (несколько доменных имён в строке)
— Новая операция rollback для отмены работы последней команды
— add и set — разные команды (добавление и обновление соответственно)
— Команда add сама догадывается о порядке параметров, всё что после # — комментарий
— Возможность создавать несколько резервных копий hosts, задавая имя копии
Config » Call settings » All calls » Answering call » Automatic answering » After 1 second
Написано, что будет срабатывать только при подключённой гарнитуре.