代码级优化
所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码短(运行时间更短、占用空间更小),时空效率优化。原则上,优化可以再编译的各个阶段进行,但最主要的一类是对中间代码进行优化,这类优化不依赖于具体的计算机。目标代码(objectcode)指计算机科学中编译器或汇编器处理源代码后所生成的代码,它一般由机器代码或接近于机器语言的代码组成。[1]目标文件(objectfile)即存放目标代码的计算机 目标代码文件,它常被称作二进制文件(binaries)。目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代码在运行时使用的数据,如重定位信息,如用于链接或调试的程序符号(变量和函数的名字),此外还包括其他调试信息。[2]目标文件是从源代码文件产生程序文件这一过程的中间产物,链接器正是通过把目标文件链接在一起来生成可执行文件或库文件。目标文件中唯一的要素是机器代码,例如,用于嵌入式系统的目标文件可能仅仅含有机器代码。
② 此段代码该如何优化呢谢谢!
优化见解
php作为脚本语言被广泛应用于网页网站程序设计中。
由于是脚本语言,在运行时才对高级语言代码解释执行,所以跟编译语言(如C)比起来php的效率比较低,稍复杂的程序执行起来就需要消耗较多的时间。作为网页服务器时,低效率意味着消耗更多的服务器资源。所以,有必要通过优化php 程序代码来提高效率,减小服务器资源消耗。(当然如果你的程序本来就消耗很少执行时间或者你的服务器足够强,那就不一定要进行优化了)
网上很多文章介绍优化php程序,是通过安装Zend Optimizer之类的加速软件实现的,但这种加速是有限的。本文主要从程序代码着手介绍一些优化思路和手段。
程序的抽象层越多,各抽象层分离得越严格,程序效率越低。
最原始的应用于网页的php程序模式莫过于脚本嵌入模式,即仅仅在一个网页中需要动态处理或显示数据的地方通过加入<?php和?>标识符嵌入php脚本。一般来说这是php程序员最早学习的模式,它只有一个抽象层,就是网页,故本文称其为单层模式。
随着网站规模逐渐增大,程序员可能会发现单层模式的程序很难维护,当想对程序修改或扩充功能时,会发现代码非常混乱,感觉无从下手。于是模板类诞生了,它使得一个网页由两个文件组成:一个php程序文件,一个html模板文件。常用的模板类有PHPLib库带的Template模板类,Smarty模板类等。由于加入了额外的处理程序(模板类),程序效率下降了。你若不信可自己测试一下。其实一般情况下,不用函数(最原始的编程方法)比用函数(面向过程)的效率高,而用函数的效率又比对象封装(面向对象)高。所以就算在编译语言中,需要高效率的地方会用C写而不用C++,例如FreeBSD操作系统的内核;而需要极端高效的地方还要用汇编写。
为了使程序可以适应多种数据库系统,或者方便随时转换数据库系统,常常还会用一个类把跟数据库打交道的函数封装起来,这样当转换数据库系统时只要把封装类换掉就行了,主程序不需要修改。这里又用了一个类,效率又打折扣了。
上述模板类的使用,使程序分成两个抽象层:程序层和表现层。而数据库类的使用又把程序层分为数据接口层和数据处理层。
项目越庞大,需要分离的抽象层就越多,这样使得分工清晰,方便管理,但是以牺牲程序执行效率为代价。
对于抽象层造成的效率下降,优化的方法有二:减小抽象层、优化抽象层之间的接口。一般地,不应该为了提高效率而盲目减小抽象层,这样会使得代码混乱、难于管理。但是不应该为小项目建立过多的抽象层,除非你有将来把它做得很大的计划。关于如何恰当分割抽象层,本文不作更深入讨论。
对于上文说的两个分层例子,优化抽象层之间的接口分别是模板类和数据库操作类。抽象层接口在程序中需要被频繁调用,以在不同层之间交换信息,所以层接口是很值得优化的。对于数据库接口类,可能仅仅是封装一些数据库函数,优化余地恐怕不大。对于模板类,很多时候是有较大优化余地的。一般地,模板模型越通用,模板类功能越强大,效率就越低,例如PHPLib库带的Template类就有极大的优化余地。而Smarty模板类比PHPLib的Template更复杂,我没有用过,据称有缓存机制,不知是否可以弥补其性能损耗。下面就来看看PHPLib的Template类有多少东西可以优化掉。
1.
读入模板文件时,file函数效率低,改用get_file_content函数。
2.
匹配子模板时,正则表达式替换函数preg_replace效率低,改用str_pos函数进行定位和用str_replace函数进行替换操作。此优化手段后文会详细分析。
3.
模板模型通用性很强,能适应各种情况,但在具体细节的处理上,通用的方法效率可能很低。可以对模板模型作适当修改。我的做法是建一个相对通用的模板类,然后再派生出一个只适用于特定程序的模板类。在通用模板类的模板模型上可以作些优化(相对于PHPLib的Template),例如在处理二维数据表的时候用 PHPLib的Template处理就比较复杂(具体实现方法可参考《优化php嵌套模版》),需要多次调用类方法(本质上是函数调用),所以重写的时候可以把处理二维数据表的功能封装到一个高效率的方法中,直接避免方法的多次调用。
4.
调试功能在小项目上不需要用,跟调试相关的代码全部去掉。
我在按上面4点重写了模板类之后,一个复杂页面的执行时间缩小了一个数量级(除模板外没有作其它优化)。
现在就优化你的程序的抽象层之间的接口,特别是当这些接口是使用现成的函数或类的时候。因为这些函数或类在设计时会为了适应普遍情况而牺牲一些效率,而且它们的作者也可能没有考虑效率问题。像如此著名的PHPLib的模板类的效率也不见得就高。
细节代码优化
优化代码不应总是祈求大刀阔斧式的优化,当大方面已经无从入手时,不妨把视线转移到细节上。
1.
上文模板类优化已提到的,正则表达式匹配比一般字符串匹配慢得多,尽可能用字符串匹配而不用正则表达式匹配。有时候虽然用正则表达式匹配使程序代码更简洁,而一般字符串匹配使代码更冗繁,但很多时候字符串匹配仍比正则表达式高效。
2.
字符串替换函数str_replace和preg_replace都是可以接受数组参数的。有时候需要对字符串进行批量替换,则用数组参数比循环调用替换函数来得高效。例如下面的代码:
1. for ($i = 0; $i < $n; $i++) {
2. $str = str_replace($search[$i], $replace[$i], $str);
3. }
应该换成:
1. $str = str_replace($search, $replace, $str);
注意:这里$search和$replace都是数组
str_replace和preg_replace的数组用法可参考PHP手册。
3.
对用于赋值的条件语句,可改用?:算符
这里仅举三个细节代码优化的方法。实际上PHP程序还有很多细节代码优化方法,要掌握这些方法,需要多看PHP手册,多了解些函数。在解决一些细节问题时,用不同的函数作不同的搭配,就产生不同的方法,对不同的方法应进行实际效率测试,得出优化方法。
面向对象、面向过程、类、函数、宏
尽管面向对象方法在程序设计中有很多优点(这里就不罗列了),但一般地说,面向对象程序的执行效率往往不如面向过程好,一个显然的理由是面向对象的程序往往要频繁调用对象的方法从而使代码简洁明了,却降低了程序执行效率。
对于中小型项目,为程序效率着想,最好在思想上,面向对象与面向过程兼有,在代码上,类、函数、宏搭配使用。这里提到一个可能对读者陌生的概念——宏(macro)。在C语言中有宏,宏汇编中也有宏,但PHP中官方没有定义“宏”的概念。然而我们可以通过require函数和include函数实现宏的功能。require和include通常用来在程序代码中包含函数库或类库等文件,一般很少用来直接包含程序代码文件,因为包含程序代码有时会降低代码易读性。当有一段代码需要在很多页面中都执行时,通常被想到的是把它打包为函数或封装为类。但此法有缺点如下:
1.
降低程序效率。因为增加了函数/类方法调用。
2.
有时此段嵌入代码较复杂,实现功能并不单纯,封进函数并不符合函数功能单纯的原则。
3.
有时嵌入代码需要与外部大量交换数据,如果封进函数会使参数表庞大,且处理函数的返回值也变得复杂。
4.
由于有2、3两点缺点,导致当嵌入代码与外部代码交换的数据有所变化时,函数或类的接口的更改会变得麻烦。
当遇上以上情况时,我建议使用宏,即把嵌入代码直接写入被包含文件中,供各页面包含。但此时务必要清晰注释宏的调用方法,输入输出数据等,以弥补代码易读性的降低。
总之,面向对象、面向过程、类、函数、宏,这些都应根据具体实际情况而搭配使用,不应盲目死守某些原则。
SQL数据库
本来SQL数据库的优化不应归入PHP优化,但实际应用中PHP常与SQL数据库配合构建网站,常用的数据库有MySQL、PostgreSQL等。于是SQL查询的效率也直接影响PHP程序的效率,故本文也略为谈一谈。
1.
MySQL 中,使用InnoDB或BDB表(支持事务)的效率比MyISAM表(不支持事务)的效率低,尤其InnoDB表效率比MyISAM低很多,而BDB表的主要劣势在于占用磁盘空间比MyISAM表多很多,且不能查知每个表占用磁盘空间的大小。而对中小型应用,数据不一致性出现的概率是很微的,所以尽可使用 MyISAM表提高效率。(关于MySQL数据表的更多讨论可参考《MySQL 中三种数据表的对比》)
2.
恰当建立索引和存储冗余数据。此话题太大故本文不打算作详述。
3.
有些SQL查询仅需知道数据库中是否存在符合条件的行,故只要查得一行,搜索即可结束。所以对此类查询,可在SQL句末加上LIMIT 1使数据库一旦搜到满足条件的行即不再搜索。
4.
尽量少用JOIN,有些低效率的JOIN查询可通过存储冗余数据来避免。
5.
有时候需要比较现在的时间与数据库某列的时间的差距,返回时间差距满足一定条件的行。在MySQL 4.1之前,是没有DATEDIFF函数的,但可以用DATE_ADD或DATE_SUB函数简洁实现,例如要返回xtime列距今超过10天的行,有两种写法:
法一:
1. SELECT somecolumn FROM sometable WHERE DATE_ADD(xtime, INTERVAL 10 DAY) < NOW()
法二:
1. SELECT somecolumn FROM sometable WHERE DATE_SUB(NOW(), INTERVAL 10 DAY) > xtime
两种写法执行结果等效但效率不同。如果xtime列建有索引,则法一的写法无法使用索引,而法二的写法可以用索引,故应采用第二种写法提高效率。
除此之外,SQL数据库优化还大有学问。
延迟输出与缓冲
有时候有些页面无论如何也无法优化到需要的速度,此时可以考虑使用延迟输出与缓冲的技术。
关于延迟输出,可参考《动态网页中慢数据的延迟输出》,本文不再详述。
而缓冲也是一个大话题,故本文也不打算作详述,但作一简介。
常用的技术,按网站软件层次分,有网页服务软件的缓冲技术,例如Apache的缓冲技术;又有动态脚本的缓冲技术,例如用PHP编程实现的缓冲技术。
此外又可分为静态缓冲技术和动态缓冲技术。静态缓冲技术即把动态内容生成静态的html页面存于磁盘,客户端几乎完全跟静态页面打交道,整个网站犹如一个静态网站。而服务器后台在适当时候调用动态程序更新静态内容(重新生成静态内容)。动态缓冲技术则是客户端仍与动态页面打交道,而动态网页在接到客户请求时先检查是否有相应的缓冲网页,如有,直接把该静态页输出到客户端,如无或缓冲页已过时,则重新生成缓冲页面并输出到客户端。
虽然本文篇幅已经有相当长度,但对PHP优化这个大话题来说只是一个概述,很多优化技术也只是点到为止。读者可择感兴趣的技术看更多的资料作深入学习。
③ 什么叫代码优化为什么要优化
C语言属于编译语言,也就是你编写的程序,要经过编译形成目标代码,具版体的处理器才能执行这个程权序。
C语言的编译器有多种算法,如代码长度最小、代码执行时间最短等等。你在开发环境中不对代码优化进行设置,那就是默认等级,或者叫无优化。
优化的目的是给用户一个选择,比如你的程序存储器只有8K,可是编译出来的代码是9K,那你是没法烧录运行的,装不下。这时你按代码长度最小优化一下,也许就可以了。
不优化没什么问题,大不了程序大一点,优化级别越高,出问题的可能性越大。因为编译软件只有一个,程序员千千万,优化难免有BUG。
原则:能不优化就不优化,需要优化先自己想办法,实在不行才借助编译软件优化,但要详细测试。
④ 代码优化的途径
改进、提高程序途径:
1) 改进算法;
2) 在源程序级上等价变换;
3) 充分利用系统提供的程序库;
4) 编译时优化等。
⑤ 网站代码如何优化
永远记住一句话:代码尽量简洁,能少则少。另外注意一下代码规范。
⑥ 请教什么是代码优化
应该是抄页面整体代码的编排吧,袭搜索会访问你的源代码,也是一种优化巴,你看那些大网站靠前的,右键查看源代码,是否代码编排的很专业?呵呵比如更多网站pw用户就喜欢把标题和网站介绍还有关键字在代码里给重新优化下,原始的看起来非常的乱
⑦ 如何在网页代码中做优化
在SEO优化中,我们不仅要对关键字进行优化,代码优化也是必不可少的。
下面一些见解
网页代码优化的原因:
(1) 可以减少网页的体积,加快网页的下载速度;
(2) 提高蜘蛛对信息的抓取的速度和准确性
(3) 有利于减少错误的代码,提高页面的对蜘蛛的友好性
(4) 便于管理人员维护,提高工作效率
(5) 减少网页的噪音,突出页面的主题
那我们怎样对网页代码进行优化?
(1)对网页中存在多余的代码,我们要学会清除垃圾代码。网页中一般存在的垃圾代码会有空格符、空标签块、多余的嵌套标签、不必要的注释等。
如:在每行的开始或结尾都存在着大量的空格符,我们需要把这些冗余代码删除,还有空白行。清除空白行有一种简单快捷的方法:可以将代码转至html代码编
辑的模式按ctrl+A全选代码使用组合键shift+Tab删除。
(2)采用div+css排版。Div+css样式可以精简很多样式,将设计网页模版的部分脱离出来,放在一个独立的文件夹中,对于网站的维护
和更改都相当的方便。且可以提高页面的浏览速度,增加客户访问的友好性。在css进行布局时,要有良好的命名习惯,适当的代码注释。
(3)引用js文件,并不是页面的特效越多越好(先css后js)。
(4)对于图片的优化,网站的图片不是越多越好,但要有图片,要完善图片的ALT属性,最好使用带有目标关键词的描述。
(5)对于错误的代码,我们可以利用3w工具进行检查。
对于页面标签的优化,H1定义为正文标题,即一级标题,它具有唯一性。H2为二级标题,主要出现在正文的文章标题上。H3为三级标题,一般出现在页面的侧边栏,H4-H6一般出现较少。值得注意的是在页面中和的区别,对关键字起到强调作用,而仅仅是加粗的作用。
⑧ 代码优化是如何实现的
代码优化就是对网页中的html源代码进行必要的调整,以提高页面的有好行,页面经过优化后,一方面可以有效的精简页面中的冗余代码,加快页面的显示速度,同时降低页面占用搜索引擎服务器的存储空间,从而提高页面的用户体验及搜素引擎友好型;另一方面可以突出页面主题,提高页面的相关性。
主要步骤:精简代码;头部优化,权重标签使用及图片优化。在这四个环节中,精简代码是最基础、最根本。
1.精简代码是指清除或者简化页面中的代码,从而达到降低页面体积、提高页面的用户体验及搜索引擎优化性的目的。
精简代码又分五个小步骤:1.清理垃圾代码;2.html标签转换;3.CSS优化;4js优化以及表格优化。
1.1 垃圾代码是指那些在删除的情况下也不会影响页面正常显示的非必要代码。不要小看这些代码,他占据了很大的空间,不仅影响性能还影响搜索引擎的计算时间,所以代码最好是手写,如果用frontpage,Word,Dreamweaver,等工具写的话,产生的垃圾代码会非常多,所以手动清理掉。
1.2 html标签转换,主要是指使用短标签替换在网页中实现同样效果的长标签。例如与,两周都是对字体加粗,但是比多出五个字符,如果页面很多的话,就会产生很多冗余代码。
1.3 css优化。css优化主要是改变css的调用方式,以及避免使用css为重要内容定义样式。
使用div+css方式制作页面,一方面防止垃圾代码,另一方面可以减少重复代码。这种方式对搜索引擎非常友好。
1.4 js优化。js对搜素引擎极不友好。目前搜索引擎不能解析javascript生成的页面或者内容。所以重要的内容不能用js脚本生成;
1.5表格优化,传统的页面基本都是用table。但是这种方式对搜索引擎非常不友好,所以不建议用table
实战:我的网站gsm alarm system所有的页面都是手写,几乎没有任何的冗余代码,就是标签的转换,尽量避免了长便签。
还有就是css优化,所有的样式我放在外部页面,只需在头部添加引用即可,这样大大减少了页面的体积。
还有就是我采用了div+css的方式写了每个页面。
还有js优化,所有的重要内容都没有使用js,用js只是显示一些特效,但是js的代码也是写在外部页面,而要在页面的底部添加引用,千万不要再头部,如果在头部也会影响页面的性能的
而我的网站gsm alarm system所有的页面都遵守了上面所述规则。以上小弟如果有错的地方,各位大哥,可以给予指点,小弟不胜感激。好了今天就到此了,下节继续。
⑨ 网站代码优化
所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码短(运行时间更短、占用空间更小),时空效率优化。原则上,优化可以再编译的各个阶段进行,但最主要的一类是对中间代码进行优化,这类优化不依赖于具体的计算机。
编译过程中可进行的优化可按阶段划分:优化可在编译的不同阶段进行,分为中间代码一级和目标代码一级的优化。可按优化涉及的程序范围划分:对同一阶段,分为局部优化,循环优化和全局优化. 进行优化所需要的基础是对代码进行数据流分析和控制流分析。如划分DAG,查找循环,分析变量的定值点和引用点等等。最常用的代码优化技术有删除多余运算,循环不变代码外提,强度削弱,变换循环控制条件,合并已知量与复写传播,以及删除无用赋值等等。
⑩ 代码优化
创建3个数组 myCompOverlay[6],BMapPoint[6],myBuldings[6]