博主十年码农,资深北漂,大厂小厂兜兜转转,阅项目无数,曾在入行之初对 .net嗤之以鼻,对java 不屑一顾,却对“PHP是世界上最好的语言”深信不疑,并誓言致死保卫PHP的荣耀和地位。然而,随着项目经验的增多,学习的深入,慢慢的认识到PHP的有些短板和劣势。
你们闭嘴,PHP是世界上最好的语言
然则,做为一名Phper转语言真的是大势所趋么?继续在php行业深耕,把技术做专做精,不转行不行?相信非常多的phper都面临着跟自己同样的徘徊,今天,博主就站在一个普通研发者的方向聊一聊:博主在运用PHP的感受和体会。
PHP诞生于1994年,是由于Rasmus Lerdorf创建的一个简单的个人工具集。在早期,PHP的重点用途是与数据库进行交互,并生成动态的HTML内容。这使得研发人员能够按照用户的请求动态地生成网页内容。这种能力使得PHP作为一种流行的选取,用于构建动态网站和Web应用程序。
PHP是一种弱类型的动态语言,与Java等强类型静态语言相比,这种弱类型语言特性,能够使研发人员在研发过程中随心所欲,不必过度关注变量的类型转换,研发人员无需在变量定义时表示声明。在与数据库交互上,想用构造器就用构造器,想直接写sql 就能够直接在代码中构造sql,只要做好安全防护,不必要写海量冗余的与数据库字段一一对应的实体类。正是这种灵活性,使得研发人员能够快速测试和调节代码规律,从而加速了研发速度和迭代过程,PHP的学习曲线相对较低,初学者亦能够快速的上手。在国内互联网高速发展的那几年,时间便是金钱,PHP正是在这般的背景下风头一时无两。博主亦是在那几年入的坑。
坑深似海
PHP生态庞大而混乱,国内外框架林林总总,博主用过的就有:Thinkphp,Ci,Yii,Yaf等,在无composer的年代,各个框架标准不一,互相之间不兼容。想必初期的Phper 都面临过这般的囧境,在第三方网站上找到的好用的工具包,拿到自己项目中运用时,为了符合自己项目的自动加载规则,改代码改到吐,还得面对有些莫名其妙的bug,线上运用更加是得加倍的小心小心,有时为了安全起见不得不放弃而自己从头造轮子。
直到Composer和PSR一系列标准的显现,才把PHP从野蛮发展的时代带到了现代文明的时代。Laravel框架—一个为web艺术家创造的框架,一经面世就受到了广大Phper的热烈欢迎,以其简洁、优雅的语法、强大的功能和活跃的社区支持作为了PHP研发中的首选框架之一。同期,亦引得像Thinkphp这般的国内框家的争相模仿。但不得不承认的是,PHP框架的非常多设计思想都借鉴了其他语言。Laravel框架借鉴了java的spring框架引入了依赖注入和掌控反转概念,供给了容器和服务供给者来管理对象和依赖关系。尽管Laravel框架在研发速度和研发效率方面供给了非常多优良,但与有些更轻量级的框架相比,它的过度臃肿和性能消耗始终广受诟病。PHP在性能上的劣势,归根结底还是PHP语言本身设计上的缺陷。
PHP因web而生,亦被web所累,似乎在诞生之初就无干其他事情的基因。
现如今程序语言百家争鸣,各个语言都在区别的行业有所建树,PHP到日前为止还是以研发b/s架构的web为主。在当下的移动互联网时代,互联网流量呈指数型增多,大流量高并发网站是当下主流,PHP语言本身在研发大流量网站上天然不具备优良。
PHP本身并无直接处理底层网络连接的能力。它依赖于Web服务器来接收请求和发送响应。Web服务器负责与客户端创立和管理网络连接,并将请求传递给PHP解释器(FastCGI或PHP-FPM)。PHP解释器只负责处理业务规律和生成响应,不直接与客户端进行网络通信。传统的PHP进程模型一般是每请求一个进程,这引起在高并发状况下需要频繁创建和销毁进程,消耗海量系统资源和时间。这种模型针对处理海量并发请求的性能较差。且PHP进程之间不共享状态,每一个请求都是独立的。这寓意着没法直接共享内存或数据结构,引起在处理海量并发请求时难以共享和管理数据,增多了研发繁杂度。传统的PHP进程模型是IO阻塞的,当一个请求在执行数据库查找、文件读写等阻塞IO操作时,全部进程都会被阻塞,没法同期处理其他请求。这会引起在高并发环境下性能下降。
头疼
虽然,此刻PHP亦诞生了像swoole这般的高性能,非阻塞IO的扩展,然则想要运用Swoole,需要重新编译PHP,针对已然运行数年非容器化安排的老项目,升级起来便是劫难。Swoole的协程亦借鉴了Golang 的协程,就连起步协程的go函数都同样,倘若项目真的需要高并发以及网络编程,博主意见直接上Golang,毕竟Golang这门语言天生自带高并发。况且,万物上云的时代,Go便是为了云原生而生,更加是诞生了像 Docker、Kubernetes、Etcd、InfluxDB这般的神级项目。而一样的,在容器化微服务时代,Java的生态要比PHP完善的多,Springboot以及Spring cloud 使Java研发微服务变得容易,国内大厂阿里巴巴的Spring cloud 整家桶更加是锦上添花。这些都是是PHP所不可比的。
总之,PHP好似始终在模仿,而从来都无超越别人。Composer在某种程度上亦是受到了其他包管理工具的启发,是软件研发方式和程序运行规律变革大背景下的顺势而为,仿佛无一件东西是起源于PHP发扬于PHP。国内越来越多的大厂技术架构亦在慢慢的剥离PHP,向其他语言转型。在求职市场上,PHP的表现亦越来越差强人意,况且在国内如此内卷的大环境下,35岁的年龄是你想甩亦甩不掉的魔咒。你不改变就寓意着被优化和淘汰,持续学习是每一个程序员的宿命,亦是每一个程序员保持职业寿命的重要手段。
因此改变从什么时候都不晚,让咱们一块行动起来吧。接下来博主会分享在学习其他语言的过程中遇到的问题和学习心得,经过搜索资料、阅读书籍整理成文案,分享给大众。
学无止境
|