Web → Обфускація й пакування JavaScript коду

В кінці написання будь якого проекту, починаєш задумуватися про його оптимізацію а іноді й захист. Так трапилося й у мене, нижче — результат.

Для початку, як завжди, погуглив й знайшов немало онлайн пакувальників, які на ділі ні на що не годяться! В JavaScript не потрібно (хоча й дозволено) завершувати рядок крапкою з комою й я цим наразі постійно користуюся (пітонівська звичка).

$.svgallery.center = function(){
	var rows = Math.ceil(count_entrys / entry_in_width)
	var left = parseInt( (win_width - content_width) / 2 )
	var top = parseInt( ( win_height - rows * item_size ) / 2 )

	content.css({
		left: left,
		top: top
	})
}

Після пакування виглядало отак:

$.svgallery.center=function(){var rows=Math.ceil(count_entrys/entry_in_width)var left=parseInt((win_width-content_width)/2)var top=parseInt((win_height-rows*item_size)/2)content.css({left:left,top:top})}

Звісно воно не працюватиме, ібо при записі в один рядок, крапка з комою є обов’язковою.

Далі пошук привів до YUI Compressor, яким користується Yahoo!, як виявилося, це саме те, що я шукав. Його можна завантажити з сайту виробника або ж встановити з репозитаріїв ubuntu (правда тут трохи старіша версія).

Щоб полегшити собі життя написав невеликий скріпт на python:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os

if len(sys.argv) != 2:
    print "Usage: " + os.path.basename(sys.argv[0]) + " /path/to/script.js"
    sys.exit()

file = sys.argv[1]
if not os.path.exists(file) or not os.path.isfile(file):
    print "Cannot read: " + file
    sys.exit()

ext = file[file.rfind("."):]
name = file[:file.rfind(".")]

os.popen("java -jar /path/to/yuicompressor.jar " + file + " -o " + name + ".pack" + ext)

Зберігаємо в файл jscompress.py й запускаємо з одним аргументом — шляхом до файлу, який потрібно пакувати. Запакований й обфускований файл з’явиться поряд й міститиме в назві «.pack».

$.svgallery.center=function(){var a=Math.ceil(count_entrys/entry_in_width);var c=parseInt((win_width-content_width)/2);var b=parseInt((win_height-a*item_size)/2);content.css({left:c,top:b})};

P.S.
Хочу відмітити, що YUI Compressor дозволяє пакувати й css файли.

01.10.2011 10:22 Автор: Strange_V Хіти: 526

Коментарів 2

Напишіть відгук