草庐IT

php - 'clean code' 的性能影响

coder 2024-04-26 原文

在我的工作场所,我们计划对我们的核心产品进行重大重构,这是一个具有多个“模块”的网络应用程序。我引用那句话是因为这是我们的主要关注点之一:模块并不是真正的模块,整个东西是整体的。该应用程序是用 PHP 编写的,带有 smarty 模板并使用 Pear 访问 MySQL 数据库。我们并不真正关心数据库独立性,但如果这不需要几个月的时间来实现就好了。

我们主要担心的是开发时间/成本呈指数级增长,因为错误在不相关的地方突然出现,并且没有可靠的通用架构来依赖以获得最常见的功能(每个模块基本上是从以前的模块复制/粘贴一个,然后适应)。

对web MVC原理有一定的了解,主要是ASP.NET MVC。我喜欢它提供的干净分离和可测试性。然而,当在本地机器上尝试这个时,应用程序比它应该的要慢得多。

好了,介绍到此为止,下面是问题: - 我应该依赖缓存模块吗?这是否消除了使用良好架构提供的大部分开销?类似 APC 的东西。

  • 申请主要是阅读。写入主要是单个值(更改记录上的单个字段)。任何擅长此的 PHP OR/M?
  • 也在寻找灵活的 MVC 框架。我知道 Zend、CakePHP,也许还有 Symfony?

棘手的部分是我们没有能够进行完全重写的奢侈。我们将不得不逐步改进当前非常困惑的代码库。这必须在编写新代码或修复错误时完成。我真的非常想做的一件事是在修复新错误之前为它编写回归测试,以防止它以后再次弹出(这种情况偶尔会发生)。

我目前正在考虑的堆栈包含:

  • 选择的 MVC 框架
  • 日志记录(log4php?)
  • 选择 OR/M(不必是动态的,代码生成也可以)
  • 选择的 IoC 容器
  • Smarty Templating,也许是抽象的,因此我们可以在需要时将其关闭。
  • 选择的操作码缓存(我们现在正在使用一个,忘了哪个,必须问系统管理员)

让我担心的要点是在 PHP 中创建干净代码的性能影响。看到它是一种与 .NET/Java 网络堆栈之类的东西相对的解析语言,为其他内联代码创建抽象(在不同文件中强制分离)可能会在另一个层面上产生新问题。


注意:如果您提出更合适的标签,请重新标记,我不确定当前的标签。

最佳答案

拥有干净的设置通常不是性能问题。大多数性能都花在了数据库或您正在与之通信的其他外部系统上。

除了这些,通常还有一两个热点可能值得优化,但为此您应该从干净的设计开始,然后使用分析器(如 XDebug 或 ZendDebugger)来识别瓶颈。

干净的软件设计比“优化”设计带来的 0.01% 的性能提升重要得多。通常,购买和运行更多硬件比担心无法维护的“优化”代码库更便宜。

关于php - 'clean code' 的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1809174/

有关php - 'clean code' 的性能影响的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  4. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  5. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  6. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  7. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  8. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  9. ruby-on-rails - Rails 中的 NoMethodError::MailersController#preview undefined method `activation_token=' for nil:NilClass - 2

    似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai

  10. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

随机推荐