编写傻瓜式应用程序与编写性能

时间:2010-01-06 23:35:02

标签: performance insight

我偏向于编写傻瓜式应用程序。例如,使用PHP站点,我使用JS验证来自客户端的所有输入。在服务器端,我再次验证。在两边,我都会对空虚和其他模式(电子邮件,电话,网址,号码等)进行验证。然后我删除恶意标签或字符,修剪它们(服务器端)。后来我将输入转换为所需的格式/数据类型(string,int,float等)。如果库仅用于服务器端,我甚至会给开发人员带来优雅降级的机会,并容纳对最差输入的容忍度并将其标准化为可接受的输入(我已经预定义了可接受的一组)。

现在我正在读一个半年前写的图书馆。我想知道开发人员是如此邪恶还是缺乏智商让我做了如此多的优雅退化,找到一切可能的机会让这些家伙变得正确,即使他们提供了糟糕的输入,严重损害了性能。或者我应该做最少的检查,并期望开发人员能够并且故意提供适当的输入?我对最终用户没有希望,但是我应该更多地信任开发人员并为他们提供更好的应用程序/库吗?

5 个答案:

答案 0 :(得分:6)

通用策略是在服务器上验证从客户端发送的任何内容,因为您无法完全确定您的客户端是否真的发送了它。您不希望“更多地信任开发人员”,并且在此过程中发现您“更信任您网站的黑客”。

自动修复无效输入可能与祝福同样重要 - 您实际上已承诺接受无效输入作为协议的有效部分(即,在将来的版本中,如果您进行更改以破坏您正在更正的无效输入,则它不再向后兼容已编写的客户端代码)。在极端情况下,你可能会把自己画成一个角落。此外,无效调用往往会传播到新代码 - 人们通常会复制并粘贴示例代码,然后对其进行修改以满足其需求。如果他们复制了你在服务器上纠正的错误代码,你可能会发现你开始按比例增加越来越多的不良数据,并且让那些认为“看起来不应该是这样的新程序员感到困惑”是对的,但这是每个人都在使用的例子 - 也许我毕竟不理解这一点。“

答案 1 :(得分:3)

永远不要期望开发人员的勤奋。如果可以的话,请始终验证代码中的任何输入,特别是当它遇到网络时。

答案 2 :(得分:2)

最终用户(无论他们是使用您的工具的程序员,还是使用您的应用程序的非程序员),输入错误的东西都不一定是愚蠢或邪恶的。作为程序员,我们经常对什么是错误的假设做出错误的假设。他们很明显。

这是第一件事,它本身就是全面验证的理由。但是验证与猜测它们所输入的内容是什么不同,并且从错误中推断出正确的输入 - 除非推理规则也为用户所熟知(例如Word的自动更正)。

但是你寻求的这种表现是什么?没有任何客户端(或服务器端)的验证,运行时间比第二个左右,这是一个可接受的响应时间。

验证并确保它不会作为第一优先级中断。然后担心让它足够聪明地知道(可靠)他们的意思。在那之后,担心它有多快。在现实世界中,语法验证不会对用户输入占用总时间的大部分内容产生可测量的差异。

答案 3 :(得分:1)

微软错误地相信程序员在Windows 3.1和Windows 95的日子里做正确的事情。你只需要read few posts来自Raymond Chen看看那条道路最终会走向何方。

(P.S。这不是对微软的挖掘 - 它是关于程序员如何滥用更自由的Win16,无论是故意还是无知)的事实陈述。

答案 4 :(得分:1)

我认为你偏向于防范傻瓜的应用程序是正确的。我不认为这会降低性能,足以引起人们的极大关注。相反,我会分别从性能分析或我最喜欢的方法stackshots开始解决性能问题。必须有办法用PHP获取这些。