开发人员应该首先考虑可读性还是性能? [关闭]

2023-11-23

开发人员常常面临着在解决问题的两种可能方法之间进行选择的情况——一种是惯用且可读的,另一种是不太直观但可能表现更好的方法。例如,在基于 C 的语言中,有两种将数字乘以 2 的方法:

int SimpleMultiplyBy2(int x)
{
    return x * 2; 
}

and

int FastMultiplyBy2(int x)
{
    return x << 1;
}

第一个版本对于技术和非技术读者来说都更容易上手,但第二个版本可能表现更好,因为位移位是比乘法更简单的操作。 (现在,我们假设编译器的优化器不会检测到这一点并对其进行优化,尽管这也是一个考虑因素)。

作为开发者,初次尝试哪个会更好?


你错过了一个。

首先编码是为了正确性,然后是为了清晰性(当然,两者通常是相连的!)。最后,只有当您有真正需要的实际经验证据时,您才可以考虑优化。过早的优化确实是邪恶的。优化几乎总是会花费你的时间、清晰度和可维护性。你最好确保你买的东西是值得的。

请注意,好的算法几乎总是胜过局部调整。您没有理由不能拥有正确、清晰且快速的代码。不过,如果你一开始就专注于“快”,那么你会非常幸运地到达那里。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开发人员应该首先考虑可读性还是性能? [关闭] 的相关文章

  • SQL Azure 和 READ_COMMITTED_SNAPSHOT

    我想在 SQL Azure 数据库上将 READ COMMITTED SNAPSHOT 设置为 ON 但 Azure 不支持以下适用于其他版本的 SQL Server 的代码 ALTER DATABASE database name SET
  • kdb+ 32bit 的性能表现如何

    Kx 宣布 http kx com press releases 140402 php their 免费 kdb http www kxcommunity com 32位 时间序列数据库 我们通常可以期望该数据库的每秒读 写性能如何 我确实
  • PHP使用c++扩展会更快吗?

    我现在正在构建一个推荐系统 一个网站 我想使用PHP作为脚本语言 推荐系统可能会进行复杂的矩阵计算或其他操作 考虑到性能 我想用C 来做矩阵计算或者其他复杂的计算 所以我需要PHP调用C 函数 获取结果并进行其他处理 我知道我可以使用 PH
  • Blob 的簇生长

    考虑以下来自 Mathworks 的图像 我已经用标签标记了斑点 L num bwlabel I 如何迭代连接所有斑点 即从一个斑点开始 找到离它最近的一个 考虑最左边的两个斑点 可以从一个斑点的许多点绘制许多条线来连接到另一个斑点blob
  • 当我在 MySQL 中使用 UUID 作为主键时,会如何影响性能

    我想知道当我在 MySQL 中使用 UUID 作为主键时 会对服务器的性能产生怎样或多大的影响 我想你正在使用InnoDB 无论如何你应该 因此 请阅读 高性能 MySQL 2ed 第 117 页中的以下章节 一般来说 从性能的角度来看 U
  • badoo.com 用户搜索 - 如何做到这一点?

    Badoo com 拥有 56 000 000 个用户个人资料 个人资料可以按性别 年龄 发色 生肖 学历等进行搜索 再加上距家乡的距离 在线状态和注册日期 到目前为止 这似乎是可行的 即使它是对巨大表 56m 成员 的相当多的查询 它也可
  • 为什么Python的“sorted()”比“copy,then.sort()”慢

    这是我运行的代码 import timeit print timeit Timer a sorted x x 2 bla 4 boo 3 4 1 2 0 1 4 3 2 1 0 0 timeit number 1000 print time
  • 使用应用程序上下文滑动图像加载

    我在我的 Android 应用程序中使用 glide 进行图像加载 为了避免任何崩溃 我正在使用应用程序上下文加载图像 这对应用程序和内存的性能有何影响 这对应用程序和内存的性能有何影响 Glide提供了这么多 with 方法是有原因的 它
  • 需要更快的数组复制

    经过一些阅读后 我发现在 java 中复制数组的方式存在一些差异 对于我的应用程序 我有一个递归节点树 每个节点都包含一个 2d 板数组 8x8 通过探查器测试 我能想到的最好的办法是 java util Arrays copyOf arr
  • 快速 HTML 表格排序?

    是的 我知道有一个lot有很多 JS jQuery 程序可以做到这一点 我目前正在使用http www kryogenix org code browser sorttable sorttable js http www kryogenix
  • 在 Chrome 18 中检测 SwiftShader WebGL 渲染器

    我有一个 2D HTML5 游戏引擎 www scirra com http www scirra com 并且确实想检测 WebGL 是否将使用 Chrome 18 的 Swiftshader 软件渲染器进行渲染 如果是这样我们会much
  • VirtualStringTree 正确/推荐使用

    我已经使用 virtualstringtree 一段时间了 我将它用于两个不同的用途 第一个是用于选择 显示数据的普通树 第二个是作为网格来显示 SQL 语句的输出 我加载到树中的所有数据都来自数据库 对于树示例 我有一个 ParentId
  • 为什么在 CSS3 中启用硬件加速会降低性能?

    我在 css3 实验中将 10 000 个小 div 元素从浏览器视口的顶部移动到底部 对于此测试 我使用两种不同的方法 使用 GPU 加速translate3D x y z or translateZ 0 无需 GPU 加速 只需调整to
  • C++,最佳实践,int 还是 size_t? [复制]

    这个问题在这里已经有答案了 可能的重复 何时使用 std size t https stackoverflow com questions 1951519 when to use stdsize t hello 假设使用模式相同 即没有负数
  • 您使用什么来通过其自定义协议来测试(功能/负载/压力)您的网络服务?

    我最近创建了一个回合制游戏服务器 可以接受数十万个并发客户端连接 长话短说 Linux 上的 epoll 通信基于简单 定制 基于线路的协议 该服务器允许客户端连接 寻找游戏比赛中的其他玩家 玩所述游戏 发送动作 聊天消息等 并在游戏结束时
  • 并行何时会提高性能

    我试图理解何时使用parallel会提高性能 我用一个简单的代码对其进行了测试 该代码运行了超过 100 000 个项目List
  • mysql查询先慢后快

    我有 2 个 myISAM 表 分别称为 tests 和 completed tests 一个有 170 个条目 另一个有 118k 条目 当我运行此查询时 SELECT ct archive ct status ct score ct u
  • OpenGL:顶点越多,性能越慢

    我正在开发一个程序的一部分 其中给定 xyz 坐标集合 制作 3D 模型 我已经完成了这张图片所需的所有功能 即平移 旋转 缩放 但是给出的 xyz 坐标越多 程序运行速度就越慢 我的程序在处理 29 000 个坐标时运行得非常流畅 但当我
  • n的渐近增长选择下限(n/2)

    如何找到 n select Floor n 2 的渐近增长 我试过 使用扩展并得到它等于 n n 1 floor n 2 1 n floor n 2 知道我该如何从那里去吗 感谢任何帮助 更喜欢提示而不是答案 我同意上面的答案 但想提供更多
  • 公共领域还好吗?

    在你像我最初那样做出直觉反应之前 请阅读整个问题 我知道它们让你感觉很脏 我知道我们以前都被烧伤过 我知道这不是 好风格 但是公共场所可以吗 我正在开发一个相当大规模的工程应用程序 该应用程序创建并使用结构的内存模型 从高层建筑到桥梁再到棚

随机推荐

  • 对话框后面显示的垫选择选项

    我将表单输入 带有选项的垫选择和带有选项的自动完成字段也包含到垫对话框中 问题是选项显示在对话框后面 我已经遇到过这些解决方案解决方案1但并没有解决这个问题 这是我的代码
  • CMake - 如何使库的私有标头可供其测试使用?

    因此 我正在将项目的一部分制作为一个库 其中一些标头是该库的接口 其余部分是库本身私有的 因此 对于我的库 CMAKE 部分如下所示 add library PROJECT NAME PROJECT SOURCES PROJECT BINA
  • 接收 KeyError:“[Int64Index([ ... dtype='int64', length=1323)] 均不在 [列] 中”

    SUMMARY 当将测试和训练数据输入 ROC 曲线图中时 我收到以下错误 KeyError Int64Index 0 1 2 dtype int64 length 1323 都不在 列 中 该错误似乎是说它不喜欢我的数据格式 但它在第一次
  • 使用 Bouncy Castle 生成密钥对

    我有使用 BC 生成密钥对的 Java 代码 如下所示 KeyPairGenerator keyGen KeyPairGenerator getInstance RSA keyGen initialize 1024 KeyPair key
  • 确定性哈希函数可以轻松解密吗? [复制]

    这个问题在这里已经有答案了 可能的重复 是否可以解密 md5 哈希值 是否可以逆转 sha1 我问了这个问题 使用巨大的电子表格 并得到了很好的答案 我听从了建议 我用这个 http splinter com au blog p 86 我对
  • 链接服务器在 SQL Server 作业上失败

    我有一个链接服务器 在执行查询时可以完美运行 但是当我将查询放入作业中时 它失败了 这是我的链接服务器的设置 Error Read 当作业使用链接服务器时 SQL Server 代理作业失败 替代方法 要解决此问题 请使用以下方法之一 方法
  • 如何在 .NET Framework 4.7.2 中引用 System.Management.Automation?

    我启动了一个新的 NET Framework 4 7 2 库项目 我需要自动化 PowerShell 脚本 但 Visual Studio 参考中添加 UI 的 框架 选项卡未将 System Management Automation 列
  • Android:ListView 中的 EditText 问题

    我的应用程序中有一个列表视图 它基本上是一个调查问卷 因此用户需要填写一些编辑文本 我遇到过以下问题 某些 EditText 需要数字输入 因此我将相应 xml 类型中的 inputType 设置为数字 但是 当我单击 EditText 时
  • 为什么 Guava 的 TypeToken.getRawType() 返回 Class<?超级 T> 而不是 Class

    来自 Effective Java Second Edition 第 28 条 不要使用通配符类型作为返回类型 这不会为用户提供额外的灵活性 而是会迫使他们在客户端代码中使用通配符类型 public final Class
  • 使用 Nashorn (JSR 223) 和预编译进行 Java 脚本编写

    我通过 JSR 223 使用 Nashorn 来执行用户输入脚本的小片段 public Invocable buildInvocable String script throws ScriptException ScriptEngine e
  • AWS Lambda 和 SNS:跨区域调用 Lambda

    我有一个部署到多个区域的 Lambda 函数 我想向 SNS 发布一条消息来调用这些函数 我使用 aws cli 创建了主题 授予 Lambda 与 SNS 通信的权限 并创建订阅 订阅似乎已成功创建 我可以在 AWS 控制台中看到它 但是
  • 为什么对域名后的第一个斜杠进行 url 编码会破坏 url?

    萨尔维特 我发现某种 url 编码方式会破坏链接 作为记录 2f代表正斜杠字符 现在 考虑一下 原文链接 http dottech org 95285 this is the pacific barreleye a fish with a
  • 方法名称为空,这实际上是做什么的?

    我目前正在自学 Objective C 和 iOS 编程 发现自己由于这个微妙的错误而陷入了无法工作的代码一个小时 考虑以下代码 property strong nonatomic NSString name NSString name r
  • Bootstrap-Datetimepicker 不适用于 jQuery 3

    Bootstrap datetimepicker 不适用于 jQuery 3 1 1 我需要使用相同的 jQuery 库来运行所有其他依赖函数 我遇到同样的错误 input size is not a function TypeError
  • 递归数组类型打字稿

    说我有类型type Atom string boolean number 我想定义一种数组类型 例如 NestedArray Atom a 0 a 1 a n 其中每个a i is an Atom or a NestedArray 这可以在
  • 1093 MySQL 表被指定两次时出错

    我正在尝试更新一些行 我只想更新 ID 0 的行 我收到的错误消息是 1093 表 ch 15 posts 被指定两次 既作为 UPDATE 的目标又作为单独的数据源 这是我正在使用的代码 欢迎大家提出意见 UPDATE ch 15 pos
  • 从基类创建子类的克隆副本

    考虑这种情况 public class Base public int i public class Sub Base public void foo do stuff 然后我想 举个例子Base获取一个克隆实例Sub 在本例中 i 17
  • 这是什么?????!运算符在C中做什么?

    我看到一行C 看起来像这样 ErrorHasOccured HandleError 它编译正确并且似乎运行正常 看起来它正在检查是否发生了错误 如果发生了 它就会处理它 但我不太确定它实际上在做什么或它是如何做的 看起来程序员确实正在尝试表
  • 如何在 Yii2 Active Record 中使用 JOIN 建立关系模型?

    我有 2 张表 分别称为 书籍 和 评论 Books 表与 Reviews 具有一对多关系 我想搜索书籍并按评论对它们进行排序 例如 如果有 10 本书可用 并且书籍在评论中有评论 那么我想使用 WHERE 子句查找所有书籍并计算评论数量
  • 开发人员应该首先考虑可读性还是性能? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 开发人员常常面临着在解决问