2008-01-15

Оптимизация Javascript

Встала такая задача: уменьшить размер JavaScript кода для ускорения загрузки страницы. Ну первое что приходит в голову, это удалять whitespace, для этого можно использовать JSMin, но об этом я напишу в другом посте. Основной способ уменьшения размера кода, это как можно меньше его писать и использовать как можно более короткие имена переменных. Еще одним способом уменьшения размера кода, это использовать более компактную форму записи. Обычно я при использовании объектно-ориентированного кода использую конструкции вида:

function ClassName(){ //some code } ClassName.prototype.method1 = function(){ //some code } ClassName.prototype.method2 = function(){ //some code }

Честно сказать давно искал более компактный метод и наконец нашел. Решение крылось в библиотеке prototype. Вообще то когда я первый раз познакомился с этой библиотекой мне она не понравилась. Не понравилась она мне тем что наследование классов делается не используя особенности JavaScript а тупым копированием свойств:

Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destination; }

Это не наследование, к тому-же когда я протестировал быстродействие подобного решения оно оказалось жутко не на высоте, что и следовало ожидать. Однако проблема оптимизации заставила меня взглянуть по новому на эту функцию - если ее применить не к объекту а к прототипу конструктора то получится как раз именно то что нужно, к тому же жутко компактно:

function ClassName(){ //some code } Object.extend(ClassName.prototype, method1:function(){ //some code }, method2:function(){ //some code } });

Получается гораздо красивее и компактнее.

 

комментарии:

 

Для того чтобы каждый раз не представляться можно войти как зарегистрированный пользователь.

Имя*

разрешены только теги br, font, span, p, strong, u, p, blockquote, a, div, img - остальные будут безжалостно удаляться