【问题标题】:PHP Framework or not (Cake PHP)PHP 框架与否(Cake PHP)
【发布时间】:2012-09-10 15:51:39
【问题描述】:

在大学时,我的最后一年项目是一个基于 MVC 的 c# Web 应用程序。

我的 PHP 不强,我希望提高我的 PHP 编程技能,并希望使用 PHP mysql 构建一个 Web 应用程序。

现在我为什么提到 ASP.NET MVC???好吧,因为我非常喜欢开发环境、编程的 OOP 特性以及“正确”编程的能力。我也喜欢 MVC 编程方法。

现在我的问题是..对于一个相对复杂的web应用,我应该使用Cake PHP之类的框架吗?

我的特定 Web 应用程序将执行以下操作:报价引擎、XML、RSS 提要、用户帐户、购物篮、商店报价供以后使用、查看以前的交易、在线商店管理等...

我要构建的网站每天可以收到多达 4000 次点击,并将集成到一个 wordpress 插件中。

与硬编码相比,使用框架有哪些优势?学习框架不像学习新的编程语言吗?

【问题讨论】:

  • 使用框架可能会为您节省大量时间。这些框架中包含许多常用功能,因此无需重新编码。另一个优点是这些框架通常都经过了很好的测试,因此如果您使用框架,那么您不太可能在代码中引入错误。
  • 你要实现的是一个网店,对吧?
  • Symfony 2 是现在最好的方法。无法与任何其他 PHP 框架进行比较。 CakePHP 很老了,它是对 Rails 的严重抄袭,并且没有经过专业公司的安全审计。
  • 在 wordpress 插件中使用框架不是一个好主意。既然要使用框架,就不需要wordpress。
  • @soju - 点,但是...网络应用程序的主要目的是提供人们将使用的服务。问题是如果他们没有听说所提供的服务,没有人会使用 Web 应用程序。他们如何得知所提供的服务?通过谷歌,它确实喜欢 wordpress。所以我的下一个问题... 1. 使用框架构建一个 web 应用程序,然后在单独的文件夹中附加一个 wordpress 博客,然后将 web 应用程序设置为看起来像 wordpress 模板?或 2. 使用一个插件构建一个 wordpress 网站,该插件完全符合我的需要并且样式已经正确?

标签: php mysql wordpress cakephp pdo


【解决方案1】:

作为一个在大约十几个 php 框架方面有经验并自我评估为精通几个(包括蛋糕)的人,我建议你查看Yii Framework。它轻量级、高效、编写良好、支持大量功能、拥有庞大而友好的社区,而且无论如何都比 CakePHP imho 更好。

就每天 4000 次点击而言,这基本上不算什么。如果您编写优化良好的应用程序(处理慢查询,相应地优化数据库,最终将大流量内容移动到 CDN),在一个不错的服务器上,Web 应用程序可能会花费很多倍的时间。

【讨论】:

  • +1 对于 Yiiframework。我相信你会喜欢 Gravy :-)。它是高度易扩展的。它支持许多功能,例如用于创建模型、控制器等的 Gii 工具。我还建议您检查一下。当你知道你可以用它取得多大成就时,我会让你大吃一惊。
  • +1。优点:轻便、快速、活跃记录...缺点:文档不多,仍在等待 v2
  • 想知道为什么没有人谈论CodeIgniter。我没有使用除 CodeIgniter 之外的任何其他框架,所以我真的不打算将它与其他框架进行比较。但恕我直言,它只是提供了我开发 Web 项目所需的一切。
【解决方案2】:

首先,像 WordPress 这样的 CMS 软件包和像 CakePHP 这样的 MVC 框架是有区别的。 WordPress 本身就是成熟的软件。框架就是这样:提供一般应用程序结构的代码(即处理传入请求的方式、目录结构,可能是用于处理数据的 ORM 等),您需要在其上编写代码。

框架很好,因为它们没有完全形成。他们为您处理所有繁琐的低级任务,并允许您编写代码来完成stuff。缺点是需要学习特定框架为您提供的所有内容。

软件包很好,因为它们可以开箱即用,并且通常有许多插件可以安装,以在原版版本没有您需要的一切时添加功能。缺点是通常很难让像 WordPress 或任何其他 CMS 之类的东西完全按照你想要的方式工作,即使是使用插件,也需要你在后台使用代码。 p>

由您自己决定什么适合您的需求。

也就是说,如果您希望使用可以让您体验企业级框架的东西,请查看Symfony2Zend FrameworkYii 也是一个中肯的建议。

【讨论】:

    【解决方案3】:

    最近我和 Cake 一起工作,并没有给我留下太深刻的印象。这不是你最好的选择。根据建议,您可以尝试 Yii 框架。它写得很好。关于 CakePHP 我认为我最近写的评论应该详细回答你所有的问题:

    快速而简短 - 视情况而定!

    答案很长……

    如果您需要快速的 Web 开发过程,那么可以使用框架。

    如果您需要快速执行的网站,并且您期望有大量数据库调用和复杂的关系数据库查询的大负载,那么答案是否定的!!!

    很多人对不同的框架印象深刻,但他们实际上甚至不知道这些框架的代码是做什么的......并且为了证明我不只是点击键盘,因为我不'不喜欢某些框架,或者我只是一个框架仇恨者,我会给你一些关于表现不错的 CakePHP 的事实! :)

    我喜欢测试和崩溃网络应用。通常这会让我很开心……这就是我的工作!这就是我喜欢它的原因!

    关于我们蛋糕的烤箱的一些信息

    我的个人环境:

    本地网络服务器: 四核第二代 i7-2730QM, 16GB 1333MHz, 7500rpm硬盘没那么重要..., 默认 Apache 2.2, PHP 5.3, MySQL 5,正确索引的数据库。

    生产: 专用刀片服务器 *可扩展的云 - 顶级供应商。 Nginx, PHP 5.3, MySQL 5, 缓存服务器

    *只有原始 PHP 的网站在毫秒或纳秒内加载。

    仅供参考,我的 CakePHP 网站有 40 多个模型和非常复杂的关系。索引 MySQL 数据库表。在 Firefox 中使用最新的 Fiddler 2 作为基准工具。

    我最近正在使用 CakePHP 构建企业网站。我最近能够在我的所有环境中进行测试,仅从默认 CakePHP 安装的基本默认生成页面开始。我本地 Web 服务器上的负载是 3.9 秒,生产 4.5 秒,这只是 Cake 安装后的默认页面?!

    结果是在调整蛋糕之前(假设烘烤第一个蛋糕的人知道如何正确处理配料并假设应用程序运行速度很快!我对此表示怀疑。)!

    大师调整:

    以下是对我有用并经过测试的方法: 缓存:当前的 CakePHP 2.1 支持 File、ApcCache、WinCache、XCacheEngine、MemcacheEngine 和 RedisEngine。无论您选择哪一个,大约的速度增加都是从 100% 到 180%。 (我们不使用 Cake 的缓存选项,我们运行我们自己的缓存服务器)在我们的例子中是 220%! 将 Debug 设置为 0 - 运行 Cake 引擎需要生成 2 个缓存文件夹。第一个是 /tmp/cache/persistent - 这里有两个不同的文件供 Cake 在运行应用程序时使用。

    减慢 Cake 生成速度的是 cake_core_file_map。该文件在您的应用程序中存储各种类。为了构建文件,Cake 会在目录树中进行逻辑且耗时的搜索,以寻找正确的文件。

    第二个缓存文件夹是 /tmp/cache/models 这个文件夹将包含您的系统包含表架构的每个模型的所有文件。

    Debug 为 0 有什么区别?当 Debug 为 1 或更大时,缓存生命周期为 10 秒。当 Debug 设置为 0 时,缓存寿命为 999 天。烘烤蛋糕的大致速度增加是从 80% 到 100%。 持久模型 - 打开“var $persistModel = true” 将为控制器中包含的每个模型在 /tmp/cache/persistent 中生成两个新文件。 一个是对象的缓存,另一个是 ClassRegistry 中模型的缓存。 此缓存只能保存在文件系统上。大约。速度从 0% 增加到 200%。取决于您的应用和模型的数量。

    其他提示和技巧: 避免使用 $uses,因为会产生额外的循环并命中 ClassRegistry。这通常是错误的! 默认情况下 cookie 是加密的,而 cypher crypt 方法非常慢。如果您不存储任何敏感数据,请关闭加密。性能提升 0% 到 15%。 无论如何使用 GZIP 压缩(将压缩输出高达 90%)! 如果您使用任何框架,请使用使用 PHP 5+ 构建的版本!!! 关于 CakePHP 的文档比几年前提供的文档要好得多。使 CakePHP 变慢的主要原因是开发人员的代码使用不当。但是如果你真的不知道 Cake 是如何工作的,开发应用程序并不容易。

    我已经阅读了很多关于某些功能在 Cake 中不起作用的 cmets。 CakePHP 中的所有函数都按照他们的食谱中的说明工作,因此请仔细阅读。有些没有很好地解释或详细说明(这就是为什么它不适合初学者),但问一下也无妨!有时必须以正确的顺序使用某些功能才能工作,否则您的应用程序将崩溃或不会返回所需的结果。牢记模型以及不同类和函数的工作原理!

    似乎人们有时编写此代码也不知道他们在说什么。例如,使用 Cake 的数组排序功能而不是 MySQL 的排序功能从数据库中排序数组,只是因为它很酷?严重地?这是写在 Cake 的文档中的。

    哦,说到数据库......我们正在使用 ADODB 和 Cake,这也让事情变得有点慢。但是 ADODB 讨论是针对另一篇文章的。只是另一个速度牺牲,但我们始终致力于跨平台兼容性!

    整个 Cake 使用大量数组并生成并依赖于大量复杂模型。我发现的其他一些错误是在代码中使用比另一个更慢的函数和方法。但我很清楚,找出别人的错误比找出自己的错误更容易!

    谈到时间开发,在使用 CakePHP 进行繁重的开发过程中,您可能会遇到一些不容易做到的事情,最终您可能会花费大量时间来寻找解决方法。

    所以总的来说,如果我有一个非常复杂的项目,我通常会做,但我无法轻松找到或构建所需的功能来完成 Cake 中的复杂工作,或者浪费几天时间在墙上摸索,那么我不会'不知道烤蛋糕是否值得!调整 Cake 后,速度接近我们其他应用程序的速度。但是经过几天的负载测试,Web 应用程序似乎在支撑着,但仍然在几千名访问者的压力下弯曲。在超过 7.5K 独立访问者之后,我预计很快就会出现超载!

    我会说 Cake 适合高级或中级开发人员。如果我刚刚开始我的 Web 开发生涯,我不会使用 Cake。对于中小型项目,它很好或用于建立管理委员会(太棒了!)。对于具有严重流量负载的大型项目,除非您想在服务器上花费大量资金来支持您的应用程序,否则我不会使用任何框架,而只是使用原始 PHP(可能是 Smarty - 它是为性能而设计的)!请记住,硬件和软件会不断更新和升级,您的应用程序也依赖于此。想象一下基于框架的非常复杂的大型应用程序的迁移或调试 - 软件版本控制、硬件升级等......考虑风险因素和应用程序的实际支持!

    对于大型项目,我会远离 Wordpress、Joomla、Drupal 等开源平台...构建可扩展且编写良好的应用程序的最佳方式是自己构建它!这样你就知道背后是什么了!记住! - 压缩、缓存、尽可能在数据库中存储、优化、在网页设计中使用更少的图像,避免复杂的 URL 重写。并再次优化!浏览您的服务器访问和错误日​​志并再次优化! :) 当您开始达到 4 位数及以上的访问者数量时,您所做的每一次优化和加速都会给您带来回报。

    在我超过 14 年的 Web 开发经验中,我从错误中吸取了教训,我知道何时何地需要一个框架。与犯错和学习相比,花一点时间阅读和项目规划时间将为您节省大量时间和金钱。时间就是金钱!

    希望这可以帮助某人缩短开发时间!

    我将继续进行测试和基准测试,稍后在此处发布更新!

    来源:bit.ly/OX3UTo

    【讨论】:

    • 非常好,内容丰富,有点长,请添加一些新的行更正器,以便阅读。谢谢顺便说一句
    • +1 ,有很多信息,但是你的帖子看起来像一些神秘的冗长文章,稍微格式化一下就会很棒:)
    • 谢谢!建议的更改已被接受,我进行了更新。
    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2010-11-27
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多