Реактивные веб-сайты
При использовании же еще и gzip-сжатия предварительная мини-
мизация позволяет увеличить итоговую степень сжатия в среднем на 3-5%.
В ситуациях, когда gzip-сжа-
тие применить невозможно, напри-
мер, когда CSS- и JS-код встроены в
веб-страницу, минимизация —
один из немногих оставшихся спо-
собов существенно уменьшить раз-
мер такой веб-страницы.
Стоит заметить, что после
проведения минимизации резуль-
тирующий код по-прежнему будет
полностью совместим со всеми
браузерами, т. к. он останется тем же корректным HTML-, CSS- или JS-ко-
дом, в то время как gzip-сжатие до сих пор поддерживается не всеми
пользовательскими браузерами. Кроме того, минимизированный код все-
гда распознается и обрабатывается браузером быстрее.
Обфускация
Так называется процесс, при котором JavaScript-код специальным
образом запутывается для того, чтобы затруднить процесс его разбора и
модификации. Обфускация может включать в себя те же операции, что и
минимизация, а также:
? кодирование символов в различные форматы;
? изменение имен переменных и функций;
? добавление избыточного кода.
———————— Page 23————————
22 РЕАКТИВНЫЕ ВЕБ-САЙТЫ
Ниже приведен фрагмент JS-кода до обфускации:
var Prototype = {
Version: ’1.6.1_rc3′,
Browser: (function(){
var ua = navigator.userAgent;
var isOpera = Object.prototype.toString.call(window.opera)
== ‘[object Opera]‘;
return {
IE: !!window.attachEvent && !isOpera,
Opera: isOpera,
WebKit: ua.indexOf(‘AppleWebKit/’) > -1,
Gecko: ua.indexOf(‘Gecko’) > -1 &&
ua.indexOf(‘KHTML’) === -1,
MobileSafari: /Apple.*Mobile.*Safari/.test(ua)
}
})(),
BrowserFeatures: {
XPath: !!document.evaluate,
SelectorsAPI: !!document.querySelector,
ElementExtensions: (function() {
var constructor = window.Element || window.HTMLElement;
return !!(constructor && constructor.prototype);
})(),
SpecificElementExtensions: (function() {
if (typeof window.HTMLDivElement !== ‘undefined’)
return true;
var div = document.createElement(‘div’);
var form = document.createElement(‘form’);
var isSupported = false;
if (div['__proto__'] && (div['__proto__'] !==
form['__proto__'])) {
isSupported = true;
}
div = form = null;
return isSupported;
})()
},
ScriptFragment: ‘
