Круговая диаграмма с jQuery

Если Ваша цель состоит в том, чтобы использовать профилировщика, используйте один из предложенных.

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

Просто останов это несколько раз и каждый раз смотрит на стек вызовов. Если существует некоторый код, который тратит впустую некоторый процент времени, 20% или 50% или что бы то ни было, который является вероятностью, что Вы застанете его на месте на каждом образце. Таким образом, это - примерно процент образцов, на которых Вы будете видеть его. Нет никаких образованных требуемых догадок. Если у Вас действительно будет предположение относительно того, какова проблема, это докажет или опровергнет ее.

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

Протест: Программисты склонны скептически относиться к этой технике, если они не использовали ее сами. Они скажут, что профилировщики дают Вам эту информацию, но это только верно, если они выбирают весь стек вызовов, и затем позволяют Вам исследовать случайный набор образцов. (Сводки - то, где понимание потеряно.) Графы вызовов не дают Вам ту же информацию, потому что

  1. они не подводят итог на уровне инструкции, и
  2. они дают запутывающие сводки в присутствии рекурсии.

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

P.S. Это может также быть сделано на программах мультипотока, если существует способ собрать образцы стека вызовов пула потоков в моменте времени, поскольку существует в Java.

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

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

Другое возражение, которое я часто слышу: " Это остановится где-нибудь случайный, и это пропустит настоящую проблему ". Это прибывает из наличия предшествующего понятия того, какова настоящая проблема. Ключевое свойство проблем производительности - то, что они игнорируют ожидания. Выборка говорит Вам, что что-то - проблема, и Ваша первая реакция является недоверием. Это естественно, но можно быть уверены, находит ли это проблему, это реально, и наоборот.

ДОБАВИЛ: Позвольте мне сделать Байесовское объяснение того, как оно работает. Предположим, что существует некоторая инструкция I (вызов или иначе), который находится на стеке вызовов некоторая часть f из времени (и таким образом стоит так многого). Для простоты предположите, что мы не знаем, какой f, но предположите, что это любой 0.1, 0.2, 0.3... 0.9, 1.0, и априорная вероятность каждой из этих возможностей 0.1, таким образом, все эти затраты являются, одинаково вероятно, априорными.

Тогда предполагают, что мы берем всего 2 образца стека, и мы видим инструкцию I на обоих образцах, обозначенном наблюдении o=2/2. Это дает нам новые оценки частоты f из I, согласно этому:

Prior                                    
P(f=x) x  P(o=2/2|f=x) P(o=2/2&&f=x)  P(o=2/2&&f >= x)  P(f >= x | o=2/2)

0.1    1     1             0.1          0.1            0.25974026
0.1    0.9   0.81          0.081        0.181          0.47012987
0.1    0.8   0.64          0.064        0.245          0.636363636
0.1    0.7   0.49          0.049        0.294          0.763636364
0.1    0.6   0.36          0.036        0.33           0.857142857
0.1    0.5   0.25          0.025        0.355          0.922077922
0.1    0.4   0.16          0.016        0.371          0.963636364
0.1    0.3   0.09          0.009        0.38           0.987012987
0.1    0.2   0.04          0.004        0.384          0.997402597
0.1    0.1   0.01          0.001        0.385          1

                  P(o=2/2) 0.385                

в последнем столбце говорится, что, например, вероятность, которая f> = 0.5 составляет 92%, от предшествующего предположения о 60%.

предположим предшествующие предположения отличаются. Предположим, что мы предполагаем, что P (f=0.1).991 (почти бесспорный), и все другие возможности почти невозможны (0.001). Другими словами, наша предшествующая уверенность состоит в том, что I является дешевым. Тогда мы добираемся:

Prior                                    
P(f=x) x  P(o=2/2|f=x) P(o=2/2&& f=x)  P(o=2/2&&f >= x)  P(f >= x | o=2/2)

0.001  1    1              0.001        0.001          0.072727273
0.001  0.9  0.81           0.00081      0.00181        0.131636364
0.001  0.8  0.64           0.00064      0.00245        0.178181818
0.001  0.7  0.49           0.00049      0.00294        0.213818182
0.001  0.6  0.36           0.00036      0.0033         0.24
0.001  0.5  0.25           0.00025      0.00355        0.258181818
0.001  0.4  0.16           0.00016      0.00371        0.269818182
0.001  0.3  0.09           0.00009      0.0038         0.276363636
0.001  0.2  0.04           0.00004      0.00384        0.279272727
0.991  0.1  0.01           0.00991      0.01375        1

                  P(o=2/2) 0.01375                

Теперь это говорит, что P (f> = 0.5) составляет 26%, от предшествующего предположения 0,6%. Таким образом Байесов позволяет нам обновлять нашу оценку вероятной стоимости [1 111]. Если объем данных является небольшим, он не говорит нам точно, какова стоимость, только что это является достаточно большим, чтобы стоить зафиксировать.

еще один способ посмотреть на него называют Правило наследования . Если Вы зеркально отражаете монету 2 раза, и она подходит, направляется оба раза, что это говорит Вам о вероятном взвешивании монеты? Уважаемый способ ответить состоит в том, чтобы сказать, что это - Бета распределение со средним значением (количество хитов + 1) / (количество попыток + 2) = (2+1) / (2+2) = 75%.

(Ключ - то, что мы видим I несколько раз. Если мы только видим его однажды, который не говорит нам очень за исключением того, что f> 0.)

Так, даже очень небольшое количество образцов может сказать нам много о стоимости инструкций, что это видит. (И это будет видеть их с частотой, в среднем, пропорциональный их стоимости. Если n образцы будут взяты, и f стоимость, то I появится на [1 117] образцы. Пример, n=10, f=0.3, который является 3+/-1.4 образцы.)

ДОБАВЛЕННЫЙ, для предоставления интуитивного чувства для различия между измерением и случайной выборкой стека:
существуют профилировщики теперь, когда образец, стек, даже на тактовом стеной времени, но , что выходит , является измерениями (или горячий путь или горячая точка, от которой "узкое место" может легко скрыться). Что они не показывают Вам (и они легко могли) быть самими фактическими образцами. И если Ваша цель к [1 128], находят узкое место, количество их, которых необходимо видеть, [в среднем 1 129], 2 разделенных частью времени, которое требуется. Таким образом, если потребуется 30% времени, 2/.3 =, то 6,7 образцов, в среднем, покажут его, и шанс, что 20 образцов покажут, что это - 99,2%.

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

enter image description here

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

92
задан John Saunders 5 November 2013 в 19:27
поделиться

1 ответ

Flot

Ограничения: линии, точки, заполненные области, столбцы, круговая диаграмма и их комбинации

С точки зрения взаимодействия, Flot, безусловно, приблизит вас к Flash. построение графиков, как вы можете получить с помощью jQuery . Несмотря на то, что график выводится довольно гладко и красиво, вы также можете взаимодействовать с точками данных. Под этим я подразумеваю, что вы можете иметь возможность навести указатель мыши на точку данных и получить визуальную обратную связь о значении этой точки на графике.

Основная версия flot поддерживает круговые диаграммы.

Возможность масштабирования Flot.

Вдобавок к этому, у вас также есть возможность выбрать кусок графика, чтобы получить данные для определенной «зоны». В качестве второстепенной функции этого «зонирования» вы также можете выбрать область на графике и увеличить масштаб, чтобы более внимательно рассмотреть точки данных. Очень круто .


Sparklines

Ограничения: круговая диаграмма, линия, полоса, комбинация

Sparklines - мой любимый инструмент для создания мини-графиков. Действительно отлично подходит для графиков в стиле панели инструментов (подумайте о панели инструментов Google Analytics при следующем входе в систему). Поскольку они такие крошечные, их можно включить в строку (как в примере выше). Еще одна хорошая идея, которую можно использовать во всех плагинах для построения графиков, - это возможность самообновления. Их демонстрация Mouse-Speed ​​демонстрирует вам возможности построения графиков в реальном времени в лучшем виде.


Query Chart 0.21

Ограничения: Area, Line, Bar и их комбинации

jQuery Chart 0.21 - не самый красивый плагин для построения графиков. там нужно сказать. Когда дело доходит до графиков, он довольно прост, но может быть гибким, если вы потратите на это немного времени и усилий.

Добавить значения в диаграмму относительно просто:

.chartAdd({

    "label"  : "Leads",
    "type"   : "Line",
    "color"  : "#008800",
    "values" : ["100","124","222","44","123","23","99"]
});

jQchart

Ограничения: полоса, линия

jQchart является странным, однако в них встроены переходы анимации и функция перетаскивания / перетаскивания в диаграмму. это немного неуклюже - и, казалось бы, бессмысленно. Он создает красивые диаграммы, если вы правильно настроили CSS , но есть и лучшие варианты.


TufteGraph

Ограничения: столбик и столбик с накоплением

Tuftegraph позиционирует себя как «красивый столбик». графики, которые вы бы показали маме ». Он близок, Flot красивее, но Tufte действительно очень легкий. Хотя с этим связаны ограничения - есть несколько вариантов на выбор, так что вы получаете то, что вам дают. Посмотрите на гистограмму быстрого выигрыша.

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


TufteGraph

Ограничения: столбик и столбик с накоплением

Tuftegraph позиционирует себя как «красивый столбик». графики, которые вы бы показали маме ». Он близок, Flot красивее, но Tufte действительно очень легкий. Хотя с этим связаны ограничения - есть несколько вариантов на выбор, так что вы получаете то, что вам дают. Посмотрите на гистограмму быстрого выигрыша.

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


TufteGraph

Ограничения: столбик и столбик с накоплением

Tuftegraph позиционирует себя как «красивый столбик». графики, которые вы бы показали маме ». Он близок, Flot красивее, но Tufte действительно очень легкий. Хотя с этим связаны ограничения - есть несколько вариантов на выбор, так что вы получаете то, что вам дают. Посмотрите на гистограмму быстрого выигрыша.

но есть и лучшие варианты.


TufteGraph

Ограничения: столбик и столбик с накоплением

Tuftegraph продает себя как «красивые столбчатые диаграммы, которые вы показываете своей матери». Он близок, Flot красивее, но Tufte действительно очень легкий. Хотя с этим связаны ограничения - есть несколько вариантов на выбор, так что вы получаете то, что вам дают. Посмотрите на гистограмму быстрого выигрыша.

но есть и лучшие варианты.


TufteGraph

Ограничения: столбик и столбик

Tuftegraph продает себя как «красивые столбчатые диаграммы, которые вы показываете своей матери». Он близок, Flot красивее, но Tufte действительно очень легкий. Хотя с этим связаны ограничения - есть несколько вариантов на выбор, так что вы получаете то, что вам дают. Посмотрите на гистограмму быстрого выигрыша.

97
ответ дан 24 November 2019 в 06:32
поделиться
Другие вопросы по тегам:

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