当过早的优化有意义时

当过早的优化有意义时

我们都被告知不要过早地优化代码。 无论您是为企业而建立还是试图获得第一个MVP,您都不应花太多时间来调整代码以获取边际效率。 正如Donald Knuth在1974年的著作《计算机编程作为一门艺术》中所描述的那样, “令人担忧的是,它们程序中非关键部分的速度,而这些有效的尝试实际上会产生强烈的负面影响……。” 但是,我们如何确定哪些因素会进一步对生产线产生负面影响呢? 在本文中,我将详细说明我在最新的SaaS项目Novelty( 为Etsy卖家开发的社交媒体营销平台)中做出的一个小决定 决定对抗过早的优化。 当我谈到优化时,我的意思是在将产品推向市场的商业环境中,而不是算法上的性能提升。

“真正的问题是程序员花了太多时间来担心在错误的地方和错误的时间效率; 过早的优化是编程中所有邪恶(或至少是大多数邪恶)的根源。”

—计算机编程艺术(1974)唐纳德·克努斯

前几天,Product Hunt的Twitter帐户分享了这个模因,这让我发笑。

当过早的优化有意义时

我咯咯笑,因为斗争是真实的! 很多时候,我们开始编码时并未考虑要构建的内容。 通常没关系! 希望在坐下来进行黑客攻击之前,已经花了几个周期用线框,流程图等记录和设计我们的产品。 现在只是实施的时候了。 但是,开发人员通常需要考虑效率,并且时常为时已晚。

开发人员需要进行某些优化工作,例如,如果要构建Web应用程序,则应考虑尽早优化服务器端缓存。

假设您正在构建银行应用程序。 当您从服务器请求帐户余额时,将进行数据库查询。 然后应将该结果序列化并存储在数据库缓存中,例如Redis 下次用户需要访问其帐户余额时,您可以快速“获取(id)”此数据。 仅当发生存款或取款时,缓存才是无效的。 您甚至可以在发生存款或取款时预先填充此缓存。 他们称此为“温暖”缓存。 这里的想法是这种类型的优化将极大地影响用户的体验,从而使外观看起来活泼。 这就是用户的需求。 这就是您的应用程序所需要的,因此有必要尽快设置数据库缓存。

第二个不太令人兴奋的例子是优化全局资源。

建立我的新颖性MVP时,我不得不偷工减料才能迅速进入市场。 我错过了一些明显的事情,而我故意遗漏了其他一些事情。 这是我用ReactJS编写的第一个Web应用程序,关于React处理全局资源的方式有些困惑,但是我将其留给其他作者撰写。 我在应用程序中使用了Facebook的JavaScript API,客户端需要访问应用程序ID。 我最初使用一个Facebook ID,当我部署到产品中并需要另一个“测试” ID时,这个ID很快就变成了两个。 Facebook为您提供了一种创建Test Apps的方法,以使过程变得更加容易。

我很快意识到,现在我必须记住,每次部署到生产服务器时,都要用测试切换出产品应用程序ID。 要记住这一点非常重要! 我心想, 如何才能使自己更轻松? 好了,我们可以构建一个REST终结点,以根据服务器环境变量来提供正确的应用程序ID,这样,我们在部署之前就不必担心更改应用程序ID。 要优化还是不优化,请提出问题……。

我考虑了一会儿,决定不做。 我将在每次部署之前继续切换应用程序ID,即使这没有多大意义。 我会将这种优化添加到我不断增长的列表中,并在获得它时进行使用。 关键是还有更多重要的事情要担心,例如吸引客户和建立他们关心的功能。 另一方面,当我的产品变得更好时,我可能会遭受痛苦。

谢谢阅读! 我叫Alex ,新颖性的创始人/开发者,这是面向Etsy卖家的社交媒体营销平台 我写的是我作为初创者的旅程。 随时与我们联系!

图片来源: www.developers.facebook.com

最初于 2017年11月6日 发布在 www.alexdaro.com 上。

From: https://hackernoon.com/when-premature-optimization-make-sense-37d8212d3ca8