1

我正在创建一个网站,我选择在 AJ 中进行。我有两个文件夹:
Gateways => 一些 php 文件,它们从 mysql db 中检索数据并将数据作为 json 回显。
视图 => 部分 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 密集型。让我开始,请求的数量并没有真正减慢应用程序的速度。还记得最初没有 Ajax 的 Gmail 是怎样的吗?它比当前的实现更快吗?

现在,当您构建单页应用程序时,应用程序将请求发送到服务器,服务器以 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 回答