Моно производительность

Вы можете передавать данные в ответ, но вы не можете динамически обновлять шаблон так, как вы описываете. Шаблон создается один раз на стороне сервера, а затем отправляется клиенту. Вам нужно будет использовать JavaScript для чтения потокового ответа и вывода данных на стороне клиента.

Используйте XMLHttpRequest, чтобы сделать запрос к конечной точке, которая будет передавать данные. Затем периодически читайте поток, пока он не будет выполнен.

В этом примере используется очень простой формат сообщения: одна строка данных, за которой следует новая строка. Конечно, вы можете так же усложниться в разборе, сколько хотите, пока есть способ идентифицировать каждое сообщение. Например, вы можете вернуть объект JSON и декодировать его на клиенте.

from time import sleep
from flask import Flask, render_template
from math import sqrt

app = Flask(__name__)

@app.route('/')
def index():
    # render the template (below) that will use JavaScript to read the stream
    return render_template('index.html')

@app.route('/stream_sqrt')
def stream():
    def generate():
        for i in range(500):
            yield '{}\n'.format(sqrt(i))
            sleep(1)

    return app.response_class(generate(), mimetype='text/plain')

app.run()
<p>This is the latest output: <span id="latest"></span></p>
<p>This is all the output:</p>
<ul id="output"></ul>
<script>
    var latest = document.getElementById('latest');
    var output = document.getElementById('output');

    var xhr = new XMLHttpRequest();
    xhr.open('GET', '{{ url_for('stream') }}');
    xhr.send();
    var position = 0;

    function handleNewData() {
        // the response text include the entire response so far
        // split the messages, then take the messages that haven't been handled yet
        // position tracks how many messages have been handled
        // messages end with a newline, so split will always show one extra empty message at the end
        var messages = xhr.responseText.split('\n');
        messages.slice(position, -1).forEach(function(value) {
            latest.textContent = value;  // update the latest value in place
            // build and append a new item to a list to log all output
            var item = document.createElement('li');
            item.textContent = value;
            output.appendChild(item);
        });
        position = messages.length - 1;
    }

    var timer;
    timer = setInterval(function() {
        // check the response for new data
        handleNewData();
        // stop checking once the response has ended
        if (xhr.readyState == XMLHttpRequest.DONE) {
            clearInterval(timer);
            latest.textContent = 'Done';
        }
    }, 1000);
</script>
23
задан Fernando Briano 19 December 2008 в 11:32
поделиться

5 ответов

Существует интересное сообщение от Miguel на этом.

"Alvaro указывает, что в Моно Сравнительном тесте Перестрелки Языка существует 18-го места по сравнению с 10-м местом Java.

Мы знаем, что собственный выпуск Java Sun (не открытый исходный код один, как, который нигде не найти все же) быстрее, чем Моно, но я был удивлен, что мы были до сих пор позади. Таким образом, я посмотрел на сравнение между Java6 и Моно".

Comparison - Java and Mono
(источник: tirania.org )

Посмотрите Детали Здесь

12
ответ дан Glorfindel 29 November 2019 в 01:14
поделиться

amazedsaint> существует интересное сообщение от Miguel на этом.

, Что диаграмма является устаревшим путем!

Вот текущее Моно сравнение C# 4.0

12
ответ дан igouy 29 November 2019 в 01:14
поделиться
0
ответ дан Mehrdad Afshari 29 November 2019 в 01:14
поделиться

Мой тест (с использованием сложных математических задач и манипуляций с памятью (с необработанными строками)):

MonoDevelop Windows (выполняется на консоли с использованием .net 3.5): { {1}} Realizando cálculos em 1.000.000 itens ... 535 Realizando operações com strings longas ... 2.038 Realizando cálculos em 1.000.000 itens ... 530 Реализация операций для длинных строк ... 1.962 Реализация операций для 1.000 000 единиц ... 530 Реализация операций для длинных строк ... 1,963

Использование mono.exe в Windows: { {1}} Realizando cálculos em 1.000.000 itens ... 6.875 Realizando operações com strings longas ... 6.206 Realizando cálculos em 1.000.000 itens ... 6.840 Реализация операций для длинных строк ... 6.114 Реализация операций для 1.000 000 единиц ... 6.857 Реализация операций для длинных строк ... 6.116

Использование моно в Linux Ubuntu: {{ 1}} Realizando cálculos em 1.000.000 itens ... 5 934 Realizando operações com longas ... 6 915 Realizando cálculos em 1.000.000 itens ... 6 034 Realizando operações com longas ... 7 489 Realizando cálculos em 1.000.000 itens ... 5,740 Realizando operações com longas ... 6 731

Тот же исходный код, но в Visual Studio 2008: Realizando cálculos em 1.000.000 itens ... 588 Realizando operações com strings longas ... 1.289 {{1 }} Realizando cálculos em 1.000.000 itens ... 566 Realizando operações com strings longas ... 1.320 Realizando cálculos em 1.000.000 itens ... 702 Realizando operações com strings longas ... 1.393

VS 2008 сгенерировал exe с NGEN (собственный исполняемый файл): Realizando cálculos em 1.000.000 itens ... 567 Realizando operações com strings longas ... 1.255 Realizando cálculos em 1.000.000 itens ... 563 Realizando operações com strings longas ... 1.269 Realizando cálculos em 1.000.000 itens ... 562 {{1 }} Реализация операций com strings longas ... 1.263

В этих тестах моно в 10 раз медленнее, чем .net 3.5 SP 1 = (

2
ответ дан 29 November 2019 в 01:14
поделиться
Другие вопросы по тегам:

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