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 } });

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

 

Оставить комментарий

 
  2008-01-14

Перенос на новый хостинг

Возможно будут сбои в работе сайта, так как в настоящее время переношу его на новый хостинг.
 

Оставить комментарий

 
  2008-01-04

Одна сессия на два сайта

Сегодня встала задача сделать одну сессию на два домена один из которых является поддоменом другого. Решение оказалось простым, нужно вызвать session_set_cookie_params на обоих сайтах пред вызовом session_start. Вот мой тестовый пример:

<? session_set_cookie_params ( time()+60*60,'/', '.myhost.com'); session_start(); ?> <html> <head></head> <body> <?php if (!isset($_SESSION['ses_test'])){ $_SESSION['ses_test'] = 1; } print 'Value is: '.($_SESSION['ses_test']++); ?> </body> </html>
 

Оставить комментарий

 
  2007-12-26

Разбиение на страницы в блогах

Сделал наконец сабджект, теперь красота!
 

Оставить комментарий

 
  2007-12-26

Eclipse forever

Обновил Eclipse - теперь он у меня поддерживает редактирование SQL файлов. Раньше для редактирования SQL файла Eclipse открывал блокнот, теперь открывает в собственном окошке с проверкой синтаксиса - красота.

 

Оставить комментарий

 
  2007-12-26

Странное поведение eval

eval('$c = "test;'); print $c;

Несмотря на явную синтаксическую ошибку код внутри eval выполняет присваивание, хотя и выводит на экран ошибку.

Чтобы вылавливать подобные ошибки пришлось сделать буффер и смотреть не вываливает ли eval что нибудь на экран.

Так выглядит готовая функция для приобразования PHP строки в переменную:

function str2php($value){ $c = null; ob_start(); eval('$c ='.$value.";"); $error = ob_get_contents(); ob_end_clean(); if (!empty($error)) return null; return $c; }
 

Оставить комментарий

 
  2007-12-25

Скобки <>

Никак не получалось запомнить HTML коды для угловых скобочек больше-меньше > < &gt; &lt;. Оказывается запомнить их очень просто - &gt; - Great Than, &lt; - Less Than. Наверно для англоговорящих это очевидно, для меня же было не совсем.

 

Оставить комментарий

 
  2007-12-15

(Казнить [нельзя) помиловать]

Только что пришлось покапаться в исходниках vBulletin - ребята курят очень неслабую траву, весьма забористую...

После очередной модификации сайта при регистрации пользователя стало перебрасывать на совершенно экзистенциальный url вида :/forum/admincp.php - т.е. кудато пропал http из пути.

После часа ковыряний нашел следующее:

define('REQ_PROTOCOL', (isset($_SERVER['HTTPS']) AND (($_SERVER['HTTPS'] == 'on' OR $_SERVER['HTTPS'] == '1')) ? 'https' : 'http'));

Индийские программисты очень умные, очень наблюдательные, очень усидчевые... задницы, но всеже пару скобок проглядели... В результате REQ_PROTOCOL принимает значение false вместо положенного http.

 

Коментариев: 2

 
  2007-12-14

Фракталы

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

Студент нынче какойто хилый пошел, пришлось самому разбираться, вот она наша прелессссть.

Исходники можно скачать здесь

 

Коментариев: 1

 
  2007-12-06

Созерцательное программирование

Я давно подозревал, что многие вещи уже давно придуманы, даже те что могут показаться полным бредом.

Вот например новый термин - "Созерцательное программирование". Русский поиск в гугле не дает много результатов на это словосочетание, - оно является моей версией перевода термина Contemplative Programming.

Просто в время работы иногда бывает такое состояние, когда видишь в голове вещь и реализуешь ее в программе, постепенно приближая к идеалу. Именно в такие моменты становится совершенно не важно где ты как ты, совершенно ничего не отвлекает, есть только вещь которую ты созерцаешь, творишь, достаешь из небытия.

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

 

Оставить комментарий