8

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

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

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

现在我的问题是.. 对于一个相对复杂的 web 应用程序,我应该使用像 Cake PHP 这样的框架吗?

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

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

与硬编码相比,使用框架有什么优势?学习一个框架不就像学习一门新的编程语言吗?

4

3 回答 3

14

最近我和 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 中不起作用。CakePHP 中的所有函数都按照他们的食谱中的说明工作,因此请仔细阅读。有些没有很好地解释或详细说明(这就是为什么它不适合初学者),但问一下也无妨!有时必须以正确的顺序使用某些功能才能工作,否则您的应用程序将崩溃或不会返回所需的结果。记住模型以及不同的类和函数是如何工作的!

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

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

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

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

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

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

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

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

希望这可以帮助某人改善他们的开发时间!

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

资料来源:bit.ly/OX3UTo

于 2012-09-18T17:51:20.187 回答
12

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

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

于 2012-09-18T11:28:13.037 回答
0

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

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

软件包很好,因为它们已经准备好开箱即用,并且通常有许多插件可以安装,如果香草版本没有你需要的一切,你可以安装它来添加功能。缺点是通常很难让像 WordPress 或任何其他 CMS 之类的东西完全按照您的意愿工作,即使使用插件,也需要您在后台使用代码。

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

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

于 2012-09-18T11:37:11.880 回答