Автоволшебно уменьшите CSS и JavaScript на загрузке

То, что мы сделали на моей работе, имеют библиотеку, обеспечивает функции, такие как проверка, если пользователь зарегистрирован. Например:

<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
    echo 'html for logged in user';
}
// rest of html

страницы For, которые только authenicated пользователи должны видеть, проверки контроллера, если они зарегистрированы и если не это перенаправляет их к странице входа в систему.

<?php
public function viewCustomer($customerId) {
    if (!isLoggedIn())
        redirectToLoginPage();
}
10
задан Jarett Millard 31 August 2009 в 21:19
поделиться

8 ответов

Я рекомендую создать make-файл для решения этой конкретной проблемы. Вот быстрый и грязный make-файл, который я использую для своего сайта:

PUBDIR=../../static/js/
OUTDIR=./build/
COMPRESSOR=../yui/build/yuicompressor-2.4.2.jar
ARGS=
VPATH=${OUTDIR}
INST_TARGETS=${OUTDIR}jgblue.js

jgblue.js: combined.js
    java -jar ${COMPRESSOR} ${ARGS} ${OUTDIR}$< -o ${OUTDIR}$@

combined.js: main.js listview.js tabs.js
    cat $^ > ${OUTDIR}$@

.PHONY: install

install:
    cp ${INST_TARGETS} ${PUBDIR}

Затем все, что вам нужно ввести, это:

make && make install

Сначала он берет все ваши файлы разработки и объединяет их в один файл, затем объединенный файл сжимается и копируется в ваш общий каталог. Я использую YUICompressor для сжатия, он работает неплохо.

7
ответ дан 3 December 2019 в 16:53
поделиться

Well, to minify CSS is just a couple of regexes.

// (PHP) but should be easily portable to any language
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)
            )
        )
    ;
}

And Dean Edwards's Javascript packer has been ported to PHP, Perl, .NET and WSH, so if you're using any of those technologies, you could actually have it running on your own server. ...Just remember to cache the results!

6
ответ дан 3 December 2019 в 16:53
поделиться

Since you're on shared hosting, I'd just suggest using the YUICompressor, and running your css/js files through it prior to uploading them. Be sure not to lose your original files - it could be a pain making future changes.

You could also place a script on your server that would periodically re-write your css/js files, passing them througha minify-process, and manually invoke this script after doing an upload.

5
ответ дан 3 December 2019 в 16:53
поделиться

I like Minify. It supports compressing and trimming html, javascript and css on the fly.

It is quite flexible, an can be integrated into existing apps.

Some of the more advanced features is combining multiple javascript files into one, same for css. It has multiple ways of defining which files to combine, which is usefull for testing purposes. This way you do not have to modify the settings every time.

2
ответ дан 3 December 2019 в 16:53
поделиться

Я предлагаю сжать (любыми средствами каким-либо автоматическим способом) на вашей машине разработки и протестировать ее там перед загрузкой на ваш действующий сервер. Фундаментальное изменение JavaScript на последнем этапе процесса развертывания представляет собой очевидный риск возникновения ошибок.

1
ответ дан 3 December 2019 в 16:53
поделиться

Действительно крутое решение, которое делает обслуживание js и css автоматическим, как во сне.

Проверьте: http://code.google.com/p/minify/

Features

  • Объединяет и минимизирует несколько файлов CSS или JavaScript в одну загрузку.
    • Использует расширенный порт библиотеки JSMin Дугласа Крокфорда и пользовательские классы для минимизации CSS и HTML.
    • Кэширует на стороне сервера (files / apc / memcache), чтобы избежать ненужной работы.
    • Отвечает с HTTP 304 (не изменено ) ответ, когда в браузере есть актуальная копия кэша
    • Большинство модулей при необходимости загружаются лениво (в 304 ответах используется минимальный код)
    • Автоматически перезаписывает относительные URI в объединенных файлах CSS, чтобы указывать на допустимые местоположения
    • При включенном кэшировании Minify может обрабатывать сотни запросов в секунду на сервере средней мощности.
    • Content-Encoding: gzip, на основе заголовков запросов. Кэширование позволяет ему обрабатывать сжатые файлы быстрее, чем опция Apache mod_deflate!
    • Тестовые примеры для большинства компонентов
    • Простая интеграция сторонних минификаторов
    • Отдельные служебные классы для HTTP-кодирования и управления кешем введите здесь код
1
ответ дан 3 December 2019 в 16:53
поделиться

Я только что написал этот мини-сценарий в Питоне. Как и Bills solution, он использует компрессор YUI, но будет работать в безделушке. Он предполагает, что исходные (unminifie) файлы будут в /some/path/src/, а уменьшенные версии должны идти в /some/path/. Также предполагается, что файл jar yuicompressor находится в текущей папке:

import os, glob
from subprocess import Popen,PIPE

def RunCommand( cmd, show_output  ):
    p = Popen(cmd, shell=True,stdout=PIPE,stderr=PIPE)
    for line in p.stdout:
        if show_output:
            print line


    outerr = "\n".join(p.stderr.readlines() )   

    if len(outerr) > 0:
        print "ERROR: " + outerr
        sys.exit()

    code = p.wait()         
    if ( code > 0 ):
        print ("ERROR CODE: %i" % code )
        sys.exit()



compresser = "yuicompressor-2.4.2.jar"
dirs = [ "../wwwroot/css/", "../wwwroot/JavaScript/"]

extensions = ["*.js", "*.css" ]

for dir in dirs:
    src = dir + "/src/"
    for ext in extensions:      
        for path in glob.glob( os.path.join( src, ext)):
            file = os.path.basename(path)
            src_file = os.path.normpath( src + "/" +  file )
            dest_file = os.path.normpath( dir + "/" + file )
            if not os.path.isfile(dest_file) or os.path.getmtime(src_file) > os.path.getmtime(dest_file):
                print "minifying %s..." % (dest_file) 
                command = "java -jar %s %s -o %s" % ( compresser, src_file, dest_file )
                RunCommand(command, True)
2
ответ дан 3 December 2019 в 16:53
поделиться

Существует еще более легкое решение для обоих (JS и CSS), так что вы можете «минимизировать на лету». У вас должна быть возможность легко перенести его на любой язык (в настоящее время это PHP). Это действительно фрагмент и неотъемлемая часть PHP Fat-Free Framework. Перейдите по этой ссылке и посмотрите мой код. Это всего лишь одна функция. Не ищите наворотов, таких как объединение файлов, кодирование base-X, сокращение переменных или даже gzip-кодирование (хотя это можно легко добавить).

Обезжиренное минирование

0
ответ дан 3 December 2019 в 16:53
поделиться
Другие вопросы по тегам:

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