Javascript минимизация автоматизации - PullRequest
3 голосов
/ 08 декабря 2010

У меня есть сайт, который использует много jquery / javascript. Теперь на странице указателя у меня есть около 10 javascript-файлов, включенных в заголовок:

<head>
<script src="/js/jquery.js"></script>
<script src="/js/jquery_plugin_1.js"></script>
<script src="/js/jquery_plugin_2.js"></script>
<script src="/js/jquery_plugin_3.js"></script>
<script src="/js/my_scripts_1.js"></script>
<script src="/js/my_scripts_2.js"></script>
<script src="/js/my_scripts_3.js"></script>
<script src="/js/my_scripts_4.js"></script>
<!-- ...and so on -->
</head>

Поскольку количество посетителей увеличивается, я начинаю задумываться об эффективности всего этого. Я прочитал, что это хорошая идея - минимизировать все файлы JavaScript и собрать их вместе в один, поэтому браузер должен сделать только один HTTP-запрос. Я так и сделал. Теперь у меня есть everything.js файл, содержащий все javascript, включая jquery, плагины и мои собственные скрипты.

<head>
<!--
<script src="/js/jquery.js"></script>
<script src="/js/jquery_plugin_1.js"></script>
<script src="/js/jquery_plugin_2.js"></script>
<script src="/js/jquery_plugin_3.js"></script>
<script src="/js/my_scripts_1.js"></script>
<script src="/js/my_scripts_2.js"></script>
<script src="/js/my_scripts_3.js"></script>
<script src="/js/my_scripts_4.js"></script>
...
-->
<script src="/js/everything.js"></script>
</head>

Веселье начинается, когда мне нужно внести изменения в один из файлов. Каждый раз, чтобы проверить, работают ли мои изменения должным образом, мне нужно сжать файл и обновить everything.js или раскомментировать весь старый код. При таком рабочем процессе слишком легко что-то забыть и ошибиться.

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

Я использую PHP5 и SVN

РЕШЕНИЕ

Спасибо за вашу помощь, все, я нашел свое решение: Я вставлю post-commit хук в мое репозиторий SVN, который возьмет все мои .js файлы, соединит их и минимизирует их с помощью YUI-компрессора. Затем в моем скрипте я включу Javascript включает в себя, так что в среде разработки сайт будет включать в себя отдельные файлы Javascript, но в производстве будет включен комбинированный и минимизированный файл.

Ответы [ 4 ]

5 голосов
/ 08 декабря 2010

У нас есть специальный скрипт развертывания, который позаботится об этом.Короче говоря, он минимизирует все файлы CSS и JavaScript с помощью YUI Compressor и упаковывает их в два файла, один общий и другой со специальной логикой для данной страницы.После этого мы создаем символическую ссылку (или новую папку, в зависимости от проекта) на папку с упакованными файлами, и новые изменения распространяются мгновенно.Этот подход будет использоваться во всех средах, кроме разработки.

Перед минификацией вот как выглядит структура CSS (она более или менее одинакова для JavaScript, просто чтобы дать вам представление):

css/Layout/Core/reset.css
css/Layout/Core/index.css
css/Layout/Tools/notice.css
css/Layout/Tools/form.css
css/Layout/Tools/overlay.css
css/Skin/Default/Core/index.css
css/Skin/Default/Tools/notice.css
css/Skin/Default/Tools/form.css
css/Skin/Default/Tools/overlay.css
css/Layout/Tools/gallery.css
css/Layout/Tools/comments.css
css/Layout/Tools/pagination.css
css/Layout/Index/index.css
css/Skin/Default/Tools/gallery.css
css/Skin/Default/Tools/comments.css
css/Skin/Default/Tools/pagination.css
css/Skin/Default/Tools/achievements.css
css/Skin/Default/Tools/labels_main.css
css/Skin/Default/Index/index.css

После:

minified/1290589645/css/common.css
minified/1290589645/css/0135f148a7f6188573d2957418119a9a.css

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

1 голос
/ 08 декабря 2010

Я думаю, что вы должны проверить, нормально ли работают ваши скрипты, когда они находятся в одном файле, а затем сжать этот файл.У нас не так много файлов, поэтому мы используем js minifier для каждого файла, используя yui compressor .Если вы используете автоматическое развертывание, вы должны выполнить минификацию и затем развертывание, в противном случае пакетный скрипт должен быть в порядке.

0 голосов
/ 08 декабря 2010

Честно говоря, я раньше этого не делал, но натолкнулся на эти два решения и подумал, что они могут быть вам полезны:

jMerge

Автоматическое объединение и управление версиями файлов CSS / JS с помощью PHP

Удачи!

0 голосов
/ 08 декабря 2010

создайте такой файл php и сохраните его как merger_js.php в своем каталоге js

<?php
ob_start ("ob_gzhandler");
$f=$_GET['f'];
if(@file_exists($f)){
    $inhoud = file_get_contents($f);
    header("Content-type: application/javascript; charset: UTF-8");
    header("Cache-Control: must-revalidate");
    $offset = 60 * 60 ;
    $ExpStr = "Expires: " .
    gmdate("D, d M Y H:i:s",
    time() + $offset) . " GMT";
    header($ExpStr);
}else{
// file not found, we return empty
 $inhoud= "";
}
print $inhoud;

Назовите свою Java, как это

<script type='text/javascript' src='js/merger_js.php?f=blackcan.js'></script>

Теперь ваш javascript-файл отправляется в архив в браузере. Убедитесь, что ваш сервер может обрабатывать gzip (обычно он установлен по умолчанию)

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...