- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
情况是这样的:
我目前有一个 Web 应用程序,它使用 PHP 来提供 HTML/CSS/JS 并与 MySQL 数据库通信。完全 Vanilla 和常见。 PHP 混合了表示逻辑(HTML 生成等)和业务逻辑(应用程序广泛使用 Ajax 来发出数据请求或告诉服务器对某些内容进行更改)。
作为该系统重新设计的一部分,我将从 PHP 中删除所有表示逻辑。相反,我将使用 Ext JS 4 (基于 javascript 的窗口工具包/应用程序)连接到 web socket gateway (允许双向通信的 COMET/AJAX 替代品)在服务器上。让我们挥动魔杖一分钟,忘记 Ext JS 4 如何传送到浏览器以及它如何与 Web 套接字网关通信。
我们剩下的是一个网络套接字网关(用 Java 编写并在特定端口上持续监听网络套接字连接)和一些目前用 PHP 编写的业务逻辑/数据库交互。
此时,我看到两个选项之一:
将业务逻辑/数据库交互保留在 PHP 中,并通过从命令行调用 PHP 或让 PHP/Apache 仅在不同端口上监听来自 Web 套接字网关的通信来执行它。
编写一个新的 Java 或 C++ 应用程序,该应用程序将持久并在特定端口上监听来自网络套接字网关的通信。业务逻辑/数据库集成用 Java 或 C++ 代码重新编写,并且是此应用程序的一部分。
用 Java 或 C++ 重写是否会比一遍又一遍地调用 PHP 提供更好的性能? (PHP 代码写得非常干净:使用 CodeIgniter 和 Doctrine 等包面向对象)。
性能优势是否会超过重写所有业务逻辑的麻烦?显然取决于许多因素,例如代码量,但您的直觉是什么?
如果它可能会影响您的想法/反馈,您应该知道 Web 套接字网关 (Kaazing) 支持 JMS、Stomp、AMQP、XMPP 或您自己构建的自定义内容。
如果我可以提供任何其他信息来帮助您回答问题,请告诉我。
谢谢!
最佳答案
我知道我在这里提到的很多解决方案都是“丑陋的”,但您听起来像是一个想要获得结果并进行重构的人,所以我希望没关系。
首先使用简单的方法(如果我理解正确的话,使用 PHP)。然后运行一个真实的压力测试。由于您正在进行 PHP 调用,只需创建一个现实的序列(登录、更改此、执行那个、注销)并运行您认为现实的次数。 100? 10000?这取决于您对这件事情的预期压力有多大,并且仍然是预成型的。
这一步比听起来容易。不要想“终极测试框架”,想一想 20 行 python 脚本,它运行任意多的线程,执行几行会让你的应用程序忙碌。如果您花费的时间超过 40 分钟,请停下来并简化。您花费的时间将是值得的。
如果 CPU 达到 100 或您用完了某些资源,那么也许是重写的时候了,或者您可以猜出什么花费的时间最长并用 C 编写。如果您使用 C/C++ 并且您对它不是 100% 满意,请避免重大重写,因为它是一种危险的语言,有很多引入错误的机会。 如果适合您的应用程序,甚至可以从您拥有的 PHP 调用编译后的代码。
我曾经编写过服务器端 HTML 生成 C 代码。它不是完成这项工作的正确工具。 PHP 可能有点笨拙,但它可以快速完成工作。我会避免优化,除非/直到它是实际需要。
祝你好运,别忘了告诉我们进展如何!
编辑:如果您确实寻求混合语言解决方案,请不要忘记在之后清理它!标准化您快速执行的操作和您在 PHP 中执行的操作,以通用格式执行,也许写一个简短的自述文件。同样,这 15 分钟可以为您或下一个人节省几天时间和很多头发。
关于java - 严格的服务器端处理(无网络浏览器交互): is Java or PHP better for this scenario?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6361491/
我有以下代码: String text = "[\"Scenario 1\", \"Scenario 2\"]" 我需要将 "text" 转换为 Array。我知道我可以替换 [ ] "并执行 spl
我知道 here 中的场景和场景大纲之间的区别。 Scenario states 以更抽象的方式测试的一般点。同时,scenario outline通过几个示例来帮助执行场景。 所以,我们通常会写fe
我在 Cucumber 中有我的特征文件,我正在使用 Given, When, Then 语法 (Gherkin) 在其中编写我的场景,并在步骤定义文件中有相应的步骤。我有一个场景,我正在检查特定数据
我正在尝试运行一些测试作为学习 cucumber 的一部分。但我得到的结果是 0 个场景。在这里,我添加了我编写的代码: 登录功能和- Feature: Application Login S S
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个像这样的 XML
我一直在尝试使用 Calabash 来测试一些简单的 iOS 应用程序。我能够在模拟器上运行该应用程序,并且所有步骤都运行良好。现在我想在 iOS 设备上测试它,但我遇到了一些问题。我用所有必要的信息
我有以下 MySQL 实例以及复制设置: S1 -----> (M1 M2),其中: M1 - M2 是一个多主复制设置, S1 - 复制在主 M1 上完成的写入的从站。 现在,我正在尝试使用 ch
我正在使用 Specflow 编写一套模拟月薪的场景,验证每个月的计算付款以及最后的年终数据。 每个月的结果都是累加的,所以后面的每一个场景都依赖于上个月的加减。支付计算通过第三方工具写入数据库,因此
有两个需要的功能:注册时设置密码和更改密码,如果用户忘记了。用户注册时,密码长度必须至少为4个字符;当更改通过时 - 至少 5 个字符。 View 对于注册和更改通行证很常见。显然,还存在 2 个操作
正如主题所述,我很难想象在现实生活中的示例中何时何地使用可恢复异常,以及我们可以通过使用它们获得哪些有效优势。 我能想象的是,一个子系统已连接,比方说通过 RFC 连接到一个 session ,该 s
我正在设计一个游戏,其中一个角色有很多元素,而这些元素可以有多种类型。有一个角色表,以及十二个按类型(例如武器、盔甲和各种其他项目类型)分割的可能项目的不同表。 我想制作一个表来保存这些项目类型的实例
我正在开发一个 Windows 8 Metro 风格的应用程序,在大学的学术项目中使用开发者预览版。我们必须使用 MVVM 模式。 在主页中,我们有一个带有按钮的 Metro 风格主菜单。根据 MVV
目前,我正在使用BDD进行项目,其中涉及一些导入语句,例如 导入 cucumber .api。场景; 但是我找不到合适的依赖项 目前我有依赖 compile 'commons-lang:commons
考虑以下因素: @Given("^this stuff:$") public void this_stuff(List stuffList) throws Throwable { stuffL
我正在寻找如何实现这个场景:我有函数内部的逻辑代码,现在我希望能够在单独的线程中执行此功能。现在我拥有的是这个 .. 的原始实现我简单地初始化线程,在它的启动/运行方法中我保留了函数逻辑。我怎样才能让
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我有一个相当流行的场景,其中有一个包含进度条和 ListView 的 fragment 。我想在使用 Retrofit 获取数据后填充 ListView。现在,一旦响应返回,就需要使进度条不可见。 存
回答问题前请引用以下程序。在评论中解释了代码。 所以我的问题是赋值运算符重载如何处理 new() 分配内存失败的情况。 例如 Obj1 持有字符串 "GeeksQuiz"。将 Obj2 分配给 Obj
在下面的代码中,我只是想看看我是否能够从每个线程将一个元素插入到数组中。它按预期工作。但后来我想知道,在什么情况下这里会出现竞争条件。我真的需要 volatile 还是信号量?我尝试删除信号量和 vo
我是一名优秀的程序员,十分优秀!