PHP エンジニアが直面する成長のボトルネック_PHP チュートリアル

WBOY
リリース: 2016-07-21 14:51:55
オリジナル
730 人が閲覧しました

Web 開発で最も広く使用されている言語の 1 つとして、PHP には多くのファンがいます。それで、あなたは優秀なプログラマーですが、自己研鑽をしているときに、どのように対処すればよいか考えたことはありますか?自分自身のボトルネックを突破して、より良く成長できるようにするには?

PHP エンジニアは成長のボトルネックに直面しています

まず、ここで言う PHP エンジニアとは、主に PHP を使用して Web システムを開発し、他の言語で働いたことがない人を指すことを明確にしましょう。私は 3 ~ 4 年の実務経験があり、通常の Web システム (数百万アクセス、1,000 レベル未満のデータ、またはビジネス ロジックが特に複雑ではないもの) を問題なく開発できます。しかし、彼らは次のように指摘します:

◆PHP以外の言語は使用しないでください。シェルスクリプトをクリックしても構いません。

◆私のPHPの習熟度はあまり高くありません(ライブラリ以外のPHPマニュアルはあまり読んだことがありません)。

◆知識ベースは比較的狭いです(需要に直面して、PHPとmysqlの使用を除けば、他のソリューションを知りません)。

◆PHPのコードはプロセス指向が中心で、オブジェクト指向の実装は複雑すぎてわかりにくいと思います。

これらの PHPer は、高パフォーマンス、高同時処理、大量のデータを必要とするプロジェクト、またはビジネス ロジックが比較的複雑である (システムが複数の分野でビジネス上の問題を解決する必要がある) プロジェクトに遭遇したときに、アイデアが不足しています。彼らは問題の本質を分析することができず、技術的な判断力も乏しく、問題に対する一時的な解決策をすぐに見つけることができますが、多くの場合、継続的な一時的な解決策の中でシステムとそれ自体が段階的に崩壊します。では、どうすればより難しいシステムに挑戦できるでしょうか?

より高い課題はどこにありますか?

私自身の経験に基づいて、誰もがまず感覚的に理解できるように、いくつかの具体的な課題をリストします。

高性能システムの課題は何ですか?

◆Webサーバーの選び方はfast-cgiモードを使うべきか?

◆リバース プロキシ サービスを使用する必要がありますか? フル メモリ キャッシュとハードディスク キャッシュを選択しますか?

◆負荷分散はアプリケーション層に基づいていますか? 高い信頼性を確保するにはどうすればよいですか?

◆最適化ツールを使用した後のPHPコードのパフォーマンスはどうですか? パフォーマンスのボトルネックはどこにありますか?

◆ユーザーアクセスの特徴は、読み取りと書き込みのどちらが多いですか?

◆データはどのように保存されますか? 書き込み速度と読み取り速度はどのくらいですか? データが増えるとアクセス速度はどのように変化しますか?

◆キャッシュをどう使うか? 障害をどう考慮するか?

高度に複雑なシステムの課題は何ですか?

◆ビジネスに該当するフィールドは 1 つですか、それとも複数ですか?

◆ビジネスルールの変更を低コストで実現できるよう、ビジネスを合理的に抽象化できるか?

◆データの一貫性と安全性は保証できますか?

◆オブジェクト指向の分析・設計手法を習得しましたか

ここに挙げた質問に肯定的に答えることができれば、技術的に建築家になる準備ができていることを意味します。まだ答えられない場合は、次の方向に強化する必要があります。

ボトルネックを改善して突破する方法

それでも答えられない場合は、次の方向に強化する必要があります。

◆使用するテクノロジーの背後にある原理と動作メカニズムを分析することで、技術的な判断力が向上し、技術的ソリューションの選択の正確性が向上します。

◆大学在学中に重要な知識、オペレーティングシステムの原理、データ構造、アルゴリズムを学びます。以前は試験のために勉強していましたが、今は自分で勉強し、その理由を自分自身に理解する必要があることを知ってください。

◆大学で習ったC言語をもう一度勉強し直す。これは、PHP 拡張機能を作成する必要がある可能性があるためだけでなく、C アプリケーションには、パフォーマンス、メモリ制御、変数ライフサイクル、データ構造、アルゴリズムを常に考慮する環境があるためでもあります。

◆複雑な問題を解決するための効果的な手法であるオブジェクト指向の分析と設計を学びます。抽象化を学びましょう。それが複雑な問題を解決する唯一の方法です。

どうやって効率的に勉強するかが大きな問題です。 「アーキテクチャ中心、ユースケース駆動、反復型開発」、この考え方を借用すると、効果的な学習方法は次のように表現できます。原理、モデル、メカニズムを中心とした、タスク駆動型の反復学習です。少し抽象的ですが、学習方法を説明するために例を挙げてみましょう。

目的: 処理パフォーマンスを向上させる方法を学びます。

反復可能駆動型タスク: IP を介して場所を検索します。これは Web アプリケーションでは一般的なタスクであり、IP データベースには約 100,000 行のレコードが含まれています。

最初のイテレーション: パフォーマンスを考慮せずに機能を実装する (PHP を通じて実装)

KEY(IP)で直接領域を検索することはできないため、データに直接置く、連想配列を通すといった単純な方法はできません。アイデアは、まずデータを並べ替えてから検索することです:

◆IPで検索するにはどうすればよいですか? 配列されたデータの場合は二分探索が最も高速です。

◆ソート方法は? もちろんライブラリ関数sortを使うこともできますが、学習中なのでクイックソートを自分で実装する必要があります。

学習目標: 並べ替えアルゴリズム、検索アルゴリズム

PHPer のデータ構造とアルゴリズムの基盤は比較的貧弱で、私は普段この分野の仕事をすることがなく、自分で学習することもないので、この分野の知識が不足しています。ただし、プログラミングによって解決される問題は、最終的にはデータ構造と、そのデータ構造上で動作するアルゴリズムに帰着します。データ構造のアルゴリズムが常に頭の中にあれば、問題に遭遇したときにその内部構造が明確に理解でき、解決策も自然に見えてきます。

2 回目の反復: データのロードと並べ替えの最適化

最初のステップを実行しても、毎回データをロードしてソートする必要があり、時間がかかりすぎるため、基本的にまだ使用できません。 解決策は、データを一度ロードして並べ替えて、各 PHP プロセスがアクセスできる場所に配置することです。それを Memcache に置くのは誰にとっても簡単な問題です。実際、memcache にはより多くのネットワーク操作も含まれるため、共有メモリ (EA およびその他のアクセラレータによってサポートされている) に配置する方が高速な方法です。 データは全体として共有メモリに保存されますか? それとも分割して保存されますか? ボトルネックを分析する方法 (xdebug) について学びます。

学習目標: PHP のパフォーマンスに対する PHP 実装構造の影響を検出、特定、最適化する方法。

3 回目の反復: PHP 拡張機能の作成

まだまだパフォーマンスは向上せず、C/C++の世界に入らなければなりませんが、これからはPHPerだけでなく、サーバーサイドのオールラウンドエンジニアになります。 C/C++ をやったことがない学生にとっては大きな挑戦です。

学習目標: C/C++ の学習、PHP 拡張機能の作成

学ぶ必要があるメカニズムと原則を決定するにはどうすればよいですか? 何を学ぶ必要があるのか​​わかりません。上記の 2 つの質問にどう答えればよいでしょうか?この技術の位置づけ、つまり、どのように行うのか(仕組み)、なぜそれができるのかを学ぶことができます。このテクノロジーの最も一般的なアプリケーションを学習タスクとしてリストし、簡単なものから難しいものまで練習します。

JavaScript を学ぶ必要がある場合、HTML と CSS についてはある程度の知覚的な知識があります。まず理解すべきことは、JavaScript は Web 分野の動的言語であり、主に Web ページの動的な対話を解決するということです。学ぶべき重要なポイントは次のとおりです:

◆JavaScriptとHTMLのやりとり(仕組み)

◆JavaScript の動的特性と他の動的言語 (言語モデル) の違いは何ですか?

完全に独学の場合は、学ぶべきポイント(仕組み、モデル、原理)を見つけて学習課題を設定する 確かに、それほど簡単ではありません。指導してくれる経験豊富な人を見つけたり、学習チームを追加したりすれば、学習の速度は確かに大幅に向上します。

最後に、皆さんに言いたいのですが、PHP はシンプルであるために使用されていますが、そのシンプルさによって私たちの成長が制限されることはありません!

http://www.bkjia.com/PHPjc/371671.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/371671.html技術記事 Web 開発で最も広く使用されている言語の 1 つとして、PHP には多くのファンがいます。それで、あなたは優れたプログラマーですが、自己研鑽をしながら、さまざまな問題に直面することについて考えたことはありますか?
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート