SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

jQuery UI/プラグインの活用

jQuery Mobile 1.4の変更点と既存ページ対応のポイント(前編)

「jQuery プラグイン」の利用(19)

イベントとメソッドの修正

 jQuery Mobile 1.4で非推奨になったイベント・メソッドについて以下に説明します。既存Webページでこれらが利用されている場合、修正が必要です。

 表2に示すjQuery Mobile固有イベントは非推奨となりました。

表2 jQuery Mobile 1.4の非推奨イベント
非推奨イベント 代替イベント イベントの内容
pageshow pagecontainershow ページ切替終了時(切替先ページで発生)
pagehide pagecontainerhide ページ切替終了時(切替元ページで発生)
pagebeforeload pagecontainerbeforeload ページ取得前
pageload pagecontainerload ページ取得時
pageloadfailed pagecontainerloadfailed ページ取得失敗時
pagechangefailed pagecontainerchangefailed 切替先ページ取得失敗時
pageinit pagecreate ページ初期化時

 例として、サンプルコードではpageinitをpagecreateに変更しています。

[リスト9a]非推奨イベントの変更(変更前)
$(document).on("pageinit", function(event) {
[リスト9b]非推奨イベントの変更(変更後)
$(document).on("pagecreate", function(event) {

 また、画面遷移を行う$.mobile.changePageとページの先読みを行う$.mobile.loadPageメソッドは非推奨となりました。Pagecontainerに対するchange、loadメソッドを用いて以下のように変更します。

[リスト10a]$.mobile.changePageメソッドの変更(変更前)
$.mobile.changePage( "second_1_3.html", { transition: "slide" });
[リスト10b]$.mobile.changePageメソッドの変更(変更後)
$("body").pagecontainer("change", "second_1_4.html", {transition: "slide"});

 現在表示されているページを取得する$.mobile.activePageプロパティは、Pagecontainerに対するgetActivePageメソッドに変更します。

[リスト11a]$.mobile.activePageプロパティの変更(変更前)
var activePage = $.mobile.activePage;
[リスト11b]$.mobile.activePageプロパティの変更(変更後)
var activePage = $("body").pagecontainer("getActivePage");

jQuery Mobile 1.4が備えるパフォーマンス改善オプション

 jQuery Mobileを利用する際にしばしば問題となる表示や動作のパフォーマンスについて、jQuery Mobile 1.4ではいくつかの改善策が提示されています。ここではdefaultsとenhancedの2種類のオプションを紹介します。

defaultsオプション

 defaultsオプション(data-defaults属性)をtrueに設定すると、ウィジェットが持つすべてのオプションがデフォルト値に設定されます。この時data-*属性のオプション値を解釈する処理がスキップされるため、ページ表示時のパフォーマンスを改善することができます。

[リスト12]defaultsオプションの指定
<div data-role="collapsible" data-defaults="true">
  <h2>オツベルと象</h2>
  <p>オツベルときたら大したもんだ。</p>
</div>

enhancedオプション

 enhancedオプションは、jQuery Mobileが行うHTML生成処理をスキップしてパフォーマンスを上げるためのオプションです。シンプルなHTML記述を元に最適化されたコードを自動生成してくれるのはjQuery Mobileの魅力の一つですが、パフォーマンスを追求するためにあえてjQuery Mobileに頼らず、開発者が自分で最適なHTMLを記述できるようになったわけです。

 例えばリスト13のHTMLは、jQuery MobileのHTML生成処理によって表示時にリスト14のような内容になります。

[リスト13]enhancedオプションを利用しないform
<form>
  <label for="button1">ボタン:</label> 
  <input type="button" id="button1" data-icon="delete" value="ボタン">
</form>
[リスト14]リスト13からjQuery Mobileが生成するコード
<form>
  <label for="button1">ボタン:</label> 
  <div class="ui-btn ui-input-btn ui-corner-all ui-shadow ui-icon-delete ui-btn-icon-left">
    ボタン
    <input type="button" id="button1" data-icon="delete" value="ボタン">
  </div>
</form>

 jQuery Mobileがリスト13からリスト14を生成するならば、最初からリスト14の内容を記述しておけば生成処理のコストを節約できるというのがenhancedオプションの考え方です。inputタグのenhancedオプション(data-enhanced属性)をtrueに設定した上で、変換後のHTMLを記述したのがリスト15です。

[リスト15]enhancedオプションを利用したform
<form>
  <label for="button1">ボタン:</label> 
  <div class="ui-btn ui-input-btn ui-corner-all ui-shadow ui-icon-delete ui-btn-icon-left">
    ボタン
    <input type="button" id="button1" data-icon="delete" value="ボタン" data-enhanced="true">
  </div>
</form>
図4 下がenhancedオプションを利用したボタン。画面上の差異はない
図4 下がenhancedオプションを利用したボタン。画面上の差異はない

 リスト13とリスト15は結果的にはまったく同じ表示ですが、jQuery MobileによるHTML生成処理が発生しない分だけリスト15のほうが良好なパフォーマンスを期待できます。その反面、enhancedオプションを使いこなすためにはjQuery Mobileが生成するHTMLの構造を把握しておく必要があり、それなりにハードルが高いと言えます。開発時の利便性と成果物のパフォーマンスを天秤にかけて使う機能と言えるでしょう。

まとめ

 本記事では、jQuery Mobile 1.4について、旧バージョンからの変更点や既存のWebページを対応させる修正ポイントを紹介しました。パフォーマンス改善やフラットデザインの導入など魅力的な内容を含むアップデートですが、その分変更になった点も多く、既存Webページへ導入する際には十分な事前検証とコードの修正、および動作確認が必要です。

 次回は本記事の続きとして、画面を構成する各種ウィジェットに関する変更点を説明します。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
jQuery UI/プラグインの活用連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7646 2014/03/13 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー