较短的代码是否会影响解释语言的性能?
Does shorter code make a performance difference in interpreted languages?
由于源代码是在 运行ning 期间解释的,我认为这可能会对性能产生影响。我的意思是:
当你有一个很长的(>9000 行)代码,然后尽可能多地删掉空格和换行符时,它会使程序 运行 更快吗?
如果是这样,这是否也适用于使用字节码的语言(即 Java)?
Since the source code is interpreted while running
这是不正确的,(afaik) 在您标记的语言中,源代码本身被编译成字节码形式,然后由虚拟机解释。此字节码不反映源代码中存在的空白,因此不,空白不会影响执行已编译程序的整体速度。
但是,源代码中的空格可能会影响程序的编译速度,因为 lexer/parser 有更多的字符需要使用并从文件系统接收。除非相关文件包含大量不必要的空格,否则这不会以任何明显的方式影响速度。
如果你不是想问关于空格的存在影响编译和解释编译程序的速度,那就不好说了。解释程序的速度在很大程度上取决于所用指令的复杂性和所用的分支模式(if 语句、循环 et.c)。
例如,即使源代码行数较多,下面的程序也会在秒之前更快完成。
public class Fast {
public static void main(String[] args){
foo();
}
public static void foo(){
System.out.println("foo");
}
public static void bar(){
}
public static void baz(){
}
}
第二个节目:
public class Slow {
public static void main(String[] args){
foo();
foo();
foo();
}
public static void foo(){
System.out.println("foo");
}
}
您的 Python 源代码 (.py) 被 "compiled" 转换为消除所有空格 (.pyc) 的表示形式。您可以 运行 .pyc 文件,而不是一遍又一遍地进行这种转换。所以不,空格并不重要。
如果你想要性能,最好的办法就是优化你的算法。
- 不要太早开始优化窥孔;清晰、设计良好的代码是您的首要目标。
- 在那之后,由于您的代码是可理解的并且(希望)是为洞察力和变化而设计的,找出瓶颈在哪里:查看 "big-O" 的复杂性您的算法(
O(n)
、O(n^2)
等)并尝试改进它。
- 之后,您可能会使用探查器来查找剩余的瓶颈。由于您的代码结构良好,因此您通常可以轻松改进它们。
简而言之:遗漏空格是不好的。可理解的代码是优化之道。
Java 不是解释性语言。上面标记的许多其他语言也被编译成中间字节码,而不是直接解释。因此源代码的长度与性能无关。而且程序中可能存在循环,明明占了一行却执行了多次。无限循环的单行程序 运行 比十亿行的程序长
由于源代码是在 运行ning 期间解释的,我认为这可能会对性能产生影响。我的意思是:
当你有一个很长的(>9000 行)代码,然后尽可能多地删掉空格和换行符时,它会使程序 运行 更快吗?
如果是这样,这是否也适用于使用字节码的语言(即 Java)?
Since the source code is interpreted while running
这是不正确的,(afaik) 在您标记的语言中,源代码本身被编译成字节码形式,然后由虚拟机解释。此字节码不反映源代码中存在的空白,因此不,空白不会影响执行已编译程序的整体速度。
但是,源代码中的空格可能会影响程序的编译速度,因为 lexer/parser 有更多的字符需要使用并从文件系统接收。除非相关文件包含大量不必要的空格,否则这不会以任何明显的方式影响速度。
如果你不是想问关于空格的存在影响编译和解释编译程序的速度,那就不好说了。解释程序的速度在很大程度上取决于所用指令的复杂性和所用的分支模式(if 语句、循环 et.c)。
例如,即使源代码行数较多,下面的程序也会在秒之前更快完成。
public class Fast {
public static void main(String[] args){
foo();
}
public static void foo(){
System.out.println("foo");
}
public static void bar(){
}
public static void baz(){
}
}
第二个节目:
public class Slow {
public static void main(String[] args){
foo();
foo();
foo();
}
public static void foo(){
System.out.println("foo");
}
}
您的 Python 源代码 (.py) 被 "compiled" 转换为消除所有空格 (.pyc) 的表示形式。您可以 运行 .pyc 文件,而不是一遍又一遍地进行这种转换。所以不,空格并不重要。
如果你想要性能,最好的办法就是优化你的算法。
- 不要太早开始优化窥孔;清晰、设计良好的代码是您的首要目标。
- 在那之后,由于您的代码是可理解的并且(希望)是为洞察力和变化而设计的,找出瓶颈在哪里:查看 "big-O" 的复杂性您的算法(
O(n)
、O(n^2)
等)并尝试改进它。 - 之后,您可能会使用探查器来查找剩余的瓶颈。由于您的代码结构良好,因此您通常可以轻松改进它们。
简而言之:遗漏空格是不好的。可理解的代码是优化之道。
Java 不是解释性语言。上面标记的许多其他语言也被编译成中间字节码,而不是直接解释。因此源代码的长度与性能无关。而且程序中可能存在循环,明明占了一行却执行了多次。无限循环的单行程序 运行 比十亿行的程序长