Как стать автором
Обновить

Комментарии 27

К сожалению пока не встречал вреймворков которые в полной мере удовлетворили потребности!
Использование фреймворков для JsClasses не обязательно, можно использовать родную конструкцию:
var myClass = new function() {

}

Но на мой взгляд это все же снижает скорость разработки.
хехе, если в яваскрипте нету классов, то в пхп нету объектов :-P
класс, в динамических языках — это объект, выполняющий функции фабрики для создания других объектов.
в яваскрипте эта функция возложена на функции. так что в нём есть классы и они самые, что ни на есть, настояшие. просто на них не висит таблички «это класс» — вот все и бегут «реализовывать классы в яваскрипте» =)
впрочем, в мутулз классы какие-то совсем закастылезованные, хотя, конечно есть и более замороченные реализации…

jsmin вместе с gzip применять смысла не имеет. ибо от минимизации тут выигрыша никакого, а исходник таки поганится.

Читай внимательно dklab.ru/chicken/nablas/39.html. И только после этого делай громкие заявления. ;)
1) Fatal: /chicken/nablas/39.html.: could not find handlers chain for extension «»
2) Fatal: /chicken/nablas/39.html.: could not find handlers chain for extension «»
BEGIN failed--compilation aborted at (eval 6) line 2.
4) Fatal: /chicken/nablas/39.html.: could not find handlers chain for extension «»
BEGIN failed--compilation aborted at (eval 6) line 2. at /home/dklab/domains/www/_Kernel/Scriptor.pl line 44.

спасибо, подрочил =)
а, там точку в конце надо было убрать… ну и как можно серьёзно относиться к человеку, который вываливать фатальные ошибки в браузер? ;-)

впрочем, я очередной раз прочитал эту наблу… и что теперь?
Можете почитать из кеша google:
По поводу обязательности использования фреймворков я уже отвечал.

А JsClasses создает два файла js/cache/<tmp_имя>.js и js/cache/<tmp_имя>.js.gz.

Второй файл отдается внутренним редиректом если в header-е http-запроса есть строка «Accept-Encoding: gzip, deflate». Т.е. запрашивается всегда первый файл а отдаваться он может в «сжатом» виде, в случае, если браузер такой вариант отдачи понимает.
а какие браузеры не поддерживают гзипование?
У Safari были проблемы. У меня сейчас версия 3.1.2, там уже все пофиксили.
были проблемы у сафари под винду, который только релизнулся и которым никто не пользуется? это не слишком актуально.
Спасибо за статью, давно была идея что-то делать с десятками подгружаемых js-файлами модулей, а тут и готовое решение =)
А есть какие-нибудь цифры тестов скорости загрузки с использованием RIA JsClasses и без?
Перед созданием модуля я изучал код Smarty. Так вот, по сравнению со Smarty класс просто «пушинка» :).
Пока что, к сожалению, я не нашел времени на написание тестов.
Еще рекомендую добавить в .htaccess проверку не только Accept-Encoding но и TE для клиентов которые используют Оперу и Аутпост. Я про это немного писал здесь
Я внес Вашу статью в «Ccылки по теме».
<script type=«text/javascript» src=«js/mootools-1.2-core-nc.js»></script>
<script type=«text/javascript» src=«<? echo $classesResultJsFileName ?>»></script>

А почему первый скрипт не попал в $classesResultJsFileName?

ЗЫЖ «изминения» режет глаз. исправьте пока никто не увидел =)
Так и задумано. Пересборка такого большого файла заняла бы лишние ресурсы. У меня, например, этот файл грузится с одного url для всех проектов. Некоторые его грузят через google.load;

Цена за такую неоптимальность не очень большая, зато убирается много проблем.

Кроме того, я специально оставил MooTools незакомпресированным. Чтоб можно было смотреть в код фреймворка в процессе разработки, когда возникают ошибки. На продакшин сервере я использую mootools-1.2-core-yc.js

Ошибку поравил, спасибо.
это заказная статья. человек в статье про свой продукт (по иллюстрации страница с кнопкой «download») первым пунктом расписывает mooTools, а потом еще дополнительно выделяет его в исходнике.
ага, и заказал её Valerio Proietti :-)
С задачей кэширования скриптов прекрасно справляются браузеры — а склеивание скриптов в 1ом файле может этому сильно помешать, потому как при открытии новой страницы браузеру ещё надо вытягивать её «индивидуальный» js-файл.

Имхо, решение хабра более правильное: для каждой страницы — свое подмножество скриптов. После загрузки нескольких таких страниц в кэш браузера переедет всё множество скриптов сайта — и ничего тормозить не будет.

Цена за такую неоптимальность не очень большая, зато убирается много проблем.

Большое количество файлов не единственный минус такого подхода, есть еще проблемы с обновленной версией блока. На хабре они решаються вот так xmlhandler.js? revision=12. Некоторые браузеры (Opera, Internet Explorer 6+, Safari) НЕ кешируют документы, если в адресе есть вопросительный знак, т.к считают их динамическими.

Видимо мое упущение в том что я не расписал «в деталях» принцип работы моего скрипта.

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

Если не учитывать swfupload*, то все js-файлы Хабра можно было спаковать (я думаю) в 50-60 кб один архив и ставить его на каждую станичку без '?' вместо 200-250 как сейчас.

Но я не говорю что у Хабра сделано плохо. У любого метода есть свои плюсы и свои минусы.

Я ориентироваля на решение проблемы оптимизация или ускорение процесса коммандной разработки.

От вопросительного знака можно избавиться, добавив номер версии в имя скрипта. Например, xmlhandler_v12.js.

Кстати, как Ваш упаковщик скриптов «разруливает» сборку различных ревизий классов?
По дате изменения класса. По каждому классу эта информация храниться в кеше.

На production-сервере можно проверки отрубить
$jsClasses->setCheckClassModifyTime(false)

и после каждого апдейта запускать модуль отдельно в режиме «чистки» кеша, с помощью «спецключа» к запуску сайта:

if ($_GET['mySuperCacheRebuildKey']) { $jsClasses->cleanCacheDir(); }

Тогда в коде ничего менять не прийдется. И нагдузка будет еще меньше.

Сам класс хорошо документирован, вы можете его можете наследовать в своем классе и доработать до того вида который нужен Вам.
НЕ кэшируют если НЕ указаны заголовки регламентирующие кэширование.
в JsDoc ужасное комментирование.

попробуйте закомментировать /* функцию */

я вобще давно уже приучаю своих подопечных делать комментарии для функций исключительно в стиле

// ===========
// * бла бла бла
// ===========
А как насчет ленивой (on-demand) загрузки нужных скриптов/стилей? Такая используется в Dojo, еще есть Chiron (modules.js), и еще много где. :)

Где-то смотрел видео, где комрад рассказывал как раз об этом: делайте все лениво. Производите вычисления только тогда, когда это нужно.
тоже интересная статья в «тему»
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации