検索
ホームページバックエンド開発PHPチュートリアル言語の反映が遅いのはなぜですか? 反映の重要性は何ですか?なぜ C++ にはリフレクションがないのでしょうか?

1. PHP、Java、C# にはすべてリフレクションがありますが、多くのチュートリアルではリフレクションが遅いと書かれていますが、なぜリフレクションが遅いのでしょうか?
2. 遅いのに、なぜこれらの言語はリフレクションを提供するのでしょうか? これらの言語にはリフレクションが必要ですか?
3. C++ にはリフレクションがないのはなぜですか? C++ もオブジェクト指向です

返信内容:

通常、リフレクションが遅いのではなく、リフレクションを使用するコードが特定の最適化を実行できないことが原因です...

リフレクションが遅い理由は、呼び出し時に非最適化が必要か、または言語の設計が原因である可能性があります。リフレクション API は面倒です。リフレクション呼び出しでは、パラメータのボックス化とアンボックス化、再配置、例外の再スローなどの追加の作業を追加する必要があります。

同じ言語であっても、リフレクションの速度は実装に関係します。たとえば、実行時オブジェクトのメタデータは保持され、オブジェクト構造が基本的に最適化されていない場合、現在のコンパイル時のプログラム分析の改善により、リフレクション コードの一部を最適化することもできます。

「リフレクション」に関しては、C でも実行できます。たとえば、__typeof__ はコンパイル時に変数の型を取得できますが、__typeof__ がないと一部のマクロは記述できません。 .. そして、dlsym は、C の「実行時反映」とみなすことができます。」。C++ では、テンプレートの特殊化を使用して、コンパイル時に型情報を取得することもできます。その用途については、コードを書きすぎると、「Don't」について考えることがよくあります。繰り返します。 初めて .net を学習し始めたときはいつも驚きました。 。 。なぜこれが欲しいのですか?キーブックに記載されている例は、実際にはコードにコメントを追加する属性です。 。 。私は頭がおかしい (あるいは、今までこのレベルを理解していなかったかもしれない)
それから、最近は MVC をいじっています (Web フォームは何年も前から MVC がトレンドになっていると感じており、それに追いつく必要があると感じています) ) 次に、MVCMusicStore をダウンロードして、ここを見てください。ヘッダーのモデル層は、[Required] 属性を属性に直接追加します。 。 。それで思ったのは、くそ、くそ、くそ、労使はまだ ASPX ページにさまざまな検証を書くために頑張っているんだ!
その後、この製品は MVC でのみ使用できることがわかり、不満があったので、コントロールのセットを自分で作成しました フィールドを直接結び付けます (実際には、一般的には asp.net付属のコントロールのセットには BindTo 属性が追加されています) ---なるほど、ここではリフレクションを使用する必要があります---- - ページのすべての CRUD ロジックを記述する必要はありません。BindTo 属性を取得したので、[Required] 機能を直接取得できるので、BindTo 属性を使用して各コントロールを循環します。ページが初期化されるとき次に、必須の機能があるかどうかを確認します -- ここではまだリフレクションであることがわかります -- 次に、辞書をアセンブルして、フロントエンドに Json にシリアル化し、次のように書き込みますフロントエンドが校正するための JS を使用します。これは、JS を dll に埋め込むために使用されます。これで、面倒なバインディング フィールド コードと検証コードに別れを告げることになります。

反映が遅いのは実は間違いです。あなたは彼を誰と比較していますか? 反省なしには特定のことはできないので、何かをしたいときは反省をしなければなりません。もちろん、a=b+c のようなことをすると反映が遅くなります。これはインタプリタと jit の違いと同じです。


そういえば、リフレクションって実は便利なんです。 www.gaclib.net は C++ を使用してリフレクションのセットを作成しました。リフレクションがなければ、多くの宣言型プログラミング メソッドを命令型プログラミング言語で実装することはできません。 DSL が必要です。また、元の言語構造と対話できる DSL も必要です。つまり、言語がある程度動的である必要があり、このときにリフレクションが役立ちます。 ..


C++ に関しては、これは父親の好みの問題です。

初期のコンピューターはネイティブのアセンブリ言語でプログラムされていましたが、これらの元のアーキテクチャは命令をデータとして定義し、自己変更コードを使用することでプログラムできたため、本質的に反射型でした > プログラミングが C などの高レベル言語に移行するにつれて、このリフレクション機能は消滅しました (マルウェア の外) リフレクションが組み込まれたプログラミング言語が登場するまで型システムが登場しました。 プロジェクトを実行するために javac# を個人的に使用したことのある人だけが、リフレクションの利点、特にプロジェクト フレームワークの読み込みについて知ることができます。リフレクションのパフォーマンスは一般化できません。リフレクションは非常に高速である場合もあります。たとえば、フレームワーク モジュールの読み込みは、通常、一度だけ反映されてから実行されます。交換可能なモジュールは動的にロードされます。
リフレクションなどを処理するには、仮想マシンまたは実行プラットフォームが必要です。C++ などのネイティブ バイトの場合、ランタイム型を提供できることはすでに非常に優れています。
また、オブジェクト指向はオブジェクト指向であり、リフレクションはオブジェクト指向を示す厳密な指標ではありません。
最後に、cpp は cpp と同じ方法で記述されているため、反映されたものには近づかないでください。 プログラミング言語におけるリフレクションの意味について、私が理解している範囲でのみ話します。

あなたは仕事中で、小屋から戻ってくると、机の上に「○○リーダーからすぐに探しに行くように言われました!」と書かれたメモが置いてありました。この時点で、あなたは間違いなくリーダーに向けてノンストップで走ります。

わかりました。この場面では、「リーダーの○○さんがすぐに探しに行ってほしいとのこと!」が命令文であり、あなたの「リーダーを探しに走り続ける」という行為がこの命令文の実行となります。

あなたは人間であり、高度な動物であり、内省する能力を持っています。つまり、リーダーを探しに行く途中やその後に、「○○リーダーがすぐに探しに行くように頼んだから行きました!」ということが分かります。これは勤務時間中であることはわかっているので、上司はおそらく仕事などについてあなたに何か聞きたいことがあるでしょう。つまり、: あなたは自分が何をしているのか知っています

問題は、コンピューター プログラムが一連のステートメント命令を実行した後、何を実行しているのかを認識しているかということです。それは何をしているのか知っていますか? リフレクション は、言語レベルでそのような機能を提供する試みです。コードに内省機能を持たせ、コードが何をしているのかを知らせることができます。ただし、現在の実装はまだです。とても初歩的で浅いです。 一部の実装ではリフレクションが使用されず、プログラムの書き方は美しくなく、自動ではありません。
一部の JAVA プロジェクトでは、アクション マッピングの構成が圧倒的であることが分かりました。
また、このように構成する必要のない Struts の最新機能を確認したところ (この例は間違っている可能性があります)、私は長い間 Java に触れていませんでした)、私はただ静かに泣いただけですよね?

多くの場所で、リフレクションは非常にエレガントな実装を実現するために使用されており、必要なコードは数行だけです。

アプリケーション シナリオに関して言えば、権限の割り当てが 1 つあります。モジュール、コントローラー、メソッドに基づいた詳細な権限構成。
どのようなコントローラーやメソッドがあるかを知るには、リフレクションを使用する必要があります。

もちろん、私は PHP について話しています。リフレクションにはいくつかのメリットがあるだけではありません。 たとえば、データベースには複数のフィールドを持つデータ テーブルがあり、コードには複数のメンバーを持つクラスがあります。
コード内のクラスのインスタンスをデータ テーブルに書き込むことが要件の場合、「クラスのどのメンバー値をデータ テーブルのどのフィールドに書き込むか」という要件があります。

この要件はリフレクションを使用しなくても達成できますが、不器用で非効率的で柔軟性に欠けます。言語にリフレクティブ構文がある場合、この要件の実現はシンプルかつ柔軟 (コード作成効率) かつ効率的になります。

リフレクションのパフォーマンスについては…リフレクションのパフォーマンスが良くないと思うなら、リフレクションを使用しないでください。
私の実践では、リフレクションを頻繁に使用するコード ブロックのパフォーマンスを繰り返し測定しましたが、そのコード ブロックはどのように測定しても 0 ~ 1 ミリ秒かかります (測定精度も 1 ミリ秒です)。したがって、少なくとも私のアプリケーション シナリオ (操作への応答には 0.6 ~ 1.2 秒かかります) では、リフレクションによるパフォーマンスの消費は無視できます。

最後に、決まり文句を言わせてください。システム全体を構築する前に推測するパフォーマンスのボトルネックは、実際のシステムのパフォーマンスのボトルネックではないことが多いため、最適化 (およびパフォーマンスの問題) をあまり早く検討しないでください。 データドリブンについて聞いたことがありますか
リフレクションを使用するとさらに楽しいでしょう 言語リフレクションが遅くなるのはなぜですか? リフレクションは追加されたものにすぎませんが、追加すると、追加する前よりも確実に遅くなります (少なくとも、使用しない場合は速くなりません)。

リフレクションはプログラミング手法です。リフレクションを備えた言語にはこの機能のみが組み込まれています。リフレクションを持たない言語は通常、それ自体でリフレクションを実装できます。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。Apr 17, 2025 am 12:22 AM

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHP:サーバー側のスクリプト言語の紹介PHP:サーバー側のスクリプト言語の紹介Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査しますPHPとWeb:その長期的な影響を調査しますApr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

なぜPHPを使用するのですか?利点と利点が説明されましたなぜPHPを使用するのですか?利点と利点が説明されましたApr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール