ホームページ > php教程 > php手册 > PHPer が草の根だと考えられるのはなぜですか?

PHPer が草の根だと考えられるのはなぜですか?

WBOY
リリース: 2016-06-21 09:00:15
オリジナル
890 人が閲覧しました

  开篇注释:以下文字并没有非常多的技术词汇,所以只要对PHP感兴趣的人都可以看看。

  PHPer是草根吗?

  从PHP诞生之日起,PHP就开始在Web应用方面为广大的程序员服务。同时,作为针对Web开发量身定制的脚本语言,PHP一直秉承简单、开源的思想,这也使得PHP得以快速的发展,并且大力地推动Web2.0的出现与发展。但是,长期以来,PHPer(PHP Programmers)被认为是处于草根阶层的程序员,被认为是技术含量少,层次低的程序员。这点在国内尤其突出。

  记得一个技术主管说过这样一个事情。他给一个程序员分配了PHP的开发任务,没想到那个程序员居然说:“我是学Java出身的,你让我去写PHP,你这不是在贬低我吗?”。这件事情给我印象很深、触动也很大。虽然这不能代表大部分程序员的看法,但是这么认为的人应该不少。还有人说,现在如果是大型的政府项目,PHP是肯定不会被列入考虑的范围之内的。

  那么为什么PHPer会被认为是草根阶层,是因为它很简单,人人都可以学会,所以没什么难度吗?我以前也是这么认为。PHP入门很快,处理文件,数据,远程连接,网络编程都非常方便,官方也有这样的说法:PHP学习的成本很低,所以你容易去使用它。这个想法也是普遍的,甚至大部分的PHPer自己都这样认为。

  说到这里,我想大家就会想到我为什么要写这些文字。因为一年多的PHP推广工作让我了解到许许多多的使用PHP的公司的大概情况。在这些过程中我慢慢体会到其中的根本原因。这里我说是根本原因虽然是个人的看法,但是我觉得事实就是如此。

  那么为什么PHPer会被看成草根阶层,根本原因是PHPer所作的事情(通过代码实现)的绝大部分都是表现层的东西,这个熟悉PHP的人都知道。当然也会有PHP会说他用MVC结构编写的某某框架具备的如何如何的功能。但是这些还是表现层。所以只会处理表现层的程序员就被看成草根阶层了。事实上也是如此,因为这种情况下PHP确实很难构造大型的应用。

  这就找到原因了,不是的。为什么PHPer总是在负责表现层的东西呢。答案是底层的数据处理(Web应用就是数据存储和查找)我们一般不去触及!好,那么说到这里有些人可能已经想到了,那不就是数据库吗!对,就是数据库!让PHPer一直当草根的元凶就是数据库。为什么?

  因为目前流行的web架构中,前端是负载均衡系统,中间是web服务器,后面是数据库服务器。所以,大部分PHPer工作在Web服务器层面。因为数据库已经很好地为我们组织数据了。所以PHP中没有太多的算法,而且大家潜意识下也觉得不需要,更何况会影响性能。

  这种情况下,PHPer就成为了数据库使用者,他总是在操作数据库。而不是在做程序。一个最简单的PHP脚本就是,连接数据库,把数据取出来,然后用命令输出到浏览器。整个过程不超过10行代码。给人的感觉就是太简单了。没有任何技术含量。为什么了,因为数据处理部分都已经被数据库做完了。尤其是MySQL的使用!MySQL是免费的,所以大多数程序员可以自由地使用它,另外MySQL的速度够快了,所以做个PHP应用程序非常的简单。这就相当于给你枪以后你觉得没有必要学习武功一样。当然,我不是说枪没有武功好。而是说,枪的出现,小孩都可以轻松便捷地杀人了。

  我们再详细说说为什么是数据库!这里我说一个例子。我去过北京一家非常著名的网站,当时我们还有一个比较资深的PHP程序员在那说些系统架构的事情。我记得当时那个程序员问大家一个数据结构中的算法问题的时候,全场没有一个人能答得出来(包括我)。然后那个程序员就开始给大家讲些很基础的数据结构的东西了。让我一下子回想到大学时候学的数据结构课。而这些基础的数据排序、查找、传递的问题在其他高级语言(比如C)是非常普遍的。但是在PHP没有!PHPchina.com的论坛也有个板块叫PHP的数据结构和算法。这个板块的帖子也是寥寥无几。

  仔细回想下,目前网络上大家讨论的最多的是两个方面的问题。一个是PHP的类的使用(处理过程的封装),还有一个是开发框架问题。但是我们仔细分析的话,发现这些所谓的PHP中比较复杂的概念里面没有数据处理!为什么,有数据库!用一个Adodb或者PHP5的PDO就可以搞定了!真的搞定了吗?不是,这些无非是在连接数据库,没有数据处理!所以PHPer似乎就没有什么可以拿出台面上的东西。

  再说一个具体的代码问题,无级分类。这个概念我想大家都不会陌生了吧。我见过两种处理方式。第一个是地道的PHPer的处理方式,也是目前比较流行的。就是用数据库来处理。而且字段很少,只需要加个父类的字段并加以判断就行了。而且这个方法很实用。效率也高!但是这个不是数据处理的范畴了,而是数据库的查找!

  第二个是C程序员用PHP写出来的,他把所有的分类信息都从数据库取出来,然后用数据结构算法进行排列分布,然后输出。

  这里我们不对这两种方式的效率进行对比,我想大家都有各自的想法。但是我想说明一个问题,就是这两种做法的本质的区别。PHPer习惯性地用数据库来处理,而且有很巧的处理方式,效率也很高!这种方式就是数据库查询。而第二种方法是比较有特点的。他认为数据库就是存放数据的地方,具体的逻辑处理还要靠自己的逻辑。

  因此,结论是第二种方法的使用者觉得自己强些,因为数据的逻辑是他组织的!并且觉得PHPer的那种做法无非就是会查询数据库罢了。所以他认为PHPer是草根级的,只懂得操作数据库和排列页面(smarty搞搞那种)。

  说到这里,我想大家都已经回忆了不少自己平时用PHP做开发的经历了吧,是否发现大家确实都在操作数据库呢。

  那么我们来讨论下这个问题。数据库不好吗?为什么我一直用数据库处理数据都没有问题。我要说的是数据库是有问题的,而且有很大的问题!当然这里我并不是说不能用数据库,也不是在贬低数据库的性能。而是,我们没有充分认识到数据库所起到的作用。

  我的想法源起于这样一个事情,有一次一个网站的技术总监问我,为什么他们的网站那么慢,要怎么办。当时,我的MSN里Zend总部的工程师正好在线,我就问他PHP响应比较慢了,怎么办?他当时直接告诉我,数据库问题!肯定是数据库没有优化设计好。所以,我没有给那个技术总监确切的答案了,因为他们的数据库设计我们是不能涉及的。所以就给了大概的数据库优化的建议。这样的事情屡次发生,我就开始怀疑,为什么Zend总部的工程师每次都跟我说是数据库的问题呢,难道我们不能从PHP层面来解决这个问题吗?答案是不能!因为PHP目前的运行速度已经是很快了,通过Zend的性能分析也能看到一个用户的点击,PHP的运行时间只有10%不到,那PHP在干吗?它在等。等数据库的查询结果。这个方面在目前的PHP产品中有了很大的提高,那就是Caching和网页静态化两个方案。Caching可能大家会比较陌生,但是网也静态化现在连PHP产品的用户都非常清楚了。速度快、容易被搜索到等等,好处不言而喻。开玩笑地说,现在网站的主页实现网页静态化只需要硬盘足够大。J至于Caching就比较复杂些,也是大多数PHPer感到头疼的地方。甚至于有些人会用C来实现。因为Caching中的数据有效期验证、查找、提取、更新等等都是比较难处理。当然,也有人会用数据库来处理Caching问题。

  所以,当访问量激增的时候,PHP架构的网站会出现的很多问题都因数据库而起。数据库的同步问题还不算什么。关键是数据库的响应速度会有指数级的降低。这个问题我在10月23号LAMP发布会的时候问过MySQL的副总裁。他当时也没有给我比较完美的答案(这也我的意料之中),因为数据库总会有瓶颈的,除非是神仙数据库,哈哈!

ここで余談がありますが、LAMP カンファレンス中に Yahoo の技術幹部と話をしていたときに、Yahoo が MySQL か Oracle を選択する際に何を考慮しているのかと尋ねたところ、彼の答えには非常に驚きました。彼は、パフォーマンスが要件を満たしているため、ほとんどの場合 MySQL を使用するだろうと言いました。しかし、どのような場合に Oracle を選択するのでしょうか? それは、有料ユーザーのデータを保存する必要がある場合です。 Oracle は MySQL よりも安定しているのではないかと私が尋ねたところ、これは特別な考慮事項ではないとのことでした。重要なのは、Oracle を使用すると、問題が発生したときに担当者を見つけることができ、Oracle が責任を持って対応してくれるということです。しかし、MySQL を使用すると、誰に問い合わせればよいのでしょうか。

これを修正するには、データベースが全能ではないことを意味します。能力がある場合は、独自のデータベースを開発してください。 Googleもそうだと聞きました。

では、データベースについてどのように考えればよいでしょうか? 私の個人的な理解では、データベースは開発コストを削減するための単なる手段です。データベースを使用した後は、データの保存、特に並べ替えや検索について考慮する必要がないからです。しかし、これはどのような問題を引き起こすのでしょうか? ビジネスが拡大すると、データベースがボトルネックになります。これは基礎的なデータ処理であるためです。たった一度の動作が体全体に影響を及ぼします。

したがって、データベースはデータのバックアップ マシンである、というのが正しい見方だと思います。理解するには、データ ストレージの有効性を確保するだけで十分です。本来、これがデータベースの中核となる機能なのですが、ソートなどの便利な機能のせいで、データベースに処理を任せすぎてしまっています。ユーザーが PHP をクリックすると、多くのタスクがデータベースに渡され、結果がソートされてユーザーに提供されます。これはデータベースにとって不公平です! だからこそ、誰もがデータベースのパフォーマンスについて不満を言い始めたのです。

この観点に関して、別の例を挙げてみましょう。ある大手インターネット企業を訪問したことがあります (基本的に中国でインターネットにアクセスしたことのある人なら誰でも知っています)。しかし、彼らがどのように PHP を使用しているかを知りました。企業はデータベースを使用します。彼らはデータベースの外に 2 つ目のデータベースがあることを誇らしげに私に紹介しました (ここでは 2 つ目のデータベースと名付けました)。なぜ第 2 のデータベースと呼ばれるのですか? それはキャッシング システムであることがわかります。では、開発エンジニアはどのようにしてこのキャッシュ システムからデータを取得するのでしょうか? テクニカル ディレクターは、キャッシュ システムは SQL クエリ ステートメントで構成されていると誇らしげに言いました。そのときは驚きましたが、後でよく考えてみると、これが本当に必要でした。キャッシュ システムが特定のレベルに達すると、SQL クエリ ステートメントを作成してキャッシュ システムにデータを分析、処理させてキャッシュからデータを取得するのが非常に複雑になるためです。そして、代わりに、PHP が使用されている場合でも、PHP はキャッシュ システムからデータを読み取るように求められると教えてくれました。

したがって、この問題に対処できる場合は、データをデータベースに保存すると、データベースはバックアップとしてのみ機能します。次に、独自の中間層を使用してデータを処理および分析すると、90% 以上のユーザーがデータベースにアクセスせずにアクセスすることになります。これは接続プールに似ているのではないかと言う人もいるでしょう。そうです。データベースのボトルネックは解決できないため、Web サーバーとデータベースの間にバッファリングを行うための中間層を追加するしかありません。

おそらく、あなたはこう言うでしょう、Tsk、私たちはこのことをずっと前から知っていました! さて、私がここで言いたいのは、それが引き起こした 2 つの考えです:

まず、一部の言語にはすでに接続プーリング テクノロジがあり、プログラマは接続プーリングを使用して大規模なアプリケーションを簡単に構築できます。それでは、PHPer がデータベースのみを使用すると考えている場合、接続プールのみを使用すると言えるのでしょうか?

次に、PHPer が開始されたときの概念です。独自のキャッシュ システムを構築する際、データ ロジックの処理に関与したため、PHPer がデータベースのみを使用するレベルを突破したでしょうか。では、彼はまだ草の根なのでしょうか?

最後に、新世代の PHPer は草の根ですか?



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート