2010-09-29 2 views
0

Привет, ребята .. Я пишу приложение Windows на C#, которое минимизирует файлы CSS и пакеты JS-файлов в качестве пакетного задания. Одно препятствие для приложения - что, если пользователь выбирает файл JavaScript, который уже был упакован? Это приведет к увеличению размера файла, полностью побеждая мою цель!Как определить, упакован ли JS уже

Открывает файл и ищет строку eval(function(p,a,c,k,e,d) достаточно? Я думаю, что нет, так как есть другие методы упаковки JS. Выручи меня!

+0

Спасибо всем, за ваши ответы. Каждый ответ мне помог. И, наконец, сегодня я публикую свою утилиту для упаковки бесплатно в своем блоге. Проверьте это и дайте мне знать - http://j.mp/mini5ive. Нет спама, обещайте ;-) – GPX

ответ

3

Можно предположить, что вы сравниваете размер пре-и пост-упакованного JS и возвращаете/используете меньший из двух.

UPDATE на основе вопроса в комментарии по GPX на Sep 30 at 1:02

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

var unpackedJs = File.ReadAllText(...) 
var unpackedSize = jsContent.Length; 
var packedJs = ... // Your Packaging routine 
File.WriteAllText(pathToFile, unpackedSize < packedJs.Length ? unpackedJs : packedJs) 
+0

Это довольно логичное решение, но я открываю файл, читаю содержимое, меняю его и сохраняю. Было бы полезно, если бы я мог определить размер файла перед записью в файл. Любые указатели? – GPX

1

Я хотел бы проверить размер файла и строки кода (например .: средняя длина линии). Эти две информации должны быть достаточными для того, чтобы знать, является ли код достаточно компактным.

Попробуйте demo.

0

При создании/сохранении миниатюрного файла используйте стандартное соглашение об имени файла «Filename.min.js». Затем, когда они выбирают файл, вы можете проверить его как надежный индикатор.

Я не думаю, что было бы разумно пойти за борт на фиктивной проверке. Если пользователь (который является разработчиком, при этом), достаточно глуп, чтобы дважды упаковать файл, они должны испытывать проблемы. Я знаю, что вы должны дать им пользу от сомнений, но в этом случае это не стоит накладных расходов.

+0

Согласен. Но то, что я имел в виду, это одноразовая душа, которая просто выполнит эту работу, не предоставив пользователям дополнительную задачу редактирования своего кода, даже если это так тривиально, как «.min» во всех ссылках на JS. – GPX

0

Если вы используете безопасную процедуру минимизации, ваш выход должен быть таким же, как и вход. Я бы не рекомендовал рутину, которую вы упомянули. MS Ajax Minifier - хороший инструмент и даже предоставляет DLL для использования в вашем проекте. Это сделало бы вашу проблему нецелесообразной.

+0

Я не понимаю, что вы подразумеваете под «безопасным». PACKER используется почти всеми в течение многих лет. Это не менее безопасно, чем перенос кода через веб-браузер. –

+0

Да. PACKER безопасен, потому что переупаковка уже упакованного JS все равно сделает его полезным, но только больше в размере файла! – GPX

0

Я бы предложил добавить префикс '.min' к расширению упакованного файла, что-то вроде «script.min.js». Затем просто проверьте имя файла.

Кроме этого, я бы предложил проверить, как долго проходят линии, и сколько пробелов используется. Миниатюрный/упакованный JS обычно почти не имеет пробелов (как правило, в строках) и очень длинных строк.

1

Я направляю вас к сообщению, которое предполагает, что упаковка плохая.

http://ejohn.org/blog/library-loading-speed/

Вместо использования минификация. Компилятор Google Closure может сделать это через веб-службу REST. Используйте только расширение .min.js для минифинированных (не упакованных).

Gzip выполнит лучшую работу и будет несжато в браузере. Лучше всего включить сжатие zip на сервере, который затем закроет мини-файл.

Конечно, возникает вопрос: «Как я могу узнать, уже ли мой Javascript уже оценен!'

+0

Спасибо за ссылку, Джеймс. Но лично я считаю, что накладные расходы на «распаковку» упакованного JavaScript в вашем браузере не сильно отличаются от игрового смены, потому что в наши дни у всех есть хорошо оборудованные машины, и это не будет иметь большого значения. Просто мой аргумент. Как вы думаете? – GPX

+0

Ну, распаковка выполняется в JavaScript - это в лучшем случае будет скомпилировано jit, но хуже то, что это должно происходить каждый раз, когда страница загружается - даже если скрипт исходит из кеша. Сжатие Gzip делает меньший файл, и один раз он распаковывается браузером, а затем помещается в кеш. Кроме того, это очень легко настроить, и вам никогда не придется ничего делать, даже когда вы меняете файл. Для меня это не проблема. –

Смежные вопросы