热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

yii2-为什么说Yii以性能著称适合开发大规模web应用呢,thinkPHP性能不如它吗?

如题:还有他们的优缺点在哪里?设计模式有何异同呢?
如题:

还有他们的优缺点在哪里?

设计模式有何异同呢?

回复内容:

如题:

还有他们的优缺点在哪里?

设计模式有何异同呢?

好的代码应该是语义化的、自解释的,配合文档注释和单元测试,甚至可以说代码本身就是文档。说真心话,thinkphp的源代码根本没心情读下去,我猜凡是读过symfony、laravel、phalcon等流行源代码的应该都没心情去读thinkphp。
我觉得thinkphp在国内的流行是一个错误,这误导了很多人,为了写这个评论,我忍受痛苦git clone https://github.com/liu21st/thinkphp.git 翻开源代码一点点表达下自己的感受。

首先index.php入口文件,判断php版本小于5.3就die是很不友好的,这干扰了自动化测试流程,正确的做法应该是用抛出异常,把选择交给应用层,而不是强制退出。第二,尽量不要define,要尽可能的少用,这些全是隐规则,应该越少越好,而且这此东西是全局的,很难保证不与其它组件冲突。同样的道理ThinkPHP/ThinkPHP.php文件里大量的define定义了大量的隐规则,对开发者不友好。

ThinkPHP/Common/functions.php定义大量的全局函数,这是很变态的做法,极易被滥用,加重耦合度,代码不应该追求少写字符,而应该追求易于直观理解,易于维护,少写那么几个字符看起来好象是节省了写代码的时间,但是一个项目很可能要不同的人长期维护的,增加阅读代码的理解成本是可恶的做法,而且现代IDE都支持自动补全,简写更没意义,纯粹浪费代码评审者和后期维护者的时间。

ThinkPHP/Conf/convention.php debug.php定义了大量的应用层的东西,这些东西不应该由框架决定而应该交给应用层,defined('THINK_PATH') or exit();也是不对的,框架里不应该出现exit() die这些东西,这太暴力了,应该抛出异常,由应用层捕获决定如何处理。

ThinkPHP/Library/Behavior/*.class.php 首先.class.php扩展名就很奇葩,fig标准存在的情况下,大家应该共同去推动一个标准的发展,而不是范NIH综合症,代码里依赖自定义的全局函数也就算了,居然也依赖$_SERVER全局函数,你怎么知道用户不会在cli模式下使用框架呢?

再以ThinkPHP/Library/Think/Cache.class.php来说,这个cache类设计很业余,低层的Cache/Driver居然没有定义接口,而实际上里面的代码大部分是按照get(),set(),rm(),clear()规范实现的,这相当于又出现了一个隐规则,关键少部分不是按这个规范实现的。根本没必要cache类本身实现单例的,更好的解决方案是有个容器负责单例或多例。

我觉得ThinkPHP越繁荣,对PHP开发者的成长伤害越大。Yii早期版本看过,当时觉得耦合度太高,不适合搞长期维护型项目。也不建议学习。象phalcon这种各个组件都是可以单独拿出来用的,相互之间是松散组合,极少隐规则,不限制开发者,开发者可以自由组合项目结构。

最后我没有发现ThinkPHP有任何单元测试的代码,搞不懂质量如何保证。

我希望大家能容忍我讲真心话,不管我说的错也好,对也好,不要觉得不开心,感情用事随便扣分就好。

我以个人的看法来看,不喜勿喷:

论性能的话,Yaf 应该是我见过的PHP框架里面最高的了,但是我一般不会去使用,一般的项目关键问题都没有出在PHP上面,如数据库等都会出现问题,所以,单纯PHP要高没有多大意义。

我最近一年使用的都是Phalcon,性能经测试其实也差不多:

另外关于性能测试,可以看看这个链接 http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&t...

它带了ORM,要说起来,更加适合各种项目的开发,我一般情况,不会相信一个普通程序员的SQL水平能比得上框架生成的。

但是,以这个效率来讲Yii和ThinkPHP,真心没法儿回答。

关于设计模式上面,因为都没怎么接触,但是对 ThinkPHP 的 ABCDEFG 这种单字母的命名还是感到特别惊讶,这丫的是干嘛?C() 这种东西真心没必要。

Yii 的风格吧,有点儿类似腾讯的海豹框架,不过没真实生产环境下用过,所以也不太熟悉。但是个人感觉,比ThinkPHP 好得多。

推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
author-avatar
瓯源鞋楦头尾自动修平机
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有