javascript - 在前端工程化的趋势下,php还有必要去渲染视图层吗?
天蓬老师
天蓬老师 2017-04-11 11:52:02
0
5
262

在练习做cms管理系统有感而发.
请看下面两种新闻列表页的实现方式:

  • 方式一

<?php foreach ($newsArr as $v) {?>
      <tr>
        <td>#<?php echo $v['id']?></td>
        <td><?php echo $v['title']?></td>
        <td>
          <a href="javascript:void(0);" class="alterBtn" id="alterBtn<?php echo $v['id']?>">修改</a> |
          <a href="javascript:void(0);" class="delBtn" id="delBtn<?php echo $v['id']?>">删除</a>
        </td>
        <td><?php echo $v['addtime']?></td>
      </tr>
<?php }>
  • 方式二

<!--HTML代码-->
    <tr v-for="item in list">
          <td>#{{ item.id }}</td>
          <td>{{ item.title }}</td>
          <td>
            <a href="javascript:void(0);" v-on:click="alt(item)" class="alterBtn">修改</a> |
          <a href="javascript:void(0);" v-on:click="del(item)" class="delBtn">删除</a>
        </td>
          <td>{{ item.addtime }}</td>
      </tr>
//js代码

//渲染列表项
    $.get("news/listC.php","",function(response){
            var obj = JSON.parse(response);
            //绑定
            var newsTable = new Vue({
            el: '#newsTable',
            data: {
                list: obj,
            },
            methods: {
                alt:function(item){
                    layer.confirm(item.id);
                    console.log(item.id);
                },
                del:function(item){
                    var msg = "确认删除"+item.title+"吗?"
                    layer.confirm(msg,function(){
                        $.get("news/delC.php","id="+item.id,function(response){
                            if(response == "1"){
                                layer.msg("删除成功",{icon:1});
                                //重新渲染
                                console.log(newsTable.list[1].title);
                                $.get("news/listC.php","",function(response){
                                    newsTable.list = JSON.parse(response);
                                });
                                
                                //前端渲染
                                /* newsTable.list = newsTable.list.filter(function(node){
                                    if(node.id != item.id){
                                        return node;
                                    }
                                }); */
                            }else{
                                layer.msg("删除失败",{icon:2});
                            }
                        })
                    },function(){
                         layer.msg("用户取消",{icon:5});
                    });
                    console.log(item.id);
                }
            }
        })
    });


上述两种方式都可以展示新闻列表页:

  • 第一种方式需要服务器去解析,会增加服务器端运算开销

  • 第二种方式只需要从服务器获得JSON串就可以在前端完成渲染

显然第二种实现方式优势很大,那么还有必要在后台完成视图层渲染吗?
或者说MVC框架里的V层能不能完全交给前端来处理呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(5)
大家讲道理

以前的时候,是传统的前端写了模板,然后后端再去套。

现在可以让前后端进行分离了,服务器端可以重点去研究怎么去优化系统了。正好也省了模板解析这一块的优化。

像是Laravel里面有vue.js框架,就是前端模板解析。

这种对于前端的要求,也是变得高了,现在前端的js框架变化很快,对于前端的要求也很高。

前端也不用坐到后台的电脑旁进行调试前端页面了。

所以,我个人是非常提倡这种的,我看到了,比如我朋友的公司,和信贷,好像就有做这一部分的优化。另外我观察起点中文网也有将模板放到前台来解析。

所以,这是未来的趋势!!!

小葫芦

之前也想过这个问题,php渲染还是有必要的,但是用第二种方式貌似就不能 SEO 了,

阿神

当然是可以的,现在很多公司或者项目就是走前后端完全分离的套路,服务端只做api来提供数据,页面渲染完全由前端负责。现在很火的一些前端MVVM框架,诸如angular,vue等也是走这样的套路。

当然这样通过js渲染也是有些问题的,如不利于seo。所以这些像react,vue这些框架又有了一些服务端渲染的功能,在必须考虑seo的情况下,还是需要服务端渲染的。

鉴于如何选择,个人觉得前端后完全分离会是趋势。主要还是需要评估当前项目有没有必要或者当前公司有没有需要走这样的技术选型。

PHPzhong

分离后工作起来会方便一些、不然项目中沟通成本会变高

Peter_Zhu

前后端分离当然是目前的主流,但是用php渲染或者缓存页面模板有时候也是可以的,性能会比较好一些。不过建议还是前后端分离

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!