HTML5スコアコード:iOS7の良いところと悪いところ
こんにちは、ゼノフィnakamuraです。
この記事は、US Sencha社ブログ
The HTML5 Scorecard: The Good, The Bad and the Ugly in iOS 7
を翻訳したものです。
![iOS7](http://www.xenophy.com/wp-content/uploads/2013/10/iOS7-hero.png)
iOS 7のバグと機能
Max Firtmanは既に新しい機能や バグ、不思議なことについて素晴らしい紹介をしました。もし彼のブログ記事を読んでなかったら、今すぐに読む事をおすすめします。ここでは同じ発見を全て繰り返して説明しませんが、復習のためにiOS 7には二つ大きいバグがあります。 まずは、WebSQLの容量は、以前はアプリに与えるデフォルト5MBのスペースを50MBに拡張することが許可されていましたが、現在は正しく動作しませんので、回避策が必要となります。 もう一つは﹁ホーム画面に保存﹂のアプリケーションも基本的に壊れています。ホーム画面に四つ以上のアプリケーションが保存された場合は、保存スロットが再利用され、時々重複するので、スマホは自身を空にするためにはリブートする必要があります。さらに、他の外部のURIはもう正確に開かないので、全てのJavaScriptモーダルダイアログ︵alert、promptその他︶は無効にされます。最終的に、あなたのアプリケーションがAppCacheを利用していて、hashまたは他のメカニズムで管理している場合、履歴オブジェクトはアップデートしませんので、history.backが無効とされます。 “HTML5開発で標準化された組織は、この問題を解決するiOSアップデートが出るまでアップグレードしないほうが良いかもしれません これらの主要なバグ以外に、iOS 7の面倒なデザインの決定もありました。まずは、JavaScriptを利用してURLのバーを非表示にする方法がなくなりました︵またモバイルSafariでの﹁全画面表示﹂ボタンもなくなりました︶。あなたのアプリケーションが絶対位置に頼っているとレイアウトに問題を起こします。Andrea Giammarchiさんが提案したこの一つの回避策は、全画面表示にリセットするために、ユーザーにアクション︵例えば上の方向にスワイプすること︶を起こすように依頼する方法です。しかし、これをプログラム上で出来る方法は︵まだ︶ありません。また全画面表示になってから、画面下の領域の部分をタップすると、まずブラウザのツールが表示され、これを止める方法はありません。この結果、ツールバーを下に配置するのは余り良くないUXになります‥最初のユーザータップはブラウザのツールを呼び出し、これはツールバーをページ内で押し上げて、それからユーザーがアクションを起こすためには再びタップする必要があります。ステータスバーにも似たような問題がありますがそれは回避することができます。 これらに加えて、ディスプレイの端から約10%以内での左右のスワイプジェスチャーはすべてiOSにつかまれ、戻る/進むの操作として扱われて、ブラウザにパスされません。さらに、アプリケーションにバック・フォワードの動きを履歴のpush-stateを利用して組み込むと、間違えたスワイプをすると以前のWebサイトであるように以前の状況をロードします。これは意外な動作となります。Android用のChromeが最初にこの動作を導入したブラウザでしたが、ウェブ開発者からのフィードバックに基づいて外しました。Appleもすぐに同じようにすることを祈っています。 自宅のテストでは、iOS 7ランタイムでいくつか追加のバグも発見しました。 ●iPadでは、入力がフォーカスされている時に向きが変わると、コンテンツが意外に変化して、その結果画面のレンダリングが発生します。 ●ホーム画面の同じアプリを何回も起動と終了を繰り返すと、デバイスはハードロックされて、ハードウェアの再起動が必要となります。 ●requestAnimationFrameのアニメーションは正確にバックグラウンドで表示されなくなり、アクティブなページでのRAFアニメーション動作の低下を招きます。これはRAFアニメーションを利用する一つの大きな用途がなくなります。 ●iPadでは、ドキュメントのボディが100%の高さにセットされている場合、コンテンツはランドスケープモードでは20px高く押し上げられます。これはorientationchangeイベントでcalling window.scrollTo(0, 0)にすると回避できます。 ●特定なケースで、複合のレイヤー︵3Dの変化を持つ要素︶のリサイズをすると、それを完全に塗り替えません。その代わり、キャッシュされているビットマップが伸ばされます。 ●時々CSSアニメーションはimplicit z-indexesが計算される前に発火するので、アニメーションの中に誤ったzレイヤリングが発生します。 ●元のページが明白に削除されたか、Safariの処理が明白に終了された以外、Web Workers内で動作しているスクリプトは中断されません。違うタブへの切り替え、Safariの最小化、画面を消してもWorker実行を止める事はできません。これは重大な問題で、どのWebページでもiOS 7のデバイスのバッテリーを消耗し、ユーザー警告することなくシステム全体のパフォーマンスを低下させます。パフォーマンスの特徴
バグ・機能テストに加えて、iOS 7対iOS 6.1を動作しているiPhone 5で私達の基準なパフォーマンステストを行いました。ベンチマークのパフォーマンスで目覚ましい改善がありつつ、しかし同時に顕著なミスもありました。まずは、iOS 7のJavaScriptタイマーに何か不思議な事が起きました。以前のバージョンのiOSでは、非常に良く実装されたタイマーがありました‥4msでとても良い整合性でした︵以下をご覧下さい︶。しかし、John Resigの基準のタイマーを利用すると、この奇妙なプロフィールが出てきました‥定期的に4msと12msの間を切り替わるタイマーでiOS 6よりもノイズが多いものです。![iOS7 timer](http://www.xenophy.com/wp-content/uploads/2013/10/iOS7-11.png)
![iOS6 timer](http://www.xenophy.com/wp-content/uploads/2013/10/iOS7-5.png)
![iOS7](http://www.xenophy.com/wp-content/uploads/2013/10/iOS7-2.png)
![iOS7](http://cdn.sencha.io/img/20130924-iOS7/iOS7-3.png)
グラフィックスのパフォーマンス
CanvasパフォーマンスのテストはiOS 7での小さな改善を示していますFishtankテストとMindcat microbenchmarksでは約10%です。しかし、SVGは意外な新事実でした。新しいドローイングのアルゴリズムに切り替えたおかげで、SVGパスドローイングの速度は200倍も向上しました。文字通り、実際に200倍高速になりました。iOS 6では10.000のSVGパスのセグメントを描くには約11秒がかかりました。iOS 7ではそれは53ミリ秒になりました。iOSはSurface RT︵以前のSVGドローイングパフォーマンスの王者︶と比べて今より6倍も速いです。![iOS7](http://cdn.sencha.io/img/20130924-iOS7/iOS7-4.png)
iOS 7: Webのベータ版
![iOS7](http://www.xenophy.com/wp-content/uploads/2013/10/20130924-iOS7.png)