1.1 Form对象

现有问题:
现有代码这获得form对象通过document.forms("formName"),这样使用在IE 能接受,FF 不能。

解决方法:
改用 作为下标运算。改为document.forms["formName"]

备注
上述的改用 作为下标运算中的formName是id而name


1.2 HTML对象

现有问题:
在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 FF 中不能。
document.all("itemName")或者document.all("itemId")

解决方法:
使用对象ID作为对象变量名
document.getElementById("itemId")

备注
document.all是IE自定义的方法,所以请大家尽量不使用。
还有一种方式,在IE和FF都可以使用
var f = document.forms["formName "];
var o = f. itemId;


1.3 DIV对象

现有问题:
在 IE 中,DIV对象可以使用ID作为对象变量名直接使用。在 FF 中不能。
DivId.style.display = "none"

解决方法:
document.getElementById("DivId").style.display = "none"

备注
获得对象的方法不管是不是DIV对象,都使用getElementById方法。参见1.2


1.4 关于frame

现有问题
在 IE中 可以用window.testFrame取得该frame,FF中不行

解决方法
在frame的使用方面FF和IE的最主要的区别是:
如果在frame标签中书写了以下属性:

那么IE可以通过id或者name访问这个frame对应的window对象
而FF只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
IE: window.top.frameId或者window.top.frameName来访问这个window对象
FF:只能这样window.top.frameName来访问这个window对象
另外,在FF和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容
也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容


1.5 窗口

现有问题
IE中可以通过showModalDialog和showModelessDialog打开模态和非模态窗口,但是FF不支持。

解决办法
直接使用window.open(pageURL,name,parameters)方式打开新窗口。
如果需要传递参数,可以使用frame或者iframe。


2.1 在JS中定义各种对象变量名时,尽量使用id,避免使用name。
在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 FF 中不能,所以在平常使用时请尽量使用id,避免只使用name,而不使用id。


2.2 变量名与某 HTML 对象 id 相同的问题

现有问题
在 FF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。  

解决方法
在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。  
Tags: , ,
如果当你的服务器非常慢,使用top命令看到processes超多的时候,一般超过120(apche默认设置的时候)就会影响服务器的性能。那么应该如何检查呢?

首先使用
netstat -nat|grep -i "80"|wc -l
查看一下访问80端口有多少人?

再用
ps -ef|grep httpd|wc -l
查看一下httpd消耗了多少进程

如果链接很多的话。可以使用这个命令可以查出哪个IP地址连接最多,将其封了.
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n
netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n

找到以后,就在IPfw里面封掉IP,或者在apache里面禁止为该IP服务。
Tags:
  搜索引擎,对页面各个元素的权重比例。

  Inbound link text: 10 points.
  title: 10 points.
  domain name: 7 points.
  large h1-h2 headings: 5 points.
  first sentence of first paragraph: 5 points.
  path or filename: 4 points.
  proximity (multi kws): 4 points.
  beginning of a sentence 1.5 points.
  bold or italic text: 1 point.
  usage in text: 1 point.
  title attribute: 1 point.
  alt tag: .5 point.
  meta descrip: .5 point.
  meta keywords: .05 point.

  中文版:
  外部链接文字:10分
  标题:10分
  域名:7分
  H1,H2字号标题:5分
  每段首句:5分
  路径或文件名:4分
  相似度(关键词堆积):4分
  每句开头:1.5分
  加粗或斜体:1分
  文本用法:1分
  title属性:1分
  alt标记:0.5分
  Meta描述(Description):0.5分
  Meta关键词(Keywords):0.05分
Tags:

MPM优化你的Apache

2008/11/14 21:56 ArthurXF
Apache 2.0在性能上的改善最吸引人。在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能。相比于Apache 1.3,2.0版本做了大量的优化来提升处理能力和可伸缩性,并且大多数改进在默认状态下即可生效。但是在编译和运行时刻,2.0也有许多可以显著提高性能的选择。

MPM(Multi -Processing Modules,多道处理模块)是Apache2.0中影响性能的最核心特性。

毫不夸张地说,MPM的引入是Apache 2.0最重要的变化。大家知道,Apache是基于模块化的设计,而Apache 2.0更扩展了模块化设计到Web服务器的最基本功能。服务器装载了一种多道处理模块,负责绑定本机网络端口、接受请求,并调度子进程来处理请求。扩展模块化设计有两个重要好处:  

  ◆ Apache可以更简洁、有效地支持多种操作系统;  

  ◆ 服务器可以按站点的特殊需要进行自定制。  

在用户级,MPM看起来和其它Apache模块非常类似。主要区别是在任意时刻只能有一种MPM被装载到服务器中。

下面以Linux RedHat AS3为平台,演示一下在Apache 2.0中如何指定MPM。

# wget http://archive.apache.org/dist/httpd/httpd-2.0.52.tar.bz2
# tar jxvf httpd-2.0.52.tar.bz2
# cd httpd-2.0.52
# ./configure --help|grep mpm

显示如下: --with-mpm=MPM Choose the process model for Apache to use. MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}

上述操作用来选择要使用的进程模型,即哪种MPM模块。Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM, perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程。这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版中的SuExec 机制做得更好。leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作,所以 Apache官方也并不推荐使用。因此,我们主要阐述prefork和worker这两种和性能关系最大的产品级MPM。

prefork的工作原理
  如果不用“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM。它所采用的预派生子进程方式也是 Apache 1.3中采用的模式。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。
   prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足 MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。

worker的工作原理
   相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。
   worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

# 下面我以worker模式进行编译安装
# ./configure --prefix=/usr/local/apache --with-mpm=worker --enable-so(让它支持DSO功能,这样以后可以动态加载模块)
# make  
# make install
# cd /usr/local/apache/conf
# vi httpd.conf
; StartServers 2 MaxClients 150 ServerLimit 25 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 25 ThreadsPerChild 25 MaxRequestsPerChild 0 ;

Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)

需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是笔者的 worker配置段:
; StartServers 3 MaxClients 1600 ServerLimit 50 MinSpareThreads 50 MaxSpareThreads 200 ThreadLimit 64 ThreadsPerChild 32 MaxRequestsPerChild 0 ;
# 保存退出。
# /usr/local/apache/bin/apachectl start
# 可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。

二、限制Apache并发连接数
我们知道当网站以http方式提供软件下载时,若是每个用户都开启多个线程并没有带宽的限制,将很快达到http的最大连接数或者造成网络阻塞,使得网站的许多正常服务都无法运行。下面我们添加mod_limitipconn模块,来控制http的并发连接数。

# wget http://dominia.org/djao/limit/mod_limitipconn-0.22.tar.gz
# tar zxvf mod_limitipconn-0.22.tar.gz
# cd mod_limitipconn-0.22
# /usr/local/apache/bin/ apxs -c -i -a mod_limitipconn.c
# 编译好后会自动把mod_rewrite.so拷贝到/usr/local/apache/modules下,并修改你的httpd.conf文件。
# vi /usr/local/apache/conf/httpd.conf
# 在最后一行加入;;  #所限制的目录所在,此处表示主机的根目录MaxConnPerIP 2  #所限制的每个IP并发连接数为2个;;
# 保存退出。
# /usr/local/apache/bin/apachectl start
# 下面我们用蚂蚁或快车测试一下,如图1:
 
如出现上述图所示,则表明配置成功。

三、防止文件被盗链
我们刚才已经限制了IP并发数,但如果对方把链接盗链到别的页面,我们刚才做的就毫无意义了,因为他完全可以通过蚂蚁或快车进行下载。所以就这种情况,我们要引用mod_rewrite.so模块。这样,当他盗链了文件,通过mod_rewrite.so模块把页面引到了一个事先我们制定好的错误页面里,这样就防止了盗链。
# /usr/local/apache/bin/apxs -c -i -a /opt/httpd-2.0.52/modules/mappers/mod_rewrite.c
# 编译好后会自动把mod_rewrite.so拷贝到/usr/local/apache/modules下,并修改你的httpd.conf文件。
# vi /usr/local/apache/conf/httpd.conf
RewriteEngine onRewriteCond %{HTTP_REFERER} !^http://www.squall.cn/.*$ [NC]RewriteCond %{HTTP_REFERER} !^http://www.squall.cn$ [NC]RewriteCond %{HTTP_REFERER} !^http://squall.cn/.*$ [NC]RewriteCond %{HTTP_REFERER} !^http://squall.cn$ [NC]RewriteRule .*\.(jpg|gif|png|bmp|tar|gz|rar|zip|exe)$ http://www.squall.cn/error.htm [R,NC]
# 我们打开浏览器测试一下,如图2:
 
通过我做的[url=http://www.grlinux.net/squall/steal_link.rar]动画演示,大家也可进一步了解。

到此,我们就对Apache做了一次全面优化,性能比原来明显地有了很大的提高。这次实施过程到此也就圆满的结束了。相信大家通过读完我的这篇文章后,对Apache优化也有了一些心得,相信你在工作中也会处理好突发事件。

[url=http://bbs.chinaunix.net/forum/viewtopic.php?t=527895&highlight=限速]利用bw_mod.so模块对Apache2.X做带宽流量限制
Tags: ,

  网上针对这个问题流传着一种修改注册表的方法,其实那些都太麻烦了,看看我ArthurXF提供的最简单的修改办法。

先打开http://www.microsoft.com/windows/ie/searchguide/zh-chs/default.mspx?dcsref=http://runonce.msn.com/runonce2.aspx

直接点左边的百度搜索,安装上去之后,把这个新安装的设定为默认,再把之前安装的那个百度搜索删掉。一切OK了,多简单啊。

Tags: ,
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]