代码膨胀

✍ dations ◷ 2024-09-20 09:22:42 #反模式,软件优化,软件工程

代码膨胀(英语:Code bloat)是指程序代码(可以是源代码,也可以是机器代码)生成的程序文件过大、运行缓慢或者有其他浪费资源的情况。代码膨胀可能由编写代码的语言、编译时所用的编译器,或者编写的程序员导致。代码膨胀通常指源代码过于冗长,而程序员的编码习惯和编程语言的设计导致,代码膨胀也可以指编译后的代码或者二进制文件占用空间过大(膨胀)。

通常来说,膨胀的代码是由于程序员使用了较多的代码行,而非解决问题的最佳方案。

程序员写出膨胀代码的部分原因有:

一些原生编译器推导膨胀的例子包括:

下列JavaScript代码算法有着大量的冗余变量、不必要的逻辑,以及低效的字符串连接。

// Complex function TK2getImageHTML(size, zoom, sensor, markers) {    var strFinalImage = "";    var strHTMLStart = '<img src="';    var strHTMLEnd = '" alt="The map"></div>';        var strURL = "http://maps.google.com/maps/api/staticmap?center=";    var strSize = '&size='+ size;    var strZoom = '&zoom='+ zoom;    var strSensor = '&sensor='+ sensor;           strURL += markers.latitude;    strURL += ",";    strURL += markers.longitude;    strURL += strSize;    strURL += strZoom;    strURL += strSensor;        for (var i = 0; i < markers.length; i++) {        strURL += markers.addMarker();    }        strFinalImage = strHTMLStart + strURL + strHTMLEnd;    return strFinalImage;};

而相同的逻辑可以用下列方式更有效地表达:

// Simplified function TK2getImageHTML(size, zoom, sensor, markers) {    var url = .latitude, ',', markers.longitude,        '&size=', size,        '&zoom=', zoom,        '&sensor=', sensor ];     for (var i = 0; i < markers.length; i++) {        url.push(markers.addMarker());    }    return '<img src="' + url.join('') + '" alt="The map" ></div>';}

不同语言的代码密度

各种计算机语言的代码密度有着很大差别,以“紧凑”语言(例如领域特定语言、微软P代码(英语:Microsoft P-Code) 、线程代码(英语:Threaded code))编写的程序以及紧凑语言(以机器代码编写)的解释器通常比直接用机器语言编写程序消耗更少的代码量。

减少代码膨胀的一些技术包括:

相关