Movatterモバイル変換


[0]ホーム

URL:


hakobera's blog

技術メモ。たまに雑談

この広告は、90日以上更新していないブログに表示しています。

iPad の Safari には画像サイズ制限がある

iPad Safari image limit workaround | Adventures in Code

Pixiv のランキングをスライドショーで表示するSeiga Show を作っていて、なぜか 45位以降の画像が表示されないことがたまにあって調べていたのだが、どうやらiPadSafari では1ページあたりの画像サイズの合計が 6.5MB を超えると、それ以降の画像が表示できないという問題があるようだ。

2011/05/29 追記iPad 2 では普通に表示できます。やはりメモリ容量の問題だったみたいです。

Pixivの画像が大体1枚 150k前後なので、150k * 45 = 6,750k となり、大体計算も合うのでほぼ間違いなし。

上記で紹介した記事では、HTML5Canvas の drawImage を使えば、この制限を回避できる、と書いてあり、サンプルページをiPad 実機で確認したところ、確かに 10MB までの画像が表示できていた。 が、iPhone 3G ではSafari ごと落ちてしまうことがほとんどで、表示できても 9MB あたりに制限があるようで、全ての画像は表示できなかった。

なので、結局、画像のキャッシュサイズをプログラムで制御し、古い画像(imageタグ) を DOM から破棄していくことで対応するしかなさそう。

もう少し解析した結果、Canvas 使う場合でも、明示的に image を解放してあげないと、GC の対象にならないようなので、最終的には以下のコードで上手く動作した。

var image = new Image();image.onload = function() {  // load 後の処理  var c = document.getElementById('canvas');  var ctx = c.getContext('2d');  c.width = image.width;  c.height = image.height;  ctx.drawImage(image, 0, 0);    image = null; // ← これ重要};image.src = imageSrc;

この問題でもっとも頭が痛いのは、HTTP のステータスとしては 200、つまり正常として返ってくるので、プログラムからエラーを検知できない、という点で、ホントなんとかしてもらいたい。

結局、HTML5 だろうと、ネイティブなアプリと同様メモリ管理を意識しないといけないという当たり前のことなんだけど、PC上のSafari だと起こらない問題なので、忘れがちだし、この辺、「iPhoneアプリケーション開発ガイド ―HTML+CSS+JavaScript による開発手法」にも書いてないので要注意。

iPhoneアプリケーション開発ガイド ―HTML+CSS+JavaScript による開発手法

iPhoneアプリケーション開発ガイド ―HTML+CSS+JavaScript による開発手法

検索

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です読者をやめる読者になる読者になる

[8]ページ先頭

©2009-2025 Movatter.jp