おぎろぐはてブロ

なんだかんだエンジニアになって10年以上

convert_to_* と convert_to_*_ex の違い

convert_to_* は、zvalを指定の型に変換するもの。convert_to_*_ex は、zvalが既に指定した型だったら終わり。で、リファレンスだったら分離して、convert_to_* を呼び出すようになっている。

zend_operators.h

#define convert_to_boolean_ex(ppzv) convert_to_ex_master(ppzv, boolean, BOOL)
#define convert_to_long_ex(ppzv)    convert_to_ex_master(ppzv, long, LONG)
#define convert_to_double_ex(ppzv)  convert_to_ex_master(ppzv, double, DOUBLE)
#define convert_to_string_ex(ppzv)  convert_to_ex_master(ppzv, string, STRING)
#define convert_to_array_ex(ppzv)   convert_to_ex_master(ppzv, array, ARRAY)
#define convert_to_object_ex(ppzv)  convert_to_ex_master(ppzv, object, OBJECT)
#define convert_to_null_ex(ppzv)    convert_to_ex_master(ppzv, null, NULL)

#define convert_to_ex_master(ppzv, lower_type, upper_type)  \
    if ((*ppzv)->type!=IS_##upper_type) {                   \
        if (!(*ppzv)->is_ref) {                             \
            SEPARATE_ZVAL(ppzv);                            \
        }                                                   \
        convert_to_##lower_type(*ppzv);                     \
    }

自分でも、リファレンスがあやふやになってきたので、あとでちゃんと整理しようと思う。

Cookieがパフォーマンスに与える影響

Yahoo!YUI Blogで、"Performance Research, Part 3: When the Cookie Crumbles"という記事で、Cookieがレスポンスに与える影響が説明されています。
Cookieのサイズと、それによるレスポンスタイムの変化の表とか興味深い。

まとめの適当な訳。

  • 不要なCookieを排除する
  • cookieのサイズを可能な限り小さくする
  • 適切なドメインレベルで発行し、不必要に他のサブドメインに影響を与えないようにする
  • 適切な有効期限を設定する。

実サイトのCookieサイズの分析

記事の方では、トップページにアクセスしたときの各サイトで発行されるCookieのサイズの表が示されています。
でも、それってちょっと、やほーの都合のいいような条件にしてないか?ということで、普段使って、Cookieが蓄積されている状態でのCookieのサイズを調べてみました。(普段使っているサイトで、ログインした状態で、document.cookie.lengthを叩いた結果)

cookie size
google.co.jp 369
mixi.jp 395
youtube.com 396
amazon.co.jp 455
d.hatena.ne.jp 510
yahoo.co.jp 807
yahoo.com 971
myspace.com 2203

googleは少ない。yahooはぼちぼち。そして、myspaceダントツ。

あと、Yahoo!は、画像などstaticなファイルを別ドメイン(yimg.com)から取るようになっていて、そっちのcookieは25文字と大幅に小さいもの。cookieによるパフォーマンスへの影響を抑えるためかと。(図のFirebugのオレンジ色でぬったとこだけが*.yahoo.com)

ちなみに画像の左上の赤で囲んだ部分のアイコンは、巨大な画像の一部を切り出してたりする。

逆にmyspaceは、ユーザプロフィール画像以外は x.myspace.com とかのサブドメインから取っていて、こっちにも普通に巨大cookieを送出しているので、ページ上に載っている画像などのコンテンツが多いと、影響が少なくないと思います。