web-dev-qa-db-ja.com

CakephpとYii:類似点/相違点/速度?

私はCakePhpプログラマーです。 Yiiフレームワークを試してみることにしました。CakePhpがYiiとどのように似ているか、違うかを知りたいです。また、Yii =彼らが主張するようにCakePhpよりもかなり速いですか?

29
aWebDeveloper

CakeとYiiの違い

  1. Cakeにはコントローラーごとにモデルがあります。Yiiにはアクションごとに1つあります。つまり、コントローラーはYiiの特定のモデルから独立しています。
  2. Yiiでは、各アクションでビューとモデルを手動で指定する必要があります
  3. In Yii手動で指定しない限り、関連する関連レコードはフェッチされません
  4. Yii)では、モデルは、データを保存するかどうかに基づいて、アクティブレコードモデルまたはフォームモデルの2つのタイプ(つまり、拡張)にすることができます
  5. Cakephpは規則を強制しますが、yiiは柔軟性です。
5
aWebDeveloper

個人的な経験から、両方のフレームワーク、特にモデルがケーキとyiiで処理される方法にはいくつかの違いがあります。

  • Cakephpでは複合主キーを使用できません。これが私にとっての主要な取引ブレーカーです。複合主キーはYiiでサポートされています。
  • Cakephp enforcesコンベンション、yii favorsコンベンション、あなたは特定の基準に従うことを強制されませんが、強制されたコンベンションは良い方法です優れたプログラミング手法を構築し、最終的にyiiが提供する柔軟性がこのラウンドで勝ちます。
  • すぐに使用できるパフォーマンスには、yiiの利点があると思いますが、パフォーマンスチューニングと同様に、適切なキャッシュ構成を使用し、ActiveRecordパターンの使用に注意している限り、そうではありません。かなり離れている

ちなみに、私はCakePHPとYiiの両方でWebアプリの実装を主導しています。チームから得たフィードバックは、経験の浅いチームはCakePHPを好み、Yii経験豊富なチーム。それをあなたが望むものにしてください。

42
ZaQ

古い投稿ですが、経験を追加するだけです。

しばらくケーキを使っています。正確には3年。

現在Yiiは間違いなくPHPのMVCテクノロジーをリードするものです。これは他に類を見ないフレームワークですPHPフレームワークは現在比較できません。個人的に私は「グリッド」に本当に感銘を受けました...私はPHP側は常にこれを何らかの方法で欠いていたと思いました:)それは驚くほど高速で、幅広い開発者に適しています。

CakePHPの場合:フレームワークの"conventions""strictness"を主張し、おそらくしがみついているブログをたくさん読んだことがあります。

そうは言っても、私は賛成と反対です。あなたがそれをこなすと、通常ある種の主張はかなり明白に見えます。ケーキquote Forces quoteというすべてのルールは簡単に上書きできます。最も重要なのは、人々が気付かないのはなぜ規則が強制されるのか?

あなたが多くの生産圧力を持っている開発者なら、私は言うでしょうauto-magic関連するモデルデータの取得、関連するモデルデータの保存、それに基づく関係の定義など、舞台裏で実行されるケーキの- conventionsは絶対に素晴らしいです。

これらの慣習に従うことから生じる清楚さは、ここでは説明できず、経験するだけです。

また、フレームワークの速度に関する苦情を目にしたブログもたくさん読んでいます。私の経験では、あなたは本を読んでください。人々は関係の数を定義し、Cakeはデフォルトですべての関連モデルデータをフェッチします。この動作をオーバーライドして、必要なデータをフェッチするだけです。実際、バインド、モデルのバインド解除をその場で行います。 Cakeには、まさに目的のために"containable"と呼ばれる動作もあります。

ケーキを手に入れたら、生産と開発は本当に「迅速」です。

また、CakPHP 2以降、多くの変更が加えられました。これは非常に高速で、さらにスケーラブルです。

とにかく、Cakeのドキュメントは非常に貧弱だと私は本当に信じています。そして、より良いドキュメント、より現実的な例とリポジトリがあれば、それはより強力な競争相手になるでしょう。

16
Kishor Kundan

どちらのフレームワークも非常に似ていますが、私はYiiが好きです。なぜなら、高速で、モデルに遅延読み込みを使用し、何百ものヘルパー(jQueryウィジェット)、XML/YAMLを必要としない、多くの拡張機能、コンソール、 Giiコードジェネレーター、魔法のない管理インターフェース(+カスタマイズ可能、+コントロール)、アクティブなフォーラム、完全かつ美しくOOPデザイン、さらにはシステム...など。

Cakephpも非常に優れたフレームワークであり、トレーニングコースを計画しているのが好きです。

5
ls_ttt

私はそれらすべてのバッシングCakephpとは違うように頼みます。両方のフレームワークのユーザーであるため、自分が何をしているのかを知っている場合、Cakephpは非常に柔軟性があります。つまり、規則を使用するように人々に要求しますが、同じドキュメントでこれを回避する方法を説明しています。そして、これまでのところ、実際のベンチマークは提供されていないので、皆さんに恥をかかせます...

私の経験では、Yiiではなく、Cakeのパフォーマンスチューニングを行う必要があったので、どのように機能するか、またはどのように期待するかについては、まだ比較できません。それに加えて、そこにあるほとんどのベンチマークは、Cakephpや他のフレームワークをそのまま使用しているので、Cakephpのパフォーマンスは低いと思います。

4
vsecades

私はcakephpを約2年間使用しており、Yiiでの最初の作業をほぼ完了しています。 (私もZendFで1年間やりましたが、嫌いでした)Cakephpはその厳格なシステムには適していましたが、柔軟性には多くの制限がありました。 Yii実際には私が「ハックミー」と呼ぶ方法で完璧に作られています。最高の機能は、すべてのコントローラーを継承するために使用される空のコントローラークラスで1日を始めることです。しかしすぐに私は見つけてください、私は飛び込んで標準のyiiレンダリングのような特別なアプリケーションの広い範囲の関数をオーバーライドできます。ケーキでは、アプリケーションコードで多くのハックを行うことはできません。最終的にコアディレクトリに移動しますいくつかの非常に特殊なケース(コアアップデートを行う場合は非常に悪い考え)。

yiiのプラグイン/拡張機能は、cakephpと比較して非常に簡単に作成できます。

私が知るまで、cakephpはモジュールをサポートしていませんでした。私自身はモジュールファンではありませんが、最終的にアプリコードが大きくなると、別のグループに分割する必要があります。モジュールを他の人に外注することができます。

私は、cakephpコアはトラフィックの多いサイトで速度を落とすのに十分重いと信じています。 ZendFははるかに悪いです。 Yiiは、アクションが呼び出されるまでに、呼び出しスタックが小さくなります。

Cakephpt.phpはありませんが、yii apc/etcを使用してシステムで数ミリ秒を節約する)のすべてをプリコンパイルするためのyiit.php(単一ファイルのフレームワーク全体、本番環境での使用のみ)がありますファイルオープンコール。

YIIのURLルールセットとその逆アルゴリズムは、おそらくphpの他のすべてのフレームワークに勝るものはありません。 IMO yii URL設定はcakephpに比べて簡単すぎます。次に、createUrlを呼び出すと、同じ設定から正確なブラウザURLも作成され始めます。これにより、アプリ内のURLが変更されます。構成ファイルを使用します。コントローラー/モジュールを別の(サブ)ドメインに移動することを選択した場合、構成を変更するだけで、アプリコードが不注意になります。

モデルに属性ラベルやルールを設定する方法は、これらも変更できます。すべてのモデルメソッドは、get/postプロパティをサポートしています-命の恩人。その場合、関係ルールは、cakephpで可能なものよりもはるかに優れています。検証や、一部のルールの生のphpコードでさえ、柔軟性が高くなっています。

非常に柔軟なファイルパス規則もyiiに固有のものです。また、サブレイアウトを使用すると、ビューの再利用性を非常に簡単に作成できます。

1
thevikas

私はCakephpを学ぼうとしましたが、ドキュメントは広範囲にわたっていますが、その構造が貧弱です。たとえば、マニュアルのFormHelperセクションでは、フォームオプションについて説明していませんが、構文だけを説明してから、html出力を示しています。私のような初心者の場合、構文はわかりますが、収集されたフォームデータはどこに移動するのか、入力フィールドを取得する方法、フォーム入力をどこに移動するのか、どのように指示するのか、どういう意味ですか? 「フォームのコンテキストを作成する」、このコンテキストとは何か、これはどのように使用されるかなど。

これはどういう意味ですか

「ユーザーhasAndBelongsToManyグループを想定しています。コントローラーで、キャメルケースの複数形変数(この場合はグループ->グループ、またはExtraFunkyModel-> extraFunkyModels)を選択オプションで設定します。コントローラーアクションでは、次のように入力します。」.

私はCodeigniterを研究しましたが、その説明は非常に直感的でしたが、Cakephpのドキュメントは非常に見事に表示されていますが、説明はなく、リファレンスマニュアルのように読めます。私は現在Yiiを調べています。Codeigniterよりも複雑ですが、ドキュメントはCakephpよりもはるかに有益で理解しやすいものです。

0
Jason