在前端工程化的趋势下,php还有必要去渲染视图层吗?


在练习做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层能不能完全交给前端来处理呢?


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


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

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

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


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

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

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

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

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

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

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


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


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



相关阅读:
奇异的代码 之 PHP中的错误和异常
用ajax调取的图片url,图片是存在webroot/images/目录下,为什么图片不能及时加载?
kill命令如何一次杀死多个进程
求react 中使用fetch的demo
大类点击之后得到的列表用pagination 插件进行了ajax分页问题
关于正确理解javascript的同步,异步的执行,Event Loop事件循环,异步执行完如何通知主线程的demo
webpack 怎么引入semantic-ui?
Cordova做的APP里,希望点击按钮时的颜色变化更明显一些,以便更清楚地给用户提示,该怎么弄?
ipad调用UIActivityViewController时系统分享不能完全显示。
GitLab配置CAS认证,前端WEB正常. 但是做git clone等操作时报错如下
django 如何实现文章按时间归档啊
angularjs ng-bind的用法
为什么start = parseInt(spans[this.index].style.top);是undefined?
vue单页面能调到新的页面吗?
HTML 5输入框只能输入汉字、字母、数字、标点符号?正则如何写?
koa+mysql ,插入数据库数据成功,但是无法将数据返回给前台
laravel自带的users表不能被修改吗?
一般在公司开发的话,框架用的多还是原生的PHP+MYSQL用的多呢??
webpack配置react.js问题npm ERR!
如何形象地解释 “结构化数据” 与 “半结构化数据” 的区别



快速导航

Copyright © 2016 phpStudy |