Аналогичный по задачам, но реализованы по другим принципам на Python код минимизации страницы. Продолжение предыдущего поста с реализацией на php. Главное отличие от предыдущей версии здесь мы разбиваем потоковый парсером html и на обрабатываем содержимое тегов. Для сжатия стилей и скриптов используется внешний код для минимизации из webassets.
Идеи приходящие в голову. Надеюсь они кому-то помогут. Заранее благодарен за комментарии.
Showing posts with label python. Show all posts
Showing posts with label python. Show all posts
Sunday, April 29, 2012
Thursday, September 10, 2009
Неоднозначности Google AppEngine
Мелкие несоответствия в документации Google AppEngine
или мелкие, но неприятные особености.
или мелкие, но неприятные особености.
Загрузка файлов.
- В документации в примере работы с фотографиями указано, что по умолчанию для параметров загрузки файлов выдается их содержимое. В действительности выдается исходное имя файла, поэтому нужно вместо:
self.request.get('uploadfile')
, использоватьself.request.params.get('cvs').file.read()
Кодировка строк.
- Параметры возвращаемые self.request.get() возвращаются в виде unicode строк;
- В базу данных тоже нужно сохранять unicode строки;
- При редиректе нужно использовать для строк содержащих символы не входящие в ASCII выражение вида:
sub_path = self.request.get('path')
, то есть перед выполнением редиректа нужно преобразовать в обычную строку.
self.redirect('/forum?path=' + cgi.escape(sub_path.encode('utf-8')))
Особенности базы данных
- Пока обнаружил только, что желательно добавлять и удалять маленькими порциями. В первом случае можно наткнуться на ограничение во времени (5 секунд) и нагрузке при обработке запроса. В втором случае удалить более 300 объектов за раз нельзя. Цифры примерные - точные цифры получить не пытался, известно только, что за зараз можно добавить 600 объектов и раза в два меньше объектов удалить.
- Нагрузки на процессорное время при первом получении результатов (не созданы индексы) может достигать на простых операциях вида: получить первые 25 результатов с сортировкой по дате ключу, может занять до 10 абстрактных секунд(30 секунд реальных) при последующих запросах значения падают на порядок.
- Добавление 600 записей может использовать до 1% процессорного времени выданного для бесплатного аккаунта.
- База основана на технологии map/reduce, и не поддерживает команды SQL кроме select. Но удобнее, как по мне, использовать нативные методы order, filter, put, fetch.
- Можно только сравнивать на равенство больше/меньше и включение(in), операции like и под запросы не поддерживаются.
- Для реализации операций соответствия признаку (или поиск слов, тегов) можно использовать разбиение исходного предложения на минимальные единицы с последующим сохранением этого списка, как отдельного поля в записи (можно в поле записи сохранять список), а потом при поиске использовать вхождение. Конечно, это немного не то, если нужен like, но вполне быстро срабатывает.
- Включение работает как пересечение, то есть если есть общие элементы, то возвращается истина.
Subscribe to:
Posts (Atom)