Framework7の高速クロスプラットフォームHTML5アプリケーション

html5アプリケーションの開発を考えると、多くの人がすぐにjQueryまたはjQueryMobileを思い浮かべます。 また、jQueryMobileを使用して最も単純なアプリケーションを作成しようとしても、結果のhtml5アプリケーションのパフォーマンスと応答性が予想よりもはるかに低く、ネイティブアプリケーションと比較できないため、がっかりするのは非常に簡単です。







したがって、html5パスを引き続き使用すると、多くの微妙な点が原因でブレーキがかかり、応答性が低下することが徐々にわかります。たとえば、jqueryはアプリケーションの最速オプションとはかけ離れているか、デフォルトでは、ユーザーのクリックは300ミリ秒の遅延で動作します、応答性が低下します。



もう1つの重要なポイントは、リスト、ボタン、サイドメニューなど、再開発に時間を費やす意味がない既製の典型的なコンポーネントのセットがあるかどうかです。 このリストに追加すると、ネイティブアプリケーションと競合するために、何らかの理由でパフォーマンスの問題を解決する必要があります。



フレームワーク7



そして最後に、このような問題の解決に頭を悩ませるのではなく、高速で応答性の高い機能的なhtml5アプリケーションを開発するための既製のツールを取得するために、 Framework7があります 。 私自身も偶然に偶然に遭遇しましたが、framework7.jsをプラグインするだけで、さまざまな場所でソリューションを探す必要がなく、どれほど簡単に使用できるかに驚きました。



Framework7を使用する場合、サードパーティのモジュールやライブラリを使用する必要がないことに注意してください。これには既にすべてが含まれています。



このサイトには、膨大な数の例(ブラウザーでの作業)、指示、およびトレーニング記事(たとえば、Framework7とAngularJSの作業)があります。

www.idangero.us/framework7



応用例







行き過ぎないように、フレームワークの個々のコンポーネントを単一のアプリケーションに結合する方法を確認できる小さなサンプルアプリケーションを作成します。 スライドメニュー、プルリフレッシュ、無限スクロール、素材/ iosスタイルのオンザフライの変更、スローダウンしない8000要素の巨大なリスト(仮想リスト)を使用します。



アプリケーションの構造は非常に単純です。



これ以上は必要ありません。アプリケーションを作成するために他のライブラリやフレームワークは必要ありません。 ただし、必要に応じて、require.js、angular.js、matreshka.jsなどを使用できます。



index.html
開始するには、index.htmlフレームワークを検討してください。

<!DOCTYPE html> <html> <head> <!--   meta- --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <title>My App</title> <!--  framework7 ,   id,        --> <link id="pagestyle" rel="stylesheet" href="lib/framework7.css"> <!--     --> <link rel="stylesheet" href="css/app.css"> </head> <body> <!-- statusbar-overlay      --> <div class="statusbar-overlay"></div> <!--    panel --> <div class="panel-overlay"></div> <!--       reveal  --> <div class="panel panel-left panel-reveal"> </div> <!--  ,  views --> <div class="views"> <!--  ,    view-main --> <div class="view view-main"> <!--    ,          --> <div class="navbar theme-white"> </div> <!--   ,   navbar  toolbar   --> <div class="pages navbar-through toolbar-through"> <!--  data-page   ,        --> <div data-page="index" class="page"> <div class="page-content"> </div> </div> </div> <!--     --> <div class="toolbar"> <div class="toolbar-inner"> </div> </div> </div> </div> <!--  framework7     --> <script type="text/javascript" src="lib/framework7.js"></script> <script type="text/javascript" src="app.js"></script> </body> </html>
      
      





コンポーネントの追加は非常に簡単です(コンポーネントごとにサイトに指示があります)。たとえば、プルトゥリフレッシュを追加するには、

 <div class="page-content"> </div>
      
      





pull-to-refresh-contentクラス、および更新時に表示される矢印のデザイン:

 <div class="page-content pull-to-refresh-content"> <div class="pull-to-refresh-layer"> <div class="preloader"></div> <div class="pull-to-refresh-arrow"></div> </div> </div>
      
      





次に、要素のリストがあるテーブルビュー(リストビュー)を追加する必要があります。 短いリストを作成するには、リストビューが適しています(メディアリストなど、リストは静的または動的に作成できます)。

 <div class="list-block media-list"><ul> </ul></div>
      
      





しかし、非常に長いリストの場合、現在画面に表示されていない要素のアンロードが必要です。これは、速度が低下しないようにするために必要であり、アプリケーションはネイティブのように機能します。 このリストは仮想リストと呼ばれ、簡単に作成できます。

 <div class="list-block virtual-list media-list">  </div>
      
      





将来的には、リストを初期化してapp.jsに入力する必要があります



ここで、無限スクロールを追加します。これは、同じ名前、ツイストデザインのクラスを追加し、無限スクロールを呼び出す距離を示すことにより、同じものを追加します。

 <div class="page-content pull-to-refresh-content infinite-scroll" data-distance="100"> <div class="pull-to-refresh-layer"> <div class="preloader"></div> <div class="pull-to-refresh-arrow"></div> </div> <div class="list-block virtual-list media-list"></div> <div class="infinite-scroll-preloader"> <div class="preloader"></div> </div> </div>
      
      







iOSスタイルをマテリアルスタイルに、またはその逆に変更するには、たとえば、左側のメニューに2つのボタンを追加します。

 <div class="list-block left-menu"> <div class="row theme-white" style="width:90%;margin-left: auto;margin-right: auto;"> <div class="col-50"> <a href="#" class="button changestyle" rel="lib/framework7.css">iOS style</a> </div> <div class="col-50"> <a href="#" class="button changestyle" rel="lib/framework7.material.css">Android style</a> </div> </div> </div>
      
      





後で、クリックに応答し、cssファイルをrelで指定されたものに変更するために、changestyleクラスのハンドラーを切断します。



app.js
次に、アプリケーションが構成されているapp.jsファイル、リストの初期化などを検討します。

 //    var myApp = new Framework7({ animateNavBackIcon:true, pushState: true, //   ,    back  android modalTitle: "MyApp", modalButtonCancel: "", // Cancel  swipePanel: 'left', //    }); //    ios,   back ,     if (Framework7.prototype.device.os == "ios") myApp.params.pushState = false; //  jQuery   Dom7,    $,   ,    $$,        jQuery,   var $$ = Dom7; //    css ,  ios  material .    localStorage,       css $$(".changestyle").click(function() { $$("#pagestyle").attr("href",$$(this).attr('rel')); localStorage.setItem("css", $$(this).attr('rel')); return false; }); //      css if(localStorage.getItem("css")) { $$("#pagestyle").attr("href",localStorage.getItem("css")); } //    var mainView = myApp.addView('.view-main', { dynamicNavbar: true, domCache: true, //        scroll position    }); //        (    Template7) var myList = myApp.virtualList('.list-block.virtual-list', { items: [ { id: 1, title: 'Item 1', picture: 'http://lorempixel.com/88/88/abstract/1' }, { id: 2, title: 'Item 2', picture: 'http://lorempixel.com/88/88/abstract/2' } ], height:44, template: '<li class="contact-item" data-id="{{id}}" >' + '<a href="about.html" class="item-link">' + '<div class="item-content">' + '<div class="item-media"><img src="{{picture}}" width="22"></div>' + '<div class="item-inner">' + '<div class="item-title">{{title}}</div>' + '</div>' + '</div>' + '</a>' + '</li>' }); //  ,       function reloadTable(table, array) { table.items = array; table.update(); } //    20   var itemsArray = []; function firstInitList(text, count) { itemsArray = []; for (var i = 0; i < count; i++ ) { itemsArray.push({ id: i, title: text + ' ' + i, picture: 'http://lorempixel.com/88/88/abstract/' + i }); } } firstInitList("Item", 20); reloadTable(myList, itemsArray); //  pull-to-refresh var ptrContent = $$('.pull-to-refresh-content'); ptrContent.on('refresh', function (e) { //  0.5  setTimeout(function () { refreshIt(); }, 500); }); //        var authors = ['Beatles', 'Queen', 'Michael Jackson', 'Red Hot Chili Peppers']; function refreshIt() { //  10     Refresh firstInitList("Refresh", 10); myList.deleteAllItems(); myList.appendItems(itemsArray); //  8000   var temparr = []; for(var i = 0; i<8000; i++) { var picURL = 'http://lorempixel.com/88/88/abstract/' + Math.round(Math.random() * 10); var author = authors[Math.floor(Math.random() * authors.length)]; temparr.push({ id: i, title: author, picture: picURL }); } myList.appendItems(temparr); myApp.pullToRefreshDone(); } //  infinite-scroll $$('.infinite-scroll').on('infinite', function () { loadMore(); }); //  var loading = false; //  infinite-scroll' $$('.infinite-scroll-preloader').hide(); function loadMore() { //    ,     if (loading) return; $$('.infinite-scroll-preloader').show(); //  1   setTimeout(function () { for (var i = lastIndex + 1; i <= lastIndex + itemsPerLoad; i++) { itemsArray.push({ id: i, title: 'Item ' + i, picture: 'http://lorempixel.com/88/88/abstract/1' }); } reloadTable(myList, itemsArray); //  ,    loading = true; }, 1000); }
      
      







app.css
 //    infinite-scroll .infinite-scroll-preloader { margin-top:-20px; margin-bottom: 10px; text-align: center; } .infinite-scroll-preloader .preloader { width:34px; height:34px; } //    navbar .navbar { border-bottom: none; background: #2196f3; color: #ffffff; } .navbar a.link { color: #ffffff; } //      .panel, .left-menu .list-button { background-color: #3f4041; } .left-menu .item-link.list-button { text-align: left; }
      
      







その結果、どこでも使用できる、非常に応答性が高く、軽量で高速なhtml5アプリケーションが作成されます。



Androidの古いバージョンのhtml5アプリケーションを高速化します。 横断歩道



非常に迅速で簡単なアプリケーションを入手しましたが、Androidの古いバージョンではまだ十分な生産性が得られません。



実際、4.4までのAndroidのバージョンでは、非常に遅いWebビューが使用されます(たとえば、4.1にChromeベータをインストールして、その中でアプリケーションを実行し、それをビルトインブラウザーにあるものと比較すると、違いを確認できます)速度は非常に顕著になります)。 したがって、html5アプリケーションをapkに単純にパックすると、組み込みの禁止Webviewが使用されます。



5.x Androidからのみ、webviewは個別に更新され、新しいクロムに基づいているため、html5アプリケーションは迅速かつスムーズに動作します。



簡単に言えば、任意のデバイスおよび任意のバージョンのAndroidでhtml5アプリケーションの良好なパフォーマンスが必要な場合、クロムエンジンで動作するために必要です。 これを可能にするプロジェクトは横断歩道と呼ばれ、組み込みのWebビューではなく、最新バージョンのChromeで実行される独自のプロジェクトを使用します。







crosswalkを使用してhtml5アプリケーションがどのように機能するかを確認する最も簡単な方法は、Intel XDKをインストールし、空の「Standart HTML5」プロジェクトを作成し、作成したプロジェクトのwwwフォルダーを自分のものに置き換えます。



その後、[ビルド]を選択し、Crosswalk for Androidをクリックします。 アプリケーションはリモートサーバーでコンパイルされ、数分後にapk(armおよびx86のバージョン)へのリンクを受け取ります。 欠点は、アプリケーションのサイズが約19 MB増加することです。



Framework7 Webサイト: www.idangero.us/framework7

既製のアプリケーションのオンライン例: comedian-ant-73047.bitballoon.com (オンラインであるため、スタイルの読み込みが遅くなります)

ソース: yadi.sk/d/Quu2VfApgcGXA

Intel XDKを介して作成された既製のapkファイル: yadi.sk/d/marrZA5-gcGuQ



ほとんどの機能のオンライン例(kitchen-sink): framework7.io/kitchen-sink-iosまたはframework7.io/kitchen-sink-material

マテリアルデザインの同じもの: poacher-bear-12003.bitballoon.com/kitchen-sink-material/index.html



All Articles