Оптимизация создания Среды Jinja2

Что означает *p+++c&63 в C ++?

  1. p++ Приращение постфикса. Увеличивает указатель p на следующий символ; Результатом является значение указателя до приращения.
  2. *p++ Направленность. Через указатель приводит к результату выражения 1. Результатом является символ, на который изначально указывал p, то есть '2'.
  3. *p+++c Дополнение. Добавляет результат 2. и c. То же, что *p++ + c
  4. *p+++c&63 Побитовое и. Левый операнд является результатом 3., а правый оператор является целочисленным литералом.

С полными скобками и разумным интервалом: (*(p++) + c) & 63


Вот отформатированная, правильно сформированная версия, которая не выдает предупреждений:

#include <stdio.h>

int main(int, char**a) {
    const char* p = "25YZ[<TT];SR^2]W+%'C^,X-O?O&__V[!;TT];D+ #.A3,A+ 4C,$!_.";
    for(char c = a[1][0];
        *p;
        putc(c=((*p++ + c) & 63) + 32, stdout));
}

[1124 ] Строка "25YZ[<TT];SR^2]W+%'C^,X-O?O&__V[!;TT];D+ #.A3,A+ 4C,$!_.", вероятно, является зашифрованным текстом. Программа расшифровывает его, если ему дан ключ в качестве аргумента. Первый символ первого аргумента используется в качестве ключа.

Программа для перебора ключей:


 #include <stdio.h>
 int main() {
     for (char i = 0; i < 127; i++) {
         const char* p = "25YZ[<TT];SR^2]W+%'C^,X-O?O&__V[!;TT];D+ #.A3,A+ 4C,$!_.";
         printf("%c: ", i);
         for(char c = i;
             *p;
             putc(c=((*p++ + c) & 63) + 32, stdout));
         putc('\n', stdout);
     }
 }
 


Чего мне не хватает? [ 1127]

  1. Порядок операторов 2. Предполагается, что ключ буквенно-цифровой.
9
задан zgoda 6 March 2009 в 14:03
поделиться

3 ответа

Армин предложил предварительно скомпилировать шаблоны Jinja2 в код Python и использовать скомпилированные шаблоны в производстве. Итак, я сделал для этого компилятор / загрузчик, и теперь он обрабатывает некоторые сложные шаблоны в 13 раз быстрее, избавляясь от всех накладных расходов на синтаксический анализ. Соответствующее обсуждение со ссылкой на репозиторий находится здесь .

10
ответ дан 4 December 2019 в 13:49
поделиться

Хорошо, люди, это - то, что я получил сегодня на #pocoo:

[20:59] zgoda: привет, я хотел бы знать, мог ли я оптимизировать свой jinja2 процесс создания среды, проблему-> Оптимизирующий создание Среды Jinja2

[21:00] zgoda: мне производили профилировщика из "холодного" приложения-> http://paste.pocoo.org/show/107009/

[21:01] zgoda: и для "горячего"-> http://paste.pocoo.org/show/107014/

[21:02] zgoda: я задаюсь вопросом, мог ли я несколько ниже стоимость ЦП создания среды для "холодных" запросов

[21:05] mitsuhiko: zgoda: поместите огибающее создание в модуль, который Вы импортируете

[21:05] mitsuhiko: как

[21:05] mitsuhiko: от yourapplication.utils импортируют ENV

[21:05] zgoda: это уже там

[21:06] mitsuhiko: хм

[21:06] mitsuhiko: я думаю, что проблема состоит в том, что шаблон перекомпилирован каждый доступ

[21:06] mitsuhiko: к сожалению, gae невероятен ограниченный, я не знаю, существует ли очень, я могу в настоящее время делать

[21:07] zgoda: я попробовал Джинджей bytecache, но она не работает над напоминанием (на на dev сервере)

[21:08] mitsuhiko: я знаю

[21:08] mitsuhiko: appengine не имеет маршала

[21:12] zgoda: mitsuhiko:спасибо

[21:13] zgoda: я надеялся, что делаю что-то не так, и это может быть оптимизировано...

[21:13] mitsuhiko: zgoda: следующий выпуск будет идти с улучшенной поддержкой appengine, но я еще не уверен, как реализовать улучшенное кэширование для одного

Выглядит, что Armin знает о проблемах с байт-кодом, кэширующимся на AppEngine, и имеет некоторые планы улучшить Jinja2, чтобы позволить кэшироваться на GAE. Я надеюсь, что вещи будут поправляться со временем.

4
ответ дан 4 December 2019 в 13:49
поделиться

Согласно этому рецепту Google вы можете использовать memcache для кэширования байт-кодов. Вы также можете кэшировать содержимое файла шаблона. Все по одному рецепту

1
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: