Что лучший метод должен уменьшить размер моих файлов JavaScript и CSS?

Первоначально опубликовано в форуме 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 делает много «ленивых данных» типа вещей / операций / задач в приложении. :]

Java Visual VM: showing HOT SPOT [/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». :)

21
задан hughdbrown 5 August 2009 в 02:46
поделиться

16 ответов

В дополнение к использованию серверного сжатия, с помощью интеллектуального кодирования лучший способ поддержать затраты пропускной способности на низком уровне. Можно всегда использовать инструменты как , Упаковщик 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 как файлы вместо встроенного или во главе каждой страницы. Тем путем Ваш сервер только должен служить им однажды браузеру после того, как тот браузер пойдет от кэша.

Включая Javascript

<script type="text/javascript" src="/scripts/loginChecker.js"></script>

Включая CSS

<link rel="stylesheet" href="/css/myStyle.css" type="text/css" media="All" />
19
ответ дан 29 November 2019 в 20:25
поделиться

Я дал бы тест-драйв новым оптимизаторам во время выполнения в ASP.NET, опубликованном на http://www.codeplex.com/NCOptimizer

-1
ответ дан 29 November 2019 в 20:25
поделиться

CssTidy является лучшим оптимизатором CSS, о котором я знаю. Это (настраиваемым образом) разделяет комментарии, устраняет пробелы, переписывает для использования многих кратких правил , nickf упомянул и т.д. Сжатие результата помогает также, как другие упомянули.

степень сжатия может быть довольно поразительной, и она освобождает Вас для комментария CSS экстенсивно, не вызывая беспокойство о размере файла.

, К сожалению, этот уровень предварительной обработки взаимодействует с некоторыми популярными "взломами CSS" в непредсказуемом (или предсказуемый, но нежелательный) пути. Некоторая работа , который некоторые не делают, и некоторые требуют параметров конфигурации, которые снижают уровень сжатия для других вещей (особенно комментарии).

0
ответ дан 29 November 2019 в 20:25
поделиться

Компрессор YUI имеет мой голос по простой причине, что вместо того, чтобы просто выполнить преобразования регулярного выражения на коде, он на самом деле создает дерево синтаксического анализа кода, подобного интерпретатору JavaScript, и затем сжимает его тот путь. Это обычно очень осторожно относительно того, как это обрабатывает сжатие идентификаторов.

Дополнительно это имеет режим сжатия CSS, с которым я не играл так же.

0
ответ дан 29 November 2019 в 20:25
поделиться

Компрессор YUI делает довольно хорошее задание при сжатии и JavaScript и CSS.

0
ответ дан 29 November 2019 в 20:25
поделиться

Для 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 в один (каждого) для Вас (или больше, если Вы захотите). Существует несколько опций для вывода и дисплея всех файлов. Там существует большая рецензия, и источник в свободном доступе.

0
ответ дан 29 November 2019 в 20:25
поделиться

Помощь Компрессору YUI дает некоторый хороший совет относительно того, как можно настроить сценарии для достижения еще лучших сбережений.

1
ответ дан 29 November 2019 в 20:25
поделиться

Google размещает горстку предсжатых файлов библиотеки JavaScript , что можно включать в собственный сайт. Мало того, что Google обеспечивает пропускную способность для этого, но и на основе алгоритмов кэширования файлов большей части браузера, если пользователь уже загрузил файл с Google для другого сайта, они не должны будут делать этого снова для Вашего. Миленькая премия для некоторых 90k + библиотеки JS там.

1
ответ дан 29 November 2019 в 20:25
поделиться

Dojo Shrinksafe является компрессором JavaScript, который использует реальный интерпретатор JS, таким образом, он не взломает Ваш код. Другие могут работать хорошо, но Shrinksafe является хорошим для использования в сценарии сборки, так как Вам не придется повторно протестировать сжатый сценарий.

1
ответ дан 29 November 2019 в 20:25
поделиться

Посмотрите вопрос: Лучший компрессор JavaScript

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

2
ответ дан 29 November 2019 в 20:25
поделиться

Я удивлен, что никто не предложил gzipping Ваш код. Прямые ~50%, сохраняющие там!

3
ответ дан 29 November 2019 в 20:25
поделиться

Сжатие и уменьшающий (удаление пробела) является запуском.

Дополнительно:

  1. Объединение весь Ваш JavaScript и CSS включает в единственный файл. Тем путем браузер может загрузить источник в единственном запросе к серверу. Сделайте эту часть своего процесса сборки.

  2. Включают кэширование на уровне веб-сервера с помощью управление кэша 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" />

3
ответ дан 29 November 2019 в 20:25
поделиться

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

Включение zip на уровне веб-сервера может также помочь.

7
ответ дан 29 November 2019 в 20:25
поделиться

Вместо того, чтобы настраивать Ваши файлы непосредственно, я рекомендовал бы сжать их. Большинство клиентов поддерживает его.

я думаю, что Вы найдете, что это легче и так же эффективно.

[еще 110] детали от приключений Jeff с ним .

6
ответ дан 29 November 2019 в 20:25
поделиться

Shrinksafe может помочь: http://shrinksafe.dojotoolkit.org/ Мы используем его, и это делает довольно хорошее задание. Мы выполняем его от сборки муравья для при упаковке нашего веб-приложения.

1
ответ дан 29 November 2019 в 20:25
поделиться

Попробуйте инструменты веб-компрессора от Boryi , чтобы сжать стандартный файл HTML (без встроенного кода Javascript и кода CSS, но с ним можно связать или импортировать), код Javascript (правильно заканчивался;) и кодом css.

-1
ответ дан 29 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

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