免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1697 | 回复: 1
打印 上一主题 下一主题

WEB程序代码优化入手的几方面 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-19 19:20 |只看该作者 |倒序浏览
原文:http://www.coderhome.net/zifa/?p=197

这里对web程序方面的优化作一个总结,虽然我用的是PHP其实不管理是什么语言方向都是一样的。
1.编码规范化可读性优化
编码规范我想一般程序员不会不了解,如果你这方面是空白你应该好好补补基础了,做到编码规范是一个好的程序员的最基础要求,一个团队也应该有自己的编码规范。所以程序的优化也应该包含到这个方面,在你开发程序的过程中可能会有些遗漏,所以在我们进行编码规范化可读性优化是很有必要的。其实一份再好的程序代码若干年后你自己都未必能看的懂更不用说别人来看你的代码,使你自己写出的代码有更好的可读性,这个是一个好的程序员应该做的,并且是对一个团队和你自己作品的责任感。
优化方向就是使你的代码更清析更易懂。
2.程序效率、流程逻辑优化
程序效率的优化是最重要的,程序运行速度是程序代码好坏最重要的因素,程序逻辑其实就是你的解决思路,解决思路并不是唯一的,所以我们可以对它进行优化。逻辑的设计也和可读性有一定的关系,逻辑清晰可读性就更强。
优化的方向就很明确了提高速度,清晰逻辑。简单的逻辑并不代表一定是速度快,复杂的逻辑并不一定是慢的。所以在这两方面是关联。
3.SQL优化,减少查询次数
在使用数据库的程序中我们知道数据库的查询是在整个程序执行中占很大比例的,所以SQL的优化是非常重要的。
优化的方向一方面是SQL语句本身的优化,熟悉SQL的人应该会知道,不同的SQL写法执行的效率差别是很大的,如:尽量不对字段加函数操作,更多的大家可以去查找高效SQL这方面的资料。第二在一个页面中减少查询次数,这个道理很清楚,我们可以把整个页面的SQL都输出来进行分析,是否可以合并语句,是否可以做冗余字段等等,尽量减少SQL的查询次数,坚绝不在循环中使用查询。
4.缓存优化
缓存优化其实就是对上一点的补充,但缓存优化是很重要的,所以可以单独列为一点。缓存的数据主要就是从数据库中读取出来的。对缓存的一些介绍:http://www.coderhome.net/zifa/?p=195,当然缓存也应该适当,应该只把需要缓存的数据进行缓存。
5.html,css,js文件优化,减少冗余代码
这一点与服务端程序没有关系,主要是与浏览器相关的几方面。html的结构是会影响到浏览器的解析,所以好的html代码也会影响访问速度。相比之下客户端的代码就不允许有一点无用的东西存在,能把文件减少一K就应该减少。js虽然是在客户端执行但也应该去考虑它的效率问题,网络上也有这方面的文章介绍。
6.可用性优化
可用性优化主要指的是UED方面的,并不是每一个团队都有专门的UED,作为web程序的开发人员也应该有这方面的意识,去了解用户,而不是埋头写代码。努力使你开发的页面对用户更友好,更容易使用。
7.框架架构优化
如果有使用到开发框架,也应该考虑到对框架的优化,减少框架本身占用的资源。
其它:服务器架构优化、数据库优化
这些方面和程序开发没有直接关系,但和web程序的运行也是关系密切的,所以顺便提一提。

论坛徽章:
0
2 [报告]
发表于 2008-02-20 09:52 |只看该作者
1. If a method can be static, declare it static. Speed improvement is by a factor of 4.

2. echo is faster than print.

3. Use echo’s multiple parameters instead of string concatenation.

4. Set the maxvalue for your for-loops before and not in the loop.

5. Unset your variables to free memory, especially large arrays.

6. Avoid magic like __get, __set, __autoload

7. require_once() is expensive .

8. Use full paths in includes and requires, less time spent on resolving the OS paths.


9. If you need to find out the time when the script started executing, $_SERVER[’REQUEST_TIME’] is preferred to time()


10. See if you can use strncasecmp, strpbrk and stripos instead of regex.


11. str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4.


12. If the function, such as string replacement function, accepts both arrays and single characters as arguments, and if your argument list is not too long, consider writing a few redundant replacement statements, passing one character at a time, instead of one line of code that accepts arrays as search and replace arguments.


13. It's better to use select statements than multi if, else if, statements.

14. Error suppression with @ is very slow.

15. Turn on apache's mod_deflate

16. Close your database connections when you're done with them.

17. $row['id'] is 7 times faster than $row[id].

18. Error messages are expensive.

19. Do not use functions inside of for loop, such as for ($x=0; $x < count($array); $x) The count() function gets called each time.


20. Incrementing a local variable in a method is the fastest. Nearly the same as calling a local variable in a function.

21. Incrementing a global variable is 2 times slow than a local var.

22. Incrementing an object property (eg. $this->prop++) is 3 times slower than a local variable.

23. Incrementing an undefined local variable is 9-10 times slower than a pre-initialized one.

24. Just declaring a global variable without using it in a function also slows things down (by about the same amount as incrementing a local var). PHP probably does a check to see if the global exists.

25. Method invocation appears to be independent of the number of methods defined in the class because I added 10 more methods to the test class (before and after the test method) with no change in performance.


26. Methods in derived classes run faster than ones defined in the base class.

27. A function call with one parameter and an empty function body takes about the same time as doing 7-8 $localvar++ operations. A similar method call is of course about 15 $localvar++ operations.

28. Surrounding your string by ‘ instead of " will make things interpret a little faster since php looks for variables inside "…" but not inside '…'. Of course you can only do this when you don’t need to have variables in the string.

29. When echoing strings it’s faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments.

30. A PHP script will be served at least 2-10 times slower than a static HTML page by Apache. Try to use more static HTML pages and fewer scripts.

31. Your PHP scripts are recompiled every time unless the scripts are cached. Install a PHP caching product to typically increase performance by 25-100% by removing compile times.

32. Cache as much as possible. Use memcached - memcached is a high-performance memory object caching system intended to speed up dynamic web applications by alleviating database load. OP code caches are useful so that your script does not have to be compiled on every request.

33. When working with strings and you need to check that the string is either of a certain length you’d understandably would want to use the strlen() function. This function is pretty quick since it’s operation does not perform any calculation but merely return the already known length of a string available in the zval structure (internal C struct used to store variables in PHP). However because strlen() is a function it is still somewhat slow because the function call requires several operations such as lowercase & hashtable lookup followed by the execution of said function. In some instance you can improve the speed of your code by using an isset() trick.

Ex.
if (strlen($foo) < 5) { echo "Foo is too short"; }
vs.
if (!isset($foo{5})) { echo "Foo is too short"; }

Calling isset() happens to be faster then strlen() because unlike strlen(), isset() is a language construct and not a function meaning that it’s execution does not require function lookups and lowercase. This means you have virtually no overhead on top of the actual code that determines the string’s length.

34. When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i. This is something PHP specific and does not apply to other languages, so don’t go modifying your C or Java code thinking it’ll suddenly become faster, it won’t. ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3. Post incrementation actually causes in the creation of a temporary var that is then incremented. While pre-incrementation increases the original value directly. This is one of the optimization that opcode optimized like Zend’s PHP optimizer. It is still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer.


35. Not everything has to be OOP, often it is too much overhead, each method and object call consumes a lot of memory.

36. Do not implement every data structure as a class, arrays are useful, too.

37. Don’t split methods too much, think, which code you will really re-use.


38. You can always split the code of a method later, when needed.


39. Make use of the countless predefined functions.

40. If you have very time consuming functions in your code, consider writing them as C extensions.

41. Profile your code. A profiler shows you, which parts of your code consumes how many time. The Xdebug debugger already contains a profiler. Profiling shows you the bottlenecks in overview.

42. mod_gzip which is available as an Apache module compresses your data on the fly and can reduce the data to transfer up to 80%.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP