全网资源采集网站搭建

电脑端+手机端+微信端=数据同步管理

免费咨询热线:13114099110

当前位置: 主页 > 新闻资讯

网站代码优化-(网站前端seo代码及标签的优化)

发布时间:2022-11-15 10:01   浏览次数:次   作者:派坤优化

网站代码优化-(网站前端seo代码及标签的优化)(图1)

数学家高斯上小学的时候,老师问1+2+3加100,和是多少?其他同学吃力地数着,一个一个地加。只有高斯注意到这些数可以成对配对,和为101,于是他认为101一共有50对,和可以相乘:=5050。

你感受过数学思维的力量吗?实际上,编程中的代码优化类似于数学公式。

小白和大神写同一个程序,小白跑200万条数据需要8个小时,但是大神优化代码后只需要40分钟,效率提升了1200%!

要想成为金字塔顶端的程序员,不仅要关注程序能不能跑起来,还要关注程序的运行效率。下功夫,每一个字,每一句话。这是代码调整。为了帮助大家成为一个注重细节的程序员,我们来看看下面的6条代码调优法则吧!

6 条代码调优法则

空间换时间规则

修改数据结构。为了减少对数据进行常见操作所需的时间,我们通常可以在数据结构中添加额外的信息,或者修改数据结构中的信息,使其更易于访问。

存储预先计算的结果。对于开销较大的函数,可以只计算一次,然后将计算结果存储起来,以减少开销。以后再需要这个功能的时候网站代码优化,直接查表就可以了,不用重新计算。

缓存。最常访问的数据应该具有最少的访问开销。

懒惰的评估。除非需要,否则不进行评估。此策略避免评估不必要的项目。

时空法则

积累。密集存储意味着可以通过增加存储和检索数据所需的时间来减少存储开销。尽管堆有时会以牺牲时间为代价获得空间,但这种较小的表示通常处理起来更快。

解释程序。通常可以通过使用解释器来减少表示程序所需的空间,其中常见的操作序列以紧凑的方式表示。

代码空间技术。有时空间的瓶颈不是数据,而是程序本身的大小。在过去糟糕的日子里,我看到到处都是这样的图形程序:

格式 1(15 像素,粗体,#)

for i = [17, 43] set(i, 68)
for i = [18, 42] set(i, 69)
for j = [81, 91] set(30, j)
for j = [82, 92] set(31, j)

其中 set(i, j) “点亮”屏幕位置 (i, j) 的图形元素。使用适当的函数,例如绘制水平线的 hor 函数和绘制垂直线的 ver 函数,上面的代码可以替换为如下代码:

hor(17, 43, 68)
hor(18, 42, 69)
vert(81, 91, 30)
vert(82, 92, 31)

上面的代码可以依次替换为从数组中读取命令的解释器,如下所示:

h 17 43 68
h 18 42 69
v 81 91 30
v 82 92 31

如果上面的代码仍然占用太多空间,那么你可以为命令(h,v,或其他两个命令)分配两个位,以及以下三个数字中的每一个(这些数字是0~1023范围内的整数)分配 10 位。因此,上面的每一行都可以用一个32位的字来表示(当然,这个转换要由程序来完成)。这种假设情况揭示了几种节省代码空间的通用技术。

函数定义。上面的程序可以通过用函数替换代码中的常见模式来简化,这反过来减少了它的空间需求并增加了它的清晰度。这是“自下而上”设计的常见示例。

虽然我们不能忽视自上而下的方法,但良好的原始对象、组件和函数给出的统一视图可以使系统更易于维护并节省空间。微软删除了很少使用的功能,并将其整个系统压缩成一个更紧凑的 CE,使其可以在内存更小的“移动计算平台”上运行。

较小的用户界面 (UI) 在屏幕较窄的小型机器(从嵌入式系统到掌上电脑)上运行良好,熟悉的界面对用户来说非常方便。较小的应用程序编程接口 (API) 使系统为 API 程序员所熟悉(并且对于许多程序来说,即使不兼容网站代码优化,也非常接近)。

解释程序。在图形程序中,我们用 4 字节的解释器命令替换长行的程序文本。描述了一种用于套用信函编程的解释器,虽然其主要目的是使编程和维护更容易,但也减少了程序空间。

和派克在他们的“解释器、编译器和虚拟机”一书中。他们举了很多例子来支持他们的结论:

“虚拟机,过去一个有趣的想法,最近在 Java 和 Java 虚拟机(Java,JVM)的帮助下重新流行起来;它们很容易为用高级语言编写的程序提供可移植、高效的表示语言。”

翻译成机器语言。在节省空间方面,大多数程序员较少控制的是源语言到机器语言的转换。对编译器做一些小的改动就可以将早期版本的 Unix 系统的代码空间减少 5%。

作为最后的手段,程序员可能会考虑用汇编语言对大型系统的关键部分进行手工编码。这种昂贵且容易出错的过程几乎没有什么好处;但是,它通常用于内存非常宝贵的系统,例如数字信号处理器。

Apple 于 1984 年诞生时,它是一台令人惊叹的机器。这台小型计算机 (128 KB RAM) 具有惊人的用户界面和强大的软件集。设计团队预计会制造数百万台这样的机器,但只提供了 64 KB 的 ROM。

通过仔细定义函数(包括泛化运算符、合并函数和删除特征)并用汇编语言手工编写整个 ROM 程序,该团队将数量惊人的系统功能打包到一个微型 ROM 中。

他们估计经过高度调整的代码(经过仔细的寄存器分配和指令选择)的大小是从高级语言编译的等效代码的一半(尽管那时编译器已经有了很大改进)。紧凑的汇编代码也运行得非常快。

循环法

将代码移出循环。与其在循环的每次迭代中执行某种计算,不如将其移出循环并仅计算一次。

结合测试条件。一个高效的内循环应该包含尽可能少的测试条件,最好只有一个。因此,程序员应该尽量用一些退出条件来模拟循环的其他退出条件。

循环展开。循环展开可以减少修改循环下标的开销,也有助于避免流水线延迟,减少分支,提高指令级并行度。

删除作业。如果内循环中的大部分开销来自普通赋值,这些赋值通常可以通过复制代码和修改变量的使用来删除。具体来说,删除赋值 i = j 后,后续代码必须将 j 视为 i。

消除无条件分支。快速循环不应包含无条件分支。通过“旋转”循环,在底部添加条件分支消除了循环末尾的无条件分支。这个操作通常是通过优化编译器来完成的。

循环合并。如果两个相邻的循环对同一组元素进行操作,则可以将它们的操作部分组合起来仅使用一组循环控制操作。

逻辑法则

使用等效的代数表达式。如果逻辑表达式的计算成本太高,则将其替换为成本较低的等效代数表达式。

短路单调函数。如果我们要测试一个多变量的单调非递减函数是否超过某个阈值,那么一旦达到这个阈值就不需要再计算任何变量了。该法则更成熟的应用是一旦达到目的就退出循环。

重新排序测试条件。在组织逻辑测试时,您应该将低成本、经常成功的测试放在高成本、很少成功的测试之前。

预先计算的逻辑函数。在相对较小的有限域上,逻辑函数可以用查找表代替。

消除布尔变量。我们可以用if-else语句代替对布尔变量v的赋值,从而消除程序中的布尔变量。在这个 if-else 语句中,一个分支代表 v 为真的情况,另一个分支代表 v 为假的情况。

程序法则

分解函数层次结构。对于调用自身(非递归)的函数,通常可以通过将其重写为内联版本并固定传入的变量来缩短其运行时间。

递归函数转换。递归函数的运行时间通常可以通过以下变换来缩短。通过使用显式程序堆栈将递归转换为迭代,将递归重写为迭代。(如果函数只包含一次对其自身的递归调用,则无需将返回地址存储在堆栈上)。

如果函数的最后一步是递归地调用自身,那么用到它的第一条语句的分支替换该调用通常称为消除尾递归。在解决小的子问题时,使用辅助过程通常比将问题的规模减小到 0 或 1 更有效。

并行性。给定底层硬件,我们构建的程序应该尽可能多地利用并行性。

表达规则

在编译时初始化。在程序执行之前,应该初始化尽可能多的变量。

使用等效的代数表达式。如果表达式的计算成本太高,则将其替换为成本较低的等效代数表达式。使用加法而不是乘法来降低数组元素循环的强度。许多编译器执行此优化。这种方法可以扩展到一大类增量算法。

消除公共子表达式。如果同一个表达式在不改变它的任何变量的情况下被计算两次,那么我们可以通过存储第一次计算的结果并使用它而不是第二次计算来避免第二次计算。

成对计算。如果您经常需要一起计算两个相似的表达式,您应该创建一个新过程来成对计算它们。如果函数的参数已经在集合中,C++ 代码会用什么都不做的函数替换这两个函数。

利用计算机单词的并行性。使用底层计算机体系结构的完整数据路径宽度评估昂贵的表达式。

看完这6条代码调优规则,你是不是豁然开朗了?有时候,你不是努力不够,而是用错了方法,学好《编程珠玑》中的方法论,更高效地攀登程序员进阶之路!

编程珠玑第 2 版

作者:[美]乔恩·宾利(Jon )

京东

这本书是计算机科学的经典之作。本书内容围绕程序员面临的一系列实际问题展开。作者以其独到的见解和创造力,引导读者理解这些问题,并学会如何解决这些问题,这对程序员在实际的编程生涯中非常重要。

本书的特点是通过一些精心设计的有趣和有启发性的程序,对实用的编程技巧和基本的设计原则进行了透彻而睿智的描述,为复杂的编程问题提供了清晰而完整的解决方案。本书对各个层次的程序员都有很高的阅读价值。

-结尾-

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。