2010-08-26

3 совета для Zend Studio

Сегодня хотел бы поделиться парочкой полезных и не очевидных советов, которыми я пользуюсь в Zend Studio.
Комментарии
Комментировать код, расставляя вручную // не очень-то удобно. Можно использовать одну из 2 комбинаций:
  • Ctrl + Shift + C
  • Ctrl + /

До комментария


После
CamelCase и Autocomplete
Autocomplete также работает, если набирать заглавные буквы названий классов:
Набираем ZFEC для подсказки Zend_Form_Element_Captcha


Авто обновление рабочего пространства
Каждый раз выбирать папку и нажимать F5, чтобы студия считала с файловой системы изменения - утомительно, и, порой, неудобно (например, при использовании SVN, мы можем забыть закоммитить файл, добавленный вне студии). Есть одна замечательная опция, которая позволяет это делать автоматически, отслеживая изменения самостоятельно:
Ставим галочку Refresh automatically

2010-08-23

Пошаговый дебаг PHP в Zend Studio (разбираемся с Ubuntu)

Давно была интересна эта тема, но руки никак не доходили до того, чтобы привести это в действие: научиться устраивать пошаговый дебаг в Zend Studio.
Итак, мне удалось настроить работу Zend Debugger в Linux Ubuntu и в Windows 7. В этой части статьи будет приведен пример настройки в Ubuntu.
Нехитрое дело посмотреть в инструкцию по установке. Сразу оговорюсь, отключите eAccelerator, с ним Zend Debugger глючит.
Для начала качаем Studio Web Debugger с официального сайта. Также очень рекомендую поставить Studio Browser Toolbars для Firefox (качается оттуда же и сильно облегчает жизнь в последующем):
Studio Browser Toolbars в браузере Firefox 3.6
Zend Debugger является модулем для PHP. Далее некоторые нюансы для разных версий PHP могут различаться, в моем случае был рассмотрен PHP 5.3.3. Из архива достаем ZendDebugger.so, соответствующий нашей версии PHP и копируем его в директорию /usr/lib/php5/20090626+lfs. Прописываем в php.ini новый модуль и базовые настройки:
zend_extension = /usr/lib/php5/20090626+lfs/ZendDebugger.so

zend_debugger.allow_hosts = 192.168.1.1, 127.0.0.1
zend_debugger.expose_remotely = always
Опция allow_hosts в данном случае позволяет нам дебажить с локального хоста и с машины 192.168.1.1.
Запускаем Zend Studio. Выбираем место, в котором желаем остановиться во время выполнения (breakpoint). Делается это двойным щелчком по полоске левее номеров строк:
Breakpoint in Zend Studio


Производим следующие действия:
Действие над треугольничком
Действие над менюшкой

Далее открывается примерно такое диалоговое окно:
Указываем URL, по которому необходимо производить дебаг
Если все успешно - то дебагер после запуска встанет на первой адекватной строчке index.php (эту настройку тоже можно сменить, но не буду углубляться). Если дебагер не сработал, то, возможно, вам поможет мануал по установке, который я упомянул в самом начале. Основные горячие клавиши для работы с дебагом можно увидеть во всплывающих подсказках на кнопках управления непосредственно дебагом.
Таким образом, мне удалось запустить пошаговый дебаг в Zend Studio. Буду рад, если кому-то это сможет пригодиться.

2010-08-19

Установка Zen Coding в Zend Studio 8

Решил опробовать сегодня для себя Zen Coding. Скажу, что был приятно удивлен удобству и скорости набора HTML тэгов. Вы можете более подробно почитать о нем на просторах наших интернетов.
Сразу перейду к делу. Чтобы установить эту замечательную вещь в Zend Studio, необходимо сделать следующее:
  1. В студии в меню: Help -> Install new software... Вбиваем адрес http://download.eclipse.org/technology/dash/update/
  2. Выбираем Eclipse Monkey, и устанавливаем. Перезапускаем студию.
  3. Качаем скрипты Zen Coding для Aptana. Так как Aptana является плагином к Eclipse (как и наша Zend Studio) - эти скрипты нам подойдут.
  4. Распаковываем скрипты в корень проекта в папку scripts (да, проекта... централизованной установки нет).
  5. Обновляем все дерево проекта, чтобы плагин Eclipse Mokey "увидел" папку scripts.
Можно пользоваться. Но не очень это удобно без горячей клавиши.
Чтобы выставить горячую клавишу на скрипт Expand Abbreviation.js мне пришлось его немного подправить: строку
Key: M1+E
заменить
Key: M2+M3+E
Таким образом, комбинация для работы скрипта стала Shift + Alt + E. Прошлая комбинация Ctrl + E отказалась работать из-за конфликтов с уже существующими комбинациями, имеющими более высокий приоритет.

2010-08-08

SunSpider в Firefox (сравнение производительности JavaScript)

Решил провести тестирование скорости работы JavaScript трех версий популярного браузера:
  • Firefox 3.6.8
  • Firefox 4.0 beta 2
  • Minefield 4.0 beta 4 pre (ночная сборка 2010.08.08)
Потратив некоторое время в SunSpider, я получил довольно интересные и близкие к действительности результаты:

Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8

============================================
RESULTS (means and 95% confidence intervals)
--------------------------------------------
Total:                  729.8ms +/- 1.7%
--------------------------------------------

  3d:                   118.6ms +/- 1.2%
    cube:                29.4ms +/- 3.8%
    morph:               36.6ms +/- 1.9%
    raytrace:            52.6ms +/- 2.7%

  access:               104.0ms +/- 2.4%
    binary-trees:        27.2ms +/- 3.8%
    fannkuch:            51.4ms +/- 1.3%
    nbody:               16.8ms +/- 3.3%
    nsieve:               8.6ms +/- 12.9%

  bitops:                29.4ms +/- 5.7%
    3bit-bits-in-byte:    1.0ms +/- 0.0%
    bits-in-byte:         8.2ms +/- 16.6%
    bitwise-and:          2.0ms +/- 0.0%
    nsieve-bits:         18.2ms +/- 3.1%

  controlflow:           31.0ms +/- 0.0%
    recursive:           31.0ms +/- 0.0%

  crypto:                37.2ms +/- 2.8%
    aes:                 22.0ms +/- 5.7%
    md5:                  9.6ms +/- 7.1%
    sha1:                 5.6ms +/- 12.2%

  date:                 126.0ms +/- 2.1%
    format-tofte:        62.4ms +/- 3.3%
    format-xparb:        63.6ms +/- 1.7%

  math:                  44.8ms +/- 20.7%
    cordic:              26.6ms +/- 35.1%
    partial-sums:        13.0ms +/- 0.0%
    spectral-norm:        5.2ms +/- 20.0%

  regexp:                40.8ms +/- 1.4%
    dna:                 40.8ms +/- 1.4%

  string:               198.0ms +/- 2.5%
    base64:               8.0ms +/- 0.0%
    fasta:               44.6ms +/- 3.2%
    tagcloud:            59.2ms +/- 3.8%
    unpack-code:         64.2ms +/- 3.2%
    validate-input:      22.0ms +/- 10.6%

Mozilla/5.0 (Windows; Windows NT 6.1; WOW64; rv:2.0b2) Gecko/20100720 Firefox/4.0b2

============================================
RESULTS (means and 95% confidence intervals)
--------------------------------------------
Total:                  513.2ms +/- 0.9%
--------------------------------------------

  3d:                    77.8ms +/- 10.9%
    cube:                25.0ms +/- 0.0%
    morph:               21.0ms +/- 39.7%
    raytrace:            31.8ms +/- 1.7%

  access:                70.2ms +/- 1.9%
    binary-trees:        14.0ms +/- 0.0%
    fannkuch:            34.0ms +/- 0.0%
    nbody:               14.0ms +/- 6.3%
    nsieve:               8.2ms +/- 6.8%

  bitops:                22.4ms +/- 3.0%
    3bit-bits-in-byte:    0.4ms +/- 170.2%
    bits-in-byte:         7.0ms +/- 0.0%
    bitwise-and:          1.2ms +/- 46.3%
    nsieve-bits:         13.8ms +/- 4.0%

  controlflow:            6.2ms +/- 9.0%
    recursive:            6.2ms +/- 9.0%

  crypto:                28.8ms +/- 8.3%
    aes:                 17.6ms +/- 10.7%
    md5:                  7.2ms +/- 7.7%
    sha1:                 4.0ms +/- 0.0%

  date:                  68.8ms +/- 1.5%
    format-tofte:        43.4ms +/- 1.6%
    format-xparb:        25.4ms +/- 2.7%

  math:                  40.2ms +/- 4.0%
    cordic:              22.4ms +/- 3.0%
    partial-sums:        12.8ms +/- 4.3%
    spectral-norm:        5.0ms +/- 17.6%

  regexp:                45.0ms +/- 0.0%
    dna:                 45.0ms +/- 0.0%

  string:               153.8ms +/- 1.8%
    base64:               6.8ms +/- 8.2%
    fasta:               18.2ms +/- 3.1%
    tagcloud:            55.2ms +/- 2.9%
    unpack-code:         53.0ms +/- 1.7%
    validate-input:      20.6ms +/- 9.2%

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko/20100808 Minefield/4.0b4pre

============================================
RESULTS (means and 95% confidence intervals)
--------------------------------------------
Total:                  479.2ms +/- 1.5%
--------------------------------------------

  3d:                    76.6ms +/- 10.6%
    cube:                24.0ms +/- 3.7%
    morph:               18.8ms +/- 37.8%
    raytrace:            33.8ms +/- 3.1%

  access:                65.8ms +/- 1.6%
    binary-trees:        14.2ms +/- 7.3%
    fannkuch:            36.4ms +/- 3.1%
    nbody:                6.8ms +/- 8.2%
    nsieve:               8.4ms +/- 8.1%

  bitops:                18.8ms +/- 5.5%
    3bit-bits-in-byte:    0.2ms +/- 278.0%
    bits-in-byte:         7.6ms +/- 9.0%
    bitwise-and:          1.2ms +/- 46.3%
    nsieve-bits:          9.8ms +/- 5.7%

  controlflow:            6.0ms +/- 0.0%
    recursive:            6.0ms +/- 0.0%

  crypto:                26.4ms +/- 5.4%
    aes:                 15.4ms +/- 4.4%
    md5:                  7.4ms +/- 9.2%
    sha1:                 3.6ms +/- 18.9%

  date:                  66.2ms +/- 0.8%
    format-tofte:        40.4ms +/- 1.7%
    format-xparb:        25.8ms +/- 2.2%

  math:                  43.0ms +/- 2.0%
    cordic:              24.0ms +/- 0.0%
    partial-sums:        12.4ms +/- 5.5%
    spectral-norm:        6.6ms +/- 10.3%

  regexp:                43.6ms +/- 5.2%
    dna:                 43.6ms +/- 5.2%

  string:               132.8ms +/- 1.2%
    base64:               5.2ms +/- 10.7%
    fasta:               17.2ms +/- 3.2%
    tagcloud:            51.4ms +/- 4.4%
    unpack-code:         46.2ms +/- 7.5%
    validate-input:      12.8ms +/- 4.3%

Подводя итоги, становится видна тенденция, что новый браузер Firefox 4 от организации Mozilla будет обрабатывать JavaScript примерно в 1.5-2 раза шустрее, чем нынешний. Выход браузера запланирован на конец 2010 года.