Помнит:
"Программисты тратят впустую огромное количество времени, думающее об или вызывающее беспокойство о, скорость некритических частей их программ, и эти попытки эффективности на самом деле оказывают сильное негативное влияние, когда отладку и обслуживание рассматривают. Мы должны забыть о маленькой эффективности, сказать приблизительно 97% времени: преждевременная оптимизация является корнем всего зла. все же мы не должны отказываться от наших возможностей в этом критические 3%".
(Благодаря метаморфоза для полной кавычки)
не используют массив C вместо вектора (или безотносительно) просто, потому что Вы полагаете, что это быстрее, поскольку это, как предполагается, низшего уровня. Вы были бы неправы.
Использование вектором по умолчанию (или безопасный контейнер, адаптированный к Вашей потребности), и затем если Ваш профилировщик говорит, это - проблема, посмотрите, можно ли оптимизировать его, или при помощи лучшего алгоритма или при помощи изменяющегося контейнера.
Это сказало, мы можем вернуться к исходному вопросу.
классы массива C++ являются лучше ведущими себя, чем низкоуровневый C массив, потому что они знают много о себе и могут ответить на вопросы C, массивы не могут. Они в состоянии убрать после себя. И что еще более важно, они обычно пишутся с помощью шаблонов и/или встраивания, что означает, что то, что появляется к большому количеству кода в отладке, решает к минимальному коду, произведенному в сборке конечных версий, не означая различия с их встроенной менее безопасной конкуренцией.
, В целом, это падает на две категории:
Используя указатель на массив malloc-ed/new-ed будут на высоте с такой скоростью, как станд.:: векторная версия, и намного менее безопасный (см. сообщение litb ).
Так используют станд.:: вектор.
Используя статический массив будут на высоте:
Так используют станд.:: массив .
Иногда, с помощью vector
вместо необработанного буфера несет видимые расходы, потому что эти vector
инициализирует буфер в конструкции, в то время как код, который это заменяет, не сделал, как отмечено bernie в его ответ .
, Если это верно, тогда можно ли обработать его при помощи unique_ptr
вместо vector
или, если случай не является исключительным в строке кода, на самом деле запишите класс buffer_owner
, который будет владеть той памятью, и предоставлять Вам легкий и безопасный доступ к нему, включая премии как изменение размеров его (использование realloc
?), или независимо от того, что Вам нужно.
Ajax не требует какой-либо конкретной технологии на стороне сервера. Все, что вам нужно, это вернуть ответ в некоторой форме, которую может понять некоторый Javascript на стороне клиента. JSON - отличный выбор, поскольку его легко создать на Python (в 2.6 есть библиотека json
, а в Django есть django.utils.simplejson
для других версий).
Поэтому все, что вам нужно сделать, это поместить свои данные в форму JSON, а затем отправить их так же, как и любой другой ответ, то есть заключить их в HTTPResponse
.
Один из способов - отправить задачу с помощью AJAX / JS или обычным способом, запустить ее в фоновом режиме в вашем представлении и немедленно вернуться. Затем используйте AJAX / JS на стороне клиента, чтобы периодически проверять выполнение задачи. Если это сделано, перезагрузите страницу или укажите ссылку на клиента.
КЛИЕНТ «Пожалуйста, запустите задачу, используя эти данные.» -> СЕРВЕР
КЛИЕНТ <- «Задача запущена!» СЕРВЕР
КЛИЕНТ «Готово?» -> СЕРВЕР
КЛИЕНТ <- «Нет.» СЕРВЕР
КЛИЕНТ «Готово?» -> СЕРВЕР
КЛИЕНТ <- «Да, вот ссылка, по которой вы можете просмотреть результаты» СЕРВЕР
При отправке данных с сервера на клиент без запроса клиента об этом возможно, хорошо типа a (технология называется Comet ) в вашем случае это не совсем необходимо.
Я не уверен, что это то, что вы ищете, но , возможно, этот вопрос (Как реализовать минимальный сервер для 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>