2011年1月18日火曜日

開発進捗(1/17)

やったこと:
  ページのhtml部分を別ファイルにして必要になったらimportさせるようにした。
  htmlの各要素のオブジェクト生成は、import時にのみ実行させるようにした。

結果:
  全体的にみると、ちょっとだけ速くなっているようだ。
  起動時間はあんまり変化なし。理論上はほかのページをimportしない分速いはずですが・・・
  考えられる原因:
    初回のフォームの生成が2重処理になっていることが原因か?
      import時に空フォームを生成。
      レンダリング時にリクエストの値をフォームに埋め込み
    あとは、ページが少ないので、1ファイルだけimportする恩恵が少ないこともありうる。

  表記がこなれていないし、オーバーヘッドももう少し抑えられるような気がする。
  テストコードは全然できていない。

進むべき方向をしらべている場合は、テスト駆動型開発って難しい気がする。
デザインがきっちり決まっていないと、テストコード書いても無駄が多いような?

次にやること:
  ・表記やオーバーヘッドを減らすコードを考える。
  ・リクエストの値を簡単にフォームに埋められるようにしたい。
  ・オブジェクトの生成をキャッシュ化しているけど、
   固定文字列を生成するところまでキャッシュ化させられるようにする。
  ・テストコードを整備する。
  ・リファクタリング開始。

2011年1月15日土曜日

開発進捗(1/15)

app.yamlの定義を自動生成してハンドラーごとに呼び出す作戦は、パフォーマンス的に思ったほどの効果はない(とういかむしろ遅くなった)ようだった。そのため、そっちの道はあきらめる。

そうなると、webappでだいたいOKなのですが、中身を細かく見ていくと、無駄に思える機能や使い方がよくわからない機能がいくつかありました。
なるべく起動を軽くしたいので、ソースをコピーして、自分用に最適化。
・正規表現でハンドラーを定義する仕組みは、不必要なので廃止。
 ディクショナリにパスを定義して、リクエストされたパスと完全に一致するパスに割り当てられているハンドラを呼び出すようにする。それにともなって、後ろのパスを渡す処理もなし。
・lib_config.registerの意味がよくわからなかったので、取っ払う。
・googleアカウントは使わない予定なので、login_requierdは、完全に作り直す必要がある。とりあえず廃止。
・webappで使用するモジュールを一つのモジュールにまとめる。
・class RequestHandlerは、htmlを生成する自作モジュールへ統合。
・ビューとコントローラのファイルを分割し、各ビューは対応するコントローラが呼び出されたときにインポートするようにさせる。

ここまでやったのですが、全体にサイトが小さいのでいまいち効果がわからない。
webappをそのまま使ってもとりあえずよかったので回り道をしていますが、
中身をいじったおかげで仕組みが少しわかったので、これはこれでよかった。

ビューは、テンプレートを初回のインポート時に作成して、
以降はテンプレートへのあてはめをしていけば良いはずですが、そうなっていない。
そこを直して、速度を確認していこう。

2011年1月5日水曜日

Google App Engine(Python)のフレームワーク

柴田淳さんのブログを見ていたら、
Ahaというフレームワークを(いまさら)見つけた。

http://coreblog.org/ats/looking-back-2010

なんだか、すごく出来がよさそうなので、参考にしてみることにする。

mercurialをインストールして、
hg clone https://aha-gae.googlecode.com/hg/ aha-gae

んー。コメントは日本語じゃないのかぁ。
でも勉強がてら読んでいこう。

2010年12月28日火曜日

Google App Engine:app.yamlとハンドラ

webappをベースに携帯電話用のウェブサイト構築のフレームワークを作成中。

ハンドラの定義を簡略化させたいので、
app.yamlか、メインとなるハンドラを自動生成させる仕組みを構想中。


こんな感じの構成で、
 /framework/__init__.py
 /sites/admin/__init__.py
 /sites/admin/main.py
 /sites/__init__.py
 /sites/index.py
 /sites/login.py
 /app.yaml
 /mainhandler.py


案1:app.yamlをこんな感じで自動生成させる。
------------------
- url: /index\.html
script: sites/index.py

- url: /login\.html
script: sites/login.py

・・・以下同様に続く。
------------------


案2:mainhandler.pyをこんな感じで自動生成させる。
------------------
import sites
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

application = webapp.WSGIApplication(
[('/index.html', sites.index.Html),('/login.html', sites.login.Html),・・・以下同様に続く], debug=True)

def main():
run_wsgi_app(application)

if __name__ == "__main__":
main()
------------------

案1は、(importの範囲を絞れるので)たぶん起動速度が速い。
その代償にapp.yamlをいじり辛くなってしまうので、
フォルダごとに管理者ユーザのみのアクセスを設定したりするのは難しい。


案1と案2の折衷案がよさそうな気もする・・・
まずは案1と案2のパフォーマンスの差を調べよう。

2010年12月16日木曜日

開発進捗(12/16)

頭の中ではなんとなくデザインが進んでいるのですが、
具体的な進捗は、仕事が忙しくて、ゼロ。

新品のノート(Windows7 64 bit)を買ったので、環境を再構築しよう。