Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Пригодится - паковщик JS на PHP
 
 автор: sim5   (07.11.2009 в 18:21)   письмо автору
 
 

Смотрите по ссылке

  Ответить  
 
 автор: Киналь   (07.11.2009 в 19:52)   письмо автору
 
   для: sim5   (07.11.2009 в 18:21)
 

Э-э... А что он делает-то?

  Ответить  
 
 автор: sim5   (07.11.2009 в 20:03)   письмо автору
 
   для: Киналь   (07.11.2009 в 19:52)
 

Сжимает исходный JS-код. Там с классом есть примеры, увидите. Можете на сайте (по ссылке) вставить JS код, и посмотреть результат.

  Ответить  
 
 автор: AlexSol   (07.11.2009 в 20:38)   письмо автору
 
   для: sim5   (07.11.2009 в 20:03)
 

есть инструмент гугла по сжатию js-кода http://closure-compiler.appspot.com/home (описание)

только оно русские символы своеобразно переваривает, увеличивая размер файла

  Ответить  
 
 автор: sim5   (07.11.2009 в 21:01)   письмо автору
 
   для: AlexSol   (07.11.2009 в 20:38)
 

Не надоть мне Гугла, он пригрывает в размере. Вот пример:

// script.aculo.us builder.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

var Builder = {
NODEMAP: {
AREA: 'map',
CAPTION: 'table',
COL: 'table',
COLGROUP: 'table',
LEGEND: 'fieldset',
OPTGROUP: 'select',
OPTION: 'select',
PARAM: 'object',
TBODY: 'table',
TD: 'table',
TFOOT: 'table',
TH: 'table',
THEAD: 'table',
TR: 'table'
},
// note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
// due to a Firefox bug
node: function(elementName) {
elementName = elementName.toUpperCase();

// try innerHTML approach
var parentTag = this.NODEMAP[elementName] || 'div';
var parentElement = document.createElement(parentTag);
try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
} catch(e) {}
var element = parentElement.firstChild || null;

// see if browser added wrapping tags
if(element && (element.tagName.toUpperCase() != elementName))
element = element.getElementsByTagName(elementName)[0];

// fallback to createElement approach
if(!element) element = document.createElement(elementName);

// abort if nothing could be created
if(!element) return;

// attributes (or text)
if(arguments[1])
if(this._isStringOrNumber(arguments[1]) ||
(arguments[1] instanceof Array) ||
arguments[1].tagName) {
this._children(element, arguments[1]);
} else {
var attrs = this._attributes(arguments[1]);
if(attrs.length) {
try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
parentElement.innerHTML = "<" +elementName + " " +
attrs + "></" + elementName + ">";
} catch(e) {}
element = parentElement.firstChild || null;
// workaround firefox 1.0.X bug
if(!element) {
element = document.createElement(elementName);
for(attr in arguments[1])
element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
}
if(element.tagName.toUpperCase() != elementName)
element = parentElement.getElementsByTagName(elementName)[0];
}
}

// text, or array of children
if(arguments[2])
this._children(element, arguments[2]);

return element;
},
_text: function(text) {
return document.createTextNode(text);
},

ATTR_MAP: {
'className': 'class',
'htmlFor': 'for'
},

_attributes: function(attributes) {
var attrs = [];
for(attribute in attributes)
attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
'="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
return attrs.join(" ");
},
_children: function(element, children) {
if(children.tagName) {
element.appendChild(children);
return;
}
if(typeof children=='object') { // array can hold nodes and text
children.flatten().each( function(e) {
if(typeof e=='object')
element.appendChild(e)
else
if(Builder._isStringOrNumber(e))
element.appendChild(Builder._text(e));
});
} else
if(Builder._isStringOrNumber(children))
element.appendChild(Builder._text(children));
},
_isStringOrNumber: function(param) {
return(typeof param=='string' || typeof param=='number');
},
build: function(html) {
var element = this.node('div');
$(element).update(html.strip());
return element.down();
},
dump: function(scope) {
if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope

var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
"BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
"FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
"KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
"PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
"TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);

tags.each( function(tag){
scope[tag] = function() {
return Builder.node.apply(Builder, [tag].concat($A(arguments)));
}
});
}
}

Результат:

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(c/a))+String.fromCharCode(c%a+161)};while(c--){if(k[c]){p=p.replace(new RegExp(e(c),'g'),k[c])}}return p}('§ &#170;={&#208;:{&#219;:\'&#227;\',&#202;:\'¦\',&#196;:\'¦\',&#197;:\'¦\',&#225;:\'&#232;\',&#211;:\'&#199;\',&#210;:\'&#199;\',&#213;:\'µ\',&#200;:\'¦\',&#201;:\'¦\',&#206;:\'¦\',&#203;:\'¦\',&#204;:\'¦\',&#205;:\'¦\'},&#194;:&#165;(&#163;){&#163;=&#163;.·();§ &#195;=©.&#208;[&#163;]||\'&#220;\';§ ®=&#178;.&#193;(&#195;);&#207;{®.&#209;="<"+&#163;+"></"+&#163;+">"}&#212;(e){}§ &#161;=®.&#214;||&#215;;&#162;(&#161;&&(&#161;.±.·()!=&#163;))&#161;=&#161;.&#216;(&#163;)[0];&#162;(!&#161;)&#161;=&#178;.&#193;(&#163;);&#162;(!&#161;)&#168;;&#162;(¤[1])&#162;(©.&#179;(¤[1])||(¤[1]&#250; &#249;)||¤[1].±){©.»(&#161;,¤[1])}&#190;{§ ­=©.&#221;(¤[1]);&#162;(­.&#239;){&#207;{®.&#209;="<"+&#163;+" "+­+"></"+&#163;+">"}&#212;(e){}&#161;=®.&#214;||&#215;;&#162;(!&#161;){&#161;=&#178;.&#193;(&#163;);&#191;(&#180; &#185; ¤[1])&#161;[&#180;==\'&#224;\'?\'&#223;\':&#180;]=¤[1][&#180;]}&#162;(&#161;.±.·()!=&#163;)&#161;=®.&#216;(&#163;)[0]}}&#162;(¤[2])©.»(&#161;,¤[2]);&#168; &#161;},&#188;:&#165;(&#218;){&#168; &#178;.&#241;(&#218;)},&#186;:{\'&#223;\':\'&#224;\',\'&#242;\':\'&#191;\'},&#221;:&#165;(&#189;){§ ­=[];&#191;(&#175; &#185; &#189;)­.&#240;((&#175; &#185; ©.&#186;?©.&#186;[&#175;]:&#175;)+\'="\'+&#189;[&#175;].&#236;().&#237;().&#238;(/"/,\'&&#243;;\')+\'"\');&#168; ­.&#244;(" ")},»:&#165;(&#161;,«){&#162;(«.±){&#161;.¶(«);&#168;}&#162;(¬ «==\'µ\'){«.&#235;().&#222;(&#165;(e){&#162;(¬ e==\'µ\')&#161;.¶(e)&#190; &#162;(&#170;.&#179;(e))&#161;.¶(&#170;.&#188;(e))})}&#190; &#162;(&#170;.&#179;(«))&#161;.¶(&#170;.&#188;(«))},&#179;:&#165;(&#184;){&#168;(¬ &#184;==\'&#248;\'||¬ &#184;==\'&#247;\')},&#245;:&#165;(&#217;){§ &#161;=©.&#194;(\'&#220;\');$(&#161;).&#246;(&#217;.&#251;());&#168; &#161;.&#226;()},&#234;:&#165;(°){&#162;(¬ °!=\'µ\'&&¬ °!=\'&#165;\')°=&#233;;§ &#198;=("A &#231; &#230; &#228; &#229; &#219; B &#162;&#225; &#162;&#203; &#162;&#202; &#162;&#204; &#162;&#205; &#162;&#207; "+"&#162;&#206; &#162;&#201; &#202; &#162;&#200; &#162;&#195; &#252; &#196; &#197; &#162;&#194; &#162;&#193; &#162;&#196; &#162;&#197; &#162;&#199; &#162;&#198; &#162;&#208; &#162;&#209; &#162;&#220; "+"&#162;&#219; &#162;&#221; &#162;&#222; &#162;&#224; &#162;&#223; &#162;&#218; &#162;&#217; &#162;&#212; &#162;&#211; &#162;&#210; &#162;&#213; &#162;&#214; &#162;&#216; I &#162;&#215; &#162;&#192; &#162;&#191; &#162;© &#162;&#168; "+"&#162;§ &#162;&#170; &#225; &#162;« &#162;­ &#162;¬ &#162;¦ &#162;&#165; &#255; &#254; &#253; &#162;&#161; &#211; &#210; P "+"&#213; &#162;&#162; Q S &#162;¤ &#162;&#163; &#162;® &#162;&#175; &#162;&#186; &#162;&#185; &#162;» &#162;&#188; &#162;&#190; &#162;&#189; &#162;&#184; &#200; &#201; "+"&#162;· &#206; &#203; &#204; &#162;&#178; &#205; &#162;± U &#162;° &#162;&#179;").&#162;&#180;(/\\s+/);&#198;.&#222;(&#165;(&#192;){°[&#192;]=&#165;(){&#168; &#170;.&#194;.&#162;¶(&#170;,[&#192;].&#162;µ(A(¤)))}})}}',95,160,'element|if|elementName|arguments|function|table|var|return|this|Builder|children|typeof|attrs|parentElement|attribute|scope|tagName|document|_0|attr|object|appendChild|toUpperCase|param|in|ATTR_MAP|_1|_2|attributes|else|for|tag|createElement|node|parentTag|COL|COLGROUP|tags|select|TBODY|TD|CAPTION|TH|THEAD|TR|TFOOT|try|NODEMAP|innerHTML|OPTION|OPTGROUP|catch|PARAM|firstChild|null|getElementsByTagName|html|text|AREA|div|_3|each|className|class|LEGEND|down|map|ADDRESS|APPLET|ACRONYM|ABBR|fieldset|window|dump|flatten|toString|escapeHTML|gsub|length|push|createTextNode|htmlFor|quot|join|build|update|number|string|Array|instanceof|strip|CODE|OBJECT|NOSCRIPT|NOFRAMES|OL|PRE|SCRIPT|SAMP|META|MENU|KBD|ISINDEX|INS|LABEL|LI|MAP|LINK|SELECT|SMALL|UL|TT|TITLE|VAR|split|concat|apply|TEXTAREA|TABLE|STRIKE|SPAN|STRONG|STYLE|SUP|SUB|INPUT|IMG|DEL|DD|CITE|DFN|DIR|DL|DIV|CENTER|BUTTON|BDO|BASEFONT|BIG|BLOCKQUOTE|BR|BODY|DT|EM|H6|H5|H4|HEAD|HR|IFRAME|HTML|H3|H2|FONT|FIELDSET|FORM|FRAME|H1|FRAMESET|BASE'.split('|')))

Правда тут применены спецсимволы при упаковке, и форум их сейчас почикает, но....
компрессия: 2371/4904 = 0.483
выполнение: 0.0163 s.

  Ответить  
 
 автор: AlexSol   (08.11.2009 в 08:37)   письмо автору
 
   для: sim5   (07.11.2009 в 21:01)
 

гугл сжал до 1.93KB

  Ответить  
 
 автор: sim5   (08.11.2009 в 08:43)   письмо автору
 
   для: AlexSol   (08.11.2009 в 08:37)
 

Вчера пробовал 39 КБ файл для обеих - Гугл проиграл.

  Ответить  
 
 автор: Киналь   (07.11.2009 в 20:51)   письмо автору
 
   для: sim5   (07.11.2009 в 20:03)
 

Было:

alert('Xo!')


Стало:

eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0(\'1!\')',2,2,'alert|Xo'.split('|'),0,{}))


Всё равно не понял, что это за зверь)

  Ответить  
 
 автор: sim5   (07.11.2009 в 21:02)   письмо автору
 
   для: Киналь   (07.11.2009 в 20:51)
 

Файлы размером в три байта паковать не выгодно ничем! Это касается и JS.
Вы же подключали сжатые библиотеки сторонние, как они по сравнению неупакованными по размеру? Плюс еще код не читаем сразу.

  Ответить  
 
 автор: Eugene77   (09.11.2009 в 18:16)   письмо автору
 
   для: sim5   (07.11.2009 в 21:02)
 

С какого примерно размера файла имеет смысл паковать?

  Ответить  
 
 автор: sim5   (09.11.2009 в 18:58)   письмо автору
 
   для: Eugene77   (09.11.2009 в 18:16)
 

С нескольких КБ (от 4) уже выигрыш.

  Ответить  
 
 автор: Loki   (09.11.2009 в 14:42)   письмо автору
 
   для: sim5   (07.11.2009 в 18:21)
 

Компактненько, но скрипт работает через eval. Не думаю что это положительно скажется на производительности.
Но вообще радует что появилась такая штука на php, а то все что попадалось было на яве...

  Ответить  
 
 автор: sim5   (09.11.2009 в 18:51)   письмо автору
 
   для: Loki   (09.11.2009 в 14:42)
 

Да ничего, нормально робит, уже встроил, не жалуюсь )

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования