王志勇 发表于 2021年10月29日 09:16
首先要说饱受诟病的PHP性能,其实PHP的性能完全不在JSP之下,庆幸之前看到有同行在网上说过这么一句。这个圈内,很少人是同时大量做过PHP、Java、Golang这3种最为热门的语言,所以往往他们只能客观评论自己熟练的语言。我本人同时做过ASP、PHP的长期大量开发。以前做过7年的ASP编程,用ASP编写过论坛、博客、类似太平洋那样的报价平台的初步开发(历时3个月的封闭开发)、电子型号搜索项目。2009年时转到PHP,发现ASP和PHP无论是性能,还是语言的简洁度,都是天壤之别,PHP比ASP胜出很多。简言之,PHP语言既简单、性能又高。我在前年用了1天多的时间,把当时主流的PHP 5.1~PHP 7.4在Debian/Ubuntu/CentOS都测试了一遍,PHP 7.4速度约是PHP 7.3的1.9~2.1倍,PHP 7.4速度约是PHP 5.3的10倍。auiou.com博客的速度本身是一个编程的实例,这个博客由于数据库是切分的(分布式),即使文章达到1000篇、1万篇、10万篇……速度都是一样快的,现在是运行在PHP 5.3下,有几个站点运行在PHP 7.4,如cn.blogval.com。auiou.com博客现在的运行环境如下截图:
这个博客的空间是Virmach的256M美国VPS。为什么现在会运行在PHP 5.3下?主要是因为内存只有256M,安装PHP 7.4可能会内存紧张,现在速度也很快,也没有时间去折腾,所以暂时使用PHP 5.3。2019年时曾经在PHP 7.4下+香港VPS运行了10个月。
PHP的高并发环境分析
分析请见前文。PHP的瓶颈,主要是出在MySQL。如果不用MySQL,高并发的性能很有可能会很惊人。
如何快速从0开始学编程?(1)
请记住这个顺序:程序不是用来看的,而是用来写的。
因为如果出现一个算式8+3=11,只给你一个结果11,那么如何还原为8+3呢?也许是2+9呢。同理,开发时大量的思路、测试过程,是无法写在程序里的。而且思路一旦忘记,是很难还原的。
我写程序时,只记录最关键的部分,或者推导出新的算法、常用算法,那么一定会记录在程序库里。而不写开发文档,因为写开发文档,至少要比开发程序本身要多出3~5倍的时间,没有这个时间,只写少量的关键参数、关键的开发文档。
我近期写的程序实例,是2019年完成的Feedval RSS阅读器,单这个项目,历时2个月的时间从0开发到完成,可在 cn.feedval.com 按照提示安装。所有的程序成品都是这样的模块化紧凑风格,如下图,我个人觉得更易读,变量全部用$a1、$a2,$b1、$b2在大型项目里更有助于提高开发速度,因为用英语单词命名,美观是美观,但光是变量名就要想半天,长变量名输入既麻烦又容易出错,如果英文名想改,又得改很长时间。
我个人设定$e1、$e2、$e3,$e开头的全部是全局变量;$s1、$s2,$s开头的是被多个文件在同时引用的include文件的更加全局的变量,目前只用到$s1、$s2、$s3。
其余的,大部分是局部变量。模块里更局部的变量,以及循环程序的变量,也大量使用一位数的变量,如$a,$b,$c,$i,等等……
因为开发程序中总是在调试,所以这些简化的变量名,是从来不会出现冲突的。如果出现冲突,是书写有问题,需要修改。
这类成品之所以难以读懂,是因为思路都不会体现在程序里,想知道思路必须有开发文档。如果别人给我这样的程序,我也看不懂,需要花费半年~2年以上才能稍微读懂一个像Wordpress这样的作品。
但是,如果是自己开发的程序,即使10年没有再看过这个程序,也能看懂。尽管我现在41岁(对于程序开发是高龄),记忆力在大幅度减退,但还是能回忆得起来写过的每一个程序,以及大部分程序语句的作用。像上述的Feedval RSS阅读器这个作品,里面至少有2000~5000个模块。
如何快速从0开始学编程?(2)
需要再重复上述的(1)的一个核心,程序不是用来看的,而是用来写的。第2个核心:每一个特定功能,核心的语句,就是那么几个。
所以,一定要掌握核心的语句。很多厚厚的编程书,看完了还是什么都没学会。因为很多编程类的书,没有强调核心语句,里面讲的各种知识,大部分都是不太用得上的。
如何快速从0开始学编程?(3)
请理解第3个核心:程序的本质,就是命令。
如果你充分理解了这个本质,那么开发起来会更得心应手,能更理解程序,不会再觉得程序会是那么深不可测。
PHP、Java、Golang、Python、Node.js等语言,再复杂的程序,都是命令的组合。
尤其是Shell编程,最能体现这一点。比如VPS我们都是用SSH来输入Shell命令,但是当Shell命令多的时候,就可以建立.sh文件。
这些.sh文件,里面可以写入if语句、循环语句、加减运算等,所以原来的Shell命令,就成了Shell程序。
Shell程序和PHP程序的区别
因为2016年开始我计划开发VPS面板,所以必须写很多的Shell程序。PHP语言,我在2009年时用了7天的时间,从0学习到能完全上手做项目。但是,Shell程序,差不多用了1个月的时间,才初步上手。
为什么会有这样大的差别?
一是因为Shell的语法实在是比较啰嗦,PHP语言因为有花括号{}能够易读很多。不要小看这个花括号,我个人建议程序语言还是不能去掉的,现在有很多种语言都没有花括号{}。而是用if……end if,或者if……fi这样的语法,这种语法还不如用花括号{}简洁。
有人吐槽PHP有花括号{},使PHP语言不够简洁。其实,有了这个花括号,可以使程序的可读性大为提高,可读性的提高是几何级的,也许就因为有这个花括号,由于可读性的提高,能让开发速度提高到3~20倍,因为if,for这些最常用的语句,平时一般都会套3~5层以上,甚至更多,语句里套的层越多,就越难读、开发速度就越慢。
也就是别人用了3~5个月的时间,也许你15~30天就完成了。
当然,由于程序开发的工作量庞大,什么时候能够完成,是无法准确计算的。
二是因为PHP的函数丰富,语言比Shell简洁。
PHP语言可改进的地方
上述提到PHP官方语言设计的花括号{}最好不要去掉,能几何级倍数地提高可读性。但是,PHP的变量名前面的$,个人觉得PHP官方将来是完全可以去掉的。因为变量名前加$,其实是比较繁琐的,但是不得不接受这一点。
之所以有$,我觉得有可能是当初PHP官方在设计这个语言时,文本工具无法按单字查找,比如ac、ac1、ac2、ac3这4个变量,查找关键词“ac”,另外的3个关键词也会被找到。
现在有了EmEditor,查找时,把“仅搜寻单字”打上勾,就会只显示ac,并且高亮显示,如下图:
如果把“仅搜寻单字”的勾去掉,就变成了传统的文本工具,查找难度就加大,要消耗更多的时间,如下图:
因此,EmEditor的“仅搜寻单字”,是一个重要的基础功能。
记忆力减退怎么办?
程序开发需要记忆大量的信息,尤其是记住自己开发过的项目。但是,即使记忆力再差,只要是自己开发过的,是很难100%忘的,用的时候一定能够想起来一些,然后再慢慢查找,所以不用担心记忆力的问题。
程序开发,会让人的记忆力变得更差。因为时刻都在开发新的东西,而且工作量极其庞大,所以会记不住旧的东西。
更新:秒会+实战PHP程序设计(1-2):auiou.com的源代码
自由勇 2021-10-29 16:07
谢谢阅读!本文已经是正式第一期。大家都能比我做得更好。
前两三期会重点谈编程的思想,这个思想也能移植到其它语言,都是完全通用的。
后面会很快谈核心语句。
自由勇 2021-10-29 16:08
谢谢阅读!如果熟练了核心语句,基本用不到英语。英语主要用来做英文页。
核心语句其实就是那几个。
自由勇 2021-10-31 15:26
这种紧凑式的编码个人觉得还很好,和传统的回行、缩进布局相比,可读性基本一样,而且紧凑式往往可读性更好,因为那些排列在一行的语句,很多都是我之前调试好的小模块,关联度不高的地方,马上回行。
这有点类似于电路板,成品的电路板是很紧凑的。
紧凑式的编码,就像文章的文字,是一直排下去的。
传统的回行、缩进布局,就像诗歌一样,习惯性地强制回行。
如果对于习惯阅读回行代码的开发者,分析程序时,可以编写一个分析器,把;号都替换成“分号加回车符”,即;替换成;\r\n,这样程序变成了传统的回行。
分析器还需要编写一个分析所有花括号的起始位置的功能,解读程序一次大约能节省20分钟~2小时以上。
置顶的文章:
论朋友圈可以发什么?
短信验证开发的方案分享
巡回更新:2018-09-21
速度是永恒的主题
UTF-8、HTTPS原来都是浮云
https安全吗?
独立博客有必要安装https吗?
近期的主题:
夜晚靓歌(10):你没看过的《星雨心愿》
Feedval、Blogval将下线/谈理财和生存
2024.9感言
人生讨论(20):有人借钱怎么办?(2)
人生讨论(19):迄今为止最强的情感频道
数码评测(67):让小米/红米手机的反应提高1~2倍
数码评测(66):无线网卡FW150UH VS FW150UH
数码评测(65):如何快速自制CPU天梯图?
数码评测(64):2024年,你还在用VGA线吗?
人生讨论(18):6年就可以实现财务自由
人生讨论(17):为什么总是受欺负?
人生讨论(16):要钱的最新妙招
创业杂谈(17):什么项目能赢利?
人生讨论(15):有人借钱怎么办?
数码评测(63):高清切换超级神器
数码评测(62):再谈视频的尺寸
数码评测(61):近期数码采购和折腾
人生讨论(14):看穿尊重
数码评测(60):图拉丁-最佳中配工作“免费”手机
创业杂谈(16):博客何时终结?
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +