【IT168技术分析】
一个网站不管大小,其实都是一套很完整的系统,从无到有都要经过设计、制作、编码、测试这几个阶段,而在这几个阶段中影响整个网站运行效率的主要是前期的数据库
设计和后期的编码阶段,下面就这两大阶段跟大家讲下,如何制作出一个相对高效的网站。
1.数据库设计
一般来说你的数据库结构肯定是要按照给我们提要求的人来设计的,必须用到的字段是不可少的,这一点我们是无法控制的,我们能控制的可以有以下几点:
1.数据库字段(常用的分为int,bit,datetime,decimal,nvarchar,text),
1.数字型:一般用来记录次数分数等等,还有一种可以用在检索,排序,它比字符型来的快,如果你能用数字型的那就用数字型,特别是用来区分某条数据
是什么类型时用,比如我们的订单是处于新建订单还是已确认还是已结,完全可以用数字1,2,3,4,5,6来表示,更重要的是如果我想看处于确认入住或
者已结或者对账中状态的订单,如果已经是按照1,2,3,4这种顺序来区分的话那我只要查询大于某个数字的记录就可以了,而现在我们必须是按照某个字段
等于H(已确认)或者等于D(对账中)或者等于O(已结)这在效率上明显下降很多,因为你用到了或,并且是字符型的,他是毫无规律可言的,那数据库必须把每条记录看一遍才能找到记录。
而用大于3(比如4是已确认)的话数据库会用二分法很快就能找到记录.
2.字符型:建议大家在用到字符型时一定要用nvarchar类型,因为实践证明用varchar等其他字符类型在存储不同编码格式的文字时会出现乱码现象(text类型除外),
能不使用text类型就不要使用,因为text在数据库字段中他只是存储了一个指针而已,当你在查询时他首先要通过指针找具体内容然后再根据你的有求来查询,
这在效率上已经慢人一步了,并且需要用到convert函数转换后才能进行查询,这又慢人一步,整体效率就可想而知了。
3.日期型:主要是要注意你这个字段是需要精确到某一天还是某一天的时分秒,这主要是从数据库的整体大小考虑,数据库越大查询效率越低。
4.添加的每个字段都要不允许为空,因为一旦为空后在查询时你会增加一个不为null的判断,这是额外的负担,而且也是可以人为避免的
5.数据库的冗余字段,主要是用在一些统计方面,我们在数据库设计的初期虽然提要求的人没有这方面的需求,但我们必须事前做好准备,
应该考虑到后期需要做这样的功能,尽量把统计工作分散到日常的每个简单操作中去,提高统计页面统计速度
6.对数据库做适当的索引(索引就好像一本书的目录一样可以让你快速找到或者接近你要找的内容)
2.编码阶段
1.网站目录的架构
1.上传,需要把所有上传的文件都统一归到一个目录下并且设置为可写无执行权限,这样做有2个好处:
1.可以避免浏览者上传木马等恶意程序,因为已经把执行权限关闭了
2.如果整站需要换服务器或者多站需要共享文件的话可以很快速的做成一个虚拟目录的形式统一调用
3.设置方便
2.目录层次,一般在windows操作系统中如果一个目录中存放大约超过5000个文件的话,系统或者说磁盘的的寻道时间会在1-2秒或以上,这会使前台应用程序
产生额外的等待时间,如果这时访问量很大就很容易造成阻塞现象,解决的方法是尽量分多级目录(比如按年月日等),实践证明分3级目录是最科学有效的。
2.Sql语句
1.Sql语句和索引的关系,必须对经常用来查询的SQL语句建立索引并保证数据库确实使用了.
2.SQL语句必须很高效,如何实现,可以用查询分析器来分析判断,具体怎么使用和分析可以问我,这里不具体讲了.
3.SQL语句必须做到你的页面需要用到哪些数据你才去取哪些数据
4.Sql语句中不要出现datepart,convert等的函数,因为用这些函数表示需要数据库在计算完这些函数之后他才能返回给你数据,那这又会使前台页面产生
额外的等待时间,解决方法是我们宁愿从数据库中多取出数据然后再在页面中使用asp内置算法去计算,这样做后我们就把应该让数据库去计算的工作分散到
每个页面中去,浪费的只是CPU资源,而现在的CPU是完全够用的,而且可以让数据库马上释放资源迎接下一轮的查询,
5.SQL语句中不要使用Select中再次使用select的复合语句,一是语句混乱,二是效率低下,也不要使用<>,in,not in等带有不确定因素的方法,这些都是
导致效率低下的语句
3.分页
这个在asp和asp.net中已经有很好的解决方案,这里也不多讲了,自己看以前的代码就可以了
其他还有很多细节的地方,那只有在遇到时才能跟大家一起探讨。