Долго, замедлите операцию в тайм-ауте причин представления Django. Какой-либо путь к Python для разговора Ajax вместо этого?

Преамбула для людей микрооптимизатора

Помнит:

"Программисты тратят впустую огромное количество времени, думающее об или вызывающее беспокойство о, скорость некритических частей их программ, и эти попытки эффективности на самом деле оказывают сильное негативное влияние, когда отладку и обслуживание рассматривают. Мы должны забыть о маленькой эффективности, сказать приблизительно 97% времени: преждевременная оптимизация является корнем всего зла. все же мы не должны отказываться от наших возможностей в этом критические 3%".

(Благодаря метаморфоза для полной кавычки)

не используют массив C вместо вектора (или безотносительно) просто, потому что Вы полагаете, что это быстрее, поскольку это, как предполагается, низшего уровня. Вы были бы неправы.

Использование вектором по умолчанию (или безопасный контейнер, адаптированный к Вашей потребности), и затем если Ваш профилировщик говорит, это - проблема, посмотрите, можно ли оптимизировать его, или при помощи лучшего алгоритма или при помощи изменяющегося контейнера.

Это сказало, мы можем вернуться к исходному вопросу.

Статический / Динамический массив?

классы массива C++ являются лучше ведущими себя, чем низкоуровневый C массив, потому что они знают много о себе и могут ответить на вопросы C, массивы не могут. Они в состоянии убрать после себя. И что еще более важно, они обычно пишутся с помощью шаблонов и/или встраивания, что означает, что то, что появляется к большому количеству кода в отладке, решает к минимальному коду, произведенному в сборке конечных версий, не означая различия с их встроенной менее безопасной конкуренцией.

, В целом, это падает на две категории:

Динамические массивы

Используя указатель на массив malloc-ed/new-ed будут на высоте с такой скоростью, как станд.:: векторная версия, и намного менее безопасный (см. сообщение litb ).

Так используют станд.:: вектор.

Статические массивы

Используя статический массив будут на высоте:

Так используют станд.:: массив .

Неинициализированная память

Иногда, с помощью vector вместо необработанного буфера несет видимые расходы, потому что эти vector инициализирует буфер в конструкции, в то время как код, который это заменяет, не сделал, как отмечено bernie в его ответ .

, Если это верно, тогда можно ли обработать его при помощи unique_ptr вместо vector или, если случай не является исключительным в строке кода, на самом деле запишите класс buffer_owner, который будет владеть той памятью, и предоставлять Вам легкий и безопасный доступ к нему, включая премии как изменение размеров его (использование realloc?), или независимо от того, что Вам нужно.

5
задан mikemaccana 17 October 2009 в 17:19
поделиться

3 ответа

Ajax не требует какой-либо конкретной технологии на стороне сервера. Все, что вам нужно, это вернуть ответ в некоторой форме, которую может понять некоторый Javascript на стороне клиента. JSON - отличный выбор, поскольку его легко создать на Python (в 2.6 есть библиотека json , а в Django есть django.utils.simplejson для других версий).

Поэтому все, что вам нужно сделать, это поместить свои данные в форму JSON, а затем отправить их так же, как и любой другой ответ, то есть заключить их в HTTPResponse .

7
ответ дан 18 December 2019 в 13:16
поделиться

Один из способов - отправить задачу с помощью AJAX / JS или обычным способом, запустить ее в фоновом режиме в вашем представлении и немедленно вернуться. Затем используйте AJAX / JS на стороне клиента, чтобы периодически проверять выполнение задачи. Если это сделано, перезагрузите страницу или укажите ссылку на клиента.

КЛИЕНТ «Пожалуйста, запустите задачу, используя эти данные.» -> СЕРВЕР

КЛИЕНТ <- «Задача запущена!» СЕРВЕР

КЛИЕНТ «Готово?» -> СЕРВЕР

КЛИЕНТ <- «Нет.» СЕРВЕР

КЛИЕНТ «Готово?» -> СЕРВЕР

КЛИЕНТ <- «Да, вот ссылка, по которой вы можете просмотреть результаты» СЕРВЕР

При отправке данных с сервера на клиент без запроса клиента об этом возможно, хорошо типа a (технология называется Comet ) в вашем случае это не совсем необходимо.

6
ответ дан 18 December 2019 в 13:16
поделиться

Я не уверен, что это то, что вы ищете, но , возможно, этот вопрос (Как реализовать минимальный сервер для AJAX в Python?) Будет полезным. В своем ответе я привожу минимальный пример (который не очень хорошо написан, например, теперь я бы использовал jquery ...).

Изменить: По просьбе OP, вот пример интерфейса с JQuery. Обратите внимание, что я не эксперт в этом, поэтому могут возникнуть проблемы. Предполагается, что этот пример работает с бэкэндом JSON-RPC, например этот .

<html>
<head>

<title>JSON-RPC test</title>

<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="json2.js"></script>

<script type="text/javascript">

function test_button() {
    var data = $("[name=test_text]").val();
    var json_object = {"method": "power",
                       "params": [parseInt(data), 3],
                       "id": "test_button"};
    var json_string = JSON.stringify(json_object);
    $.post("frontend.html", json_string, test_callback, "json")
}

function test_callback(json_object) {
    $("#test_result").text(json_object.result.toString());
}

</script>

</head>
<body>

<input type="text" name="test_text" value="2" size="4">
** 3 =
<span id="test_result">0</span>
<input type=button onClick="test_button();" value="calc" title="calculate value">

</body>
</html>
1
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

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