Первоначально опубликовано в форуме PrimeFaces @ http://forum.primefaces.org/viewtopic.php?f=3&t=29546
Недавно я был одержим оценивая производительность моего приложения, настраивая запросы JPA, заменяя динамические SQL-запросы именованными запросами, и только сегодня утром я узнал, что метод getter больше похож на HOT SPOT в Java Visual VM, чем остальная часть моего кода (или большинства мой код).
Метод Getter:
PageNavigationController.getGmapsAutoComplete()
Ссылка на ui: include in in index.xhtml
Ниже вы увидите, что PageNavigationController.getGmapsAutoComplete () является HOT SPOT (проблема с производительностью) в Java Visual VM. Если вы посмотрите дальше, на экране захвата, вы увидите, что getLazyModel (), PrimeFaces ленивый метод datatable getter, также является горячей точкой, только когда enduser делает много «ленивых данных» типа вещей / операций / задач в приложении. :]
[/g1]
См. (исходный) код ниже.
public Boolean getGmapsAutoComplete() {
switch (page) {
case "/orders/pf_Add.xhtml":
case "/orders/pf_Edit.xhtml":
case "/orders/pf_EditDriverVehicles.xhtml":
gmapsAutoComplete = true;
break;
default:
gmapsAutoComplete = false;
break;
}
return gmapsAutoComplete;
}
Называется в index.xhtml:
Решение: поскольку это метод «getter», переместите код и присвойте значение gmapsAutoComplete до вызова метода; см. код ниже.
/*
* 2013-04-06 moved switch {...} to updateGmapsAutoComplete()
* because performance = 115ms (hot spot) while
* navigating through web app
*/
public Boolean getGmapsAutoComplete() {
return gmapsAutoComplete;
}
/*
* ALWAYS call this method after "page = ..."
*/
private void updateGmapsAutoComplete() {
switch (page) {
case "/orders/pf_Add.xhtml":
case "/orders/pf_Edit.xhtml":
case "/orders/pf_EditDriverVehicles.xhtml":
gmapsAutoComplete = true;
break;
default:
gmapsAutoComplete = false;
break;
}
}
Результаты теста: PageNavigationController.getGmapsAutoComplete () больше не является HOT SPOT в Java Visual VM (больше не отображается)
тема, так как многие из опытных пользователей посоветовали младшим разработчикам JSF НЕ добавлять код в методы «getter». :)
В дополнение к использованию серверного сжатия, с помощью интеллектуального кодирования лучший способ поддержать затраты пропускной способности на низком уровне. Можно всегда использовать инструменты как , Упаковщик JavaScript Dean Edward , но для CSS, не торопится для изучения Стенография CSS . Например, используйте:
background: #fff url(image.gif) no-repeat top left;
... вместо:
background-color: #fff;
background-image: url(image.gif);
background-repeat: no-repeat;
background-position: top left;
кроме того, используйте каскадную природу CSS. Например, если Вы знаете, что Ваш сайт будет использовать одно семейство шрифтов, определить это для всех элементов, которые находятся в теге основного текста как это:
body{font-family:arial;}
Еще одна вещь, которая может помочь, включает Ваш CSS и JavaScript как файлы вместо встроенного или во главе каждой страницы. Тем путем Ваш сервер только должен служить им однажды браузеру после того, как тот браузер пойдет от кэша.
<script type="text/javascript" src="/scripts/loginChecker.js"></script>
<link rel="stylesheet" href="/css/myStyle.css" type="text/css" media="All" />
Я дал бы тест-драйв новым оптимизаторам во время выполнения в ASP.NET, опубликованном на http://www.codeplex.com/NCOptimizer
CssTidy является лучшим оптимизатором CSS, о котором я знаю. Это (настраиваемым образом) разделяет комментарии, устраняет пробелы, переписывает для использования многих кратких правил , nickf упомянул и т.д. Сжатие результата помогает также, как другие упомянули.
степень сжатия может быть довольно поразительной, и она освобождает Вас для комментария CSS экстенсивно, не вызывая беспокойство о размере файла.
, К сожалению, этот уровень предварительной обработки взаимодействует с некоторыми популярными "взломами CSS" в непредсказуемом (или предсказуемый, но нежелательный) пути. Некоторая работа , который некоторые не делают, и некоторые требуют параметров конфигурации, которые снижают уровень сжатия для других вещей (особенно комментарии).
Компрессор YUI имеет мой голос по простой причине, что вместо того, чтобы просто выполнить преобразования регулярного выражения на коде, он на самом деле создает дерево синтаксического анализа кода, подобного интерпретатору JavaScript, и затем сжимает его тот путь. Это обычно очень осторожно относительно того, как это обрабатывает сжатие идентификаторов.
Дополнительно это имеет режим сжатия CSS, с которым я не играл так же.
Компрессор YUI делает довольно хорошее задание при сжатии и JavaScript и CSS.
Для JavaScript я использую Упаковщик JavaScript Dean Edwards . Это было портировано к.NET, жемчугу, php4, php5, WSH, и существует даже aptana плагин.
упаковка JavaScript происходит в несколько ароматов - некоторые просто разделяют комментарии и пробел, другие изменят Ваши имена переменной, чтобы быть краткими, и другие, ну, в общем, я даже не знаю то, что они делают, но уверенный вывод является маленьким. Высокопроизводительное сжатие работает при помощи оценки () функция, которая помещает некоторую дополнительную нагрузку на клиент, поэтому если Ваши сценарии являются особенно сложными, или Вы разрабатываете для более медленных аппаратных средств, имеете это в виду. упаковщик JavaScript дает Вам опцию, для которого уровня сжатия Вы хотите использовать.
Для CSS, лучшее, которое можно сделать, разделить пробел и комментарии. К счастью это означает, что можно достигнуть этого с короткой функцией:
function compressCSS($css) {
return
preg_replace(
array('@\s\s+@','@(\w+:)\s*([\w\s,#]+;?)@'),
array(' ','$1$2'),
str_replace(
array("\r","\n","\t",' {','} ',';}'),
array('','','','{','}','}'),
preg_replace('@/\*[^*]*\*+([^/][^*]*\*+)*/@', '', $css)
)
)
;
}
, В то время как та функция и упаковщик JavaScript уменьшат размер файла отдельных файлов, для получения лучшей производительности от сайта, Вы также захотите сократить количество Запросов HTTP, которые Вы делаете. Каждый файл JavaScript и CSS является отдельным запросом, таким образом комбинируя их в один файл, каждый будет оптимальный результат. Вместо того, чтобы пытаться поддержать единственный bohemoth JS файл, можно использовать программу/технику, которую я записал на своем блоге (бесстыдный сам разъем) в http://spadgos.com/?p=32
, программа в основном читает "сценарий сборки" - файл типа, который одновременно объединит и сожмет несколько JavaScript и файлы CSS в один (каждого) для Вас (или больше, если Вы захотите). Существует несколько опций для вывода и дисплея всех файлов. Там существует большая рецензия, и источник в свободном доступе.
Помощь Компрессору YUI дает некоторый хороший совет относительно того, как можно настроить сценарии для достижения еще лучших сбережений.
Google размещает горстку предсжатых файлов библиотеки JavaScript , что можно включать в собственный сайт. Мало того, что Google обеспечивает пропускную способность для этого, но и на основе алгоритмов кэширования файлов большей части браузера, если пользователь уже загрузил файл с Google для другого сайта, они не должны будут делать этого снова для Вашего. Миленькая премия для некоторых 90k + библиотеки JS там.
Dojo Shrinksafe является компрессором JavaScript, который использует реальный интерпретатор JS, таким образом, он не взломает Ваш код. Другие могут работать хорошо, но Shrinksafe является хорошим для использования в сценарии сборки, так как Вам не придется повторно протестировать сжатый сценарий.
Посмотрите вопрос: Лучший компрессор JavaScript
В зависимости от того, идете ли Вы в gzip, Ваши файлы JavaScript могут изменить Ваш выбор компрессора. (В настоящее время Упаковщик не является лучшим выбором, если Вы также идете в gzip, но видите вышеупомянутый вопрос для текущего лучшего ответа)
Я удивлен, что никто не предложил gzipping Ваш код. Прямые ~50%, сохраняющие там!
Сжатие и уменьшающий (удаление пробела) является запуском.
Дополнительно:
Объединение весь Ваш JavaScript и CSS включает в единственный файл. Тем путем браузер может загрузить источник в единственном запросе к серверу. Сделайте эту часть своего процесса сборки.
Включают кэширование на уровне веб-сервера с помощью управление кэша http заголовок. Установите истечение на большое значение (как год), таким образом, браузер только загрузит источник однажды. Для обеспечения будущих редактирований включайте номер версии в строку запроса, как это:
<script src="my_js_file.js?1.2.0.1" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="my_css_file.css?3.1.0.926" />
Уменьшают , кажется, один из самых легких способов уменьшить JavaScript.
Включение zip на уровне веб-сервера может также помочь.
Вместо того, чтобы настраивать Ваши файлы непосредственно, я рекомендовал бы сжать их. Большинство клиентов поддерживает его.
я думаю, что Вы найдете, что это легче и так же эффективно.
[еще 110] детали от приключений Jeff с ним .
Shrinksafe может помочь: http://shrinksafe.dojotoolkit.org/ Мы используем его, и это делает довольно хорошее задание. Мы выполняем его от сборки муравья для при упаковке нашего веб-приложения.
Попробуйте инструменты веб-компрессора от Boryi , чтобы сжать стандартный файл HTML (без встроенного кода Javascript и кода CSS, но с ним можно связать или импортировать), код Javascript (правильно заканчивался;) и кодом css.