1

ウェブサイトを作成していますが、AJ で作成することにしました。Gateways
=> mysql db からデータを取得し、データを json としてエコーするいくつかの php ファイル。
ビュー => 基本的に各ページのテンプレートである部分的な html ファイル。例: ユーザー、アイテムなど

次に、リクエスト プロセスとルーティングを処理する index.js ファイルがあります。

angular.module('Index',['addon'],function($routeProvider,$locationProvider){
    $locationProvider.html5Mode(true).hashPrefix("!");
    $routeProvider.otherwise({
        templateUrl: '/views/index.html',
        controller: "index"
    }).when("/items/",{
        templateUrl: '/views/items.html',
        controller: "items"
    })
}).
controller("index",function($scope,$http){

    $scope.users = [];
    $http.get("gateways/list.php").
    success(function(d){
        console.log(d);
        if(angular.isArray(d)){
            $scope.users = d;
        }
    });

}).
controller("items",function($scope,$http,$routeParams){
    $scope.items = [];
    $http.get("gateways/single.php").
    success(function(d){
        if(angular.isArray(d)){
            $scope.items = d;
        }
    });

}).

そのエレガントさを除いて、AJ のすべてのルートプロバイダーのポイントは何ですか? リクエストの数が原因でサイトの速度が低下しているだけではありませんか? ゲートウェイ ファイルの php コードをテンプレート ファイルに直接書き込むことはできますか? 私は間違った方法でそれをやっていますか?

4

3 に答える 3

7

AngularJSのようなフレームワークを使用するポイントを見逃している可能性があります。これらは主にシングルページアプリケーション用であり、ajaxを多用します。そして、リクエストの数がアプリケーションを実際に遅くすることはないことから始めましょう。Gmailが最初はAjaxなしであったことを覚えていますか?現在の実装よりも速かったですか?

これで、シングルページアプリケーションを構築すると、アプリはリクエストをサーバーに送信し、サーバーはJSONまたはXMLで応答します。AngularJSなどのフレームワークでは、サーバーがJSON応答を送信し、クライアント側のテンプレートまたはDOMを使用してレンダリングします。これにより、サーバーが配列を解析してテンプレートをレンダリングする必要がないため、サーバー側から膨大なリソースを節約できます。したがって、サーバーが100行のテーブルをレンダリングする必要がある場合、ブラウザーに送信する帯域幅は20KBであるのに対し、JSONのみが5KBであり、レンダリングを行うための文字列またはDOMテンプレートは1KBである可能性があります。つまり、実際には、訪問者のブラウザに多くの仕事をさせているのです。それはすべて計算/計算についてです。データグリッドに表示される列といくつかの計算値がある統計テーブルについて考えてみてください。クライアント側のフレームワークでは、

routerProviderの使用に関する質問については、ブックマークしてブラウザのナビゲーションボタンを使用することが不可欠です。従来のURLにビューがあるのと同じように、クライアント側アプリのURLには、ブックマーク可能でナビゲーションをサポートするビューがあります。

于 2012-12-17T10:06:11.337 に答える
1

AngularJSは、JSフレームワークとして、クライアントで魔法のように機能します。つまり、テンプレートファイルを処理し、必要なロジックを適用するのはコンピューターです。PHPはそれを行うことができません-それは厳密にサーバー側の言語です。AJAX呼び出しを介してPHP「ファイル」を要求すると、実際にはphpファイルは取得されませんが、サーバーが生成する処理済み出力(この場合は、オブジェクトにマップするユーザーのリスト)が取得されます。テンプレートにPHPロジックを含めるだけの場合、ほとんどの場合、angularJSが読み取るHTMLには表示する必要のあるリストが含まれますが、実際のリストモデルはありません(Angularはフィルター/変更/並べ替え/角度スコープで保存/削除)。

しかし、あなたは正しいです、あなたが取り組んでいるレベルでは、プロセスを複雑にし、遅くするだけのように見えるかもしれません(あなたの仕事を単純化するという小さな利点があります)。しかし、物事が密になると、そのモジュール化(およびコントローラー(つまり、ユーザーコントローラー)を適用可能なさまざまなビュー(ビュー、リスト、編集、詳細など)から分離することで、アプリケーションの構造が維持されます。

于 2012-12-17T10:03:34.393 に答える
1

私は彼らが決してサイトを遅くするとは思わない。あなたの懸念が各ページのhtmlとjsonの両方を取得することである場合、それはそれがどのように機能するかではありません。

htmlテンプレートは、angular-jsによって一度だけ取得、コンパイル、およびキャッシュされます。これは、firebugなどのデバッグツールを使用して確認できます。

したがって、ユーザーが別のページに切り替えるときは、サーバーに対してjsonリクエストを行うだけです。これは、一般に、htmlサーバー側をレンダリングして完全なhtmlを取得するよりも高速で軽量な操作です。(とにかく、それがあなたにとってより良いのであれば、あなたがそれをするのを妨げるものは何もありません)

于 2012-12-17T10:04:59.197 に答える