Pages (21) « Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Next »

对squid中refresh_pattern的一些理解和建议

refresh_pattern的作用:

用于确定一个页面进入cache后,它在cache中停留的时间。refresh_pattern规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires头部,或者Cache-Control:max-age指令来指定过时期限。

语法:refresh_pattern [-i] regexp min percent max [options]

min参数是分钟数量。它是过时响应的最低时间限制。如果某个响应驻留在cache里的时间没有超过这个最低限制,那么它不会过期。类似的,max参数是存活响应的最高时间限制。如果某个响应驻留在cache里的时间高于这个最高限制,那么它必须被刷新。

在最低和最高时间限制之间的响应,会面对squid的最后修改系数LM-factor算法LM-factor=(response age)/(resource age)。对这样的响应,squid计算响应的年龄和最后修改系数,然后将它作为百分比值进行比较。响应年龄简单的就是从原始服务器产生,或最后一次验证响应后,经历的时间数量。源年龄在Last-Modified和Date头部之间是不同的。LM-factor是响应年龄与源年龄的比率。

常用的几个参数的意思

override-expire

该选项导致squid在检查Expires头部之前,先检查min值。这样,一个非零的min时间让squid返回一个未确认的cache命中,即使该响应准备过期。


refresh_pattern参数对squid的影响

在squid.conf.default里面,refresh_pattern参数下面的注释是这样的:

TAG: refresh_pattern

usage: refresh_pattern [-i] regex min percent max [options]

Basically a cached object is:

FRESH if expires < now, else STALE

STALE if age > max

FRESH if lm-factor < percent, else STALE

FRESH if age < min

else STALE

以上所有的时间都是以分钟为单位计算。 很容易看懂是不是?

refresh_pattern指出的缓冲对象过期了,这个对象过期。(这不是废话嘛!)

refresh_pattern指出的缓冲对象在squid的cache缓冲的时间大于max的话,这个对象过期。

refresh_pattern指出的缓冲对象的lm-factor大于等于percent的话,这个对象过期。

refresh_pattern指出的缓冲对象在squid的cache缓冲的时间小于min的话,这个对象不过期。

可是,这个lm-factor到底是怎么算的?有什么具体意义?估计好多同学搞不清楚了吧。来,look,下面的图:

上面这张图来自于《Squid.Definitive.Guide》第七章,对squid的LM-factor算法作出了一个很直观的描述。

请注意这张图的起始时间坐标:

Last-Modified,这个是由squid读取的原始web数据所规定的。

然后就是Date,这个是原始数据进入squid的缓冲的时间。

最后就是Expires,这个就是原始数据在squid中的缓冲过期时间。

可以很容易的得出结论,对于LM-factor算法来说,原始数据在squid中的缓冲时间为

(原始数据进入squid的缓冲的时间-原始web数据所规定的Last-Modified时间)*percent

所以,我们可以郑重得出结论,在squid的refresh_pattern设置中,percent与Min、Max两个值是完全没有关系!

最后总结一下,对于squid来说,缓冲的数据在cache中的存活时间是这样决定的:

如果有定义refresh_pattern:只要满足以下两个条件之一,缓冲对象过期

缓冲对象在squid的cache缓冲的时间大于refresh_pattern定义的max

缓冲对象在squid的cache缓冲的时间大于(原始数据进入squid的缓冲的时间-原始web数据所规定的Last-Modified时间)*percent

如果符合多个refresh_pattern定义,以第一条符合定义的refresh_pattern为准

如果没有符合定义的refresh_pattern,则按squid的默认处理规则

fckeditor php上传文件重命名的设置

我使用的fckeditor版本是fckeditor2.6.4.

fckeditor默认上传文件不没有重命名的,这样的话就很麻烦,有时上传中文的文件或者名称重复的文件就很恼火。

这里经过摸索:找到了一个重命名的方法,大家看看好不好使。

首先:我希望上传的文件根据日期来组织文件夹

请修改editor\editor\filemanager\connectors\php文件夹下的:config.php文件

找到如下的内容:

// Path to user files relative to the document root.

$Config['UserFilesPath'] =

修改为:

// Path to user files relative to the document root.

$Config['UserFilesPath'] = '/uploadfiles/'.date("Ym")."/" ;

这样上传的文件就按照日期存放了。

其次:重命名

请修改该文件夹下的io.php文件

找到:

// Do a cleanup of the file name to avoid possible problems

function SanitizeFileName( $sNewFileName )

{

global $Config ;

$sNewFileName = stripslashes( $sNewFileName ) ;

// Replace dots in the name with underscores (only one dot can be there... security issue).

if ( $Config['ForceSingleExtension'] )

 $sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ;

// Remove \ / | : ? * " < >

$sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>/', '_', $sNewFileName );

return $sNewFileName ;

}

修改为:

// Do a cleanup of the file name to avoid possible problems

function SanitizeFileName( $sNewFileName )

{

global $Config ;

$sNewFileName = stripslashes( $sNewFileName ) ;

// Replace dots in the name with underscores (only one dot can be there... security issue).

if ( $Config['ForceSingleExtension'] )

 $sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ;

$sExtension = substr( $sNewFileName, ( strrpos($sNewFileName, '.') + 1 ) ) ;

$sNewFileName = my_setfilename().'.'.$sExtension;

return $sNewFileName ;

}

function my_setfilename(){

$gettime = explode(' ',microtime());

$string = 'abcdefghijklmnopgrstuvwxyz0123456789';

$rand = '';

for ($x=0;$x<12;$x++)

 $rand .= substr($string,mt_rand(0,strlen($string)-1),1);

return date("ymdHis").substr($gettime[0],2,6).$rand;

}

这样上传的文件就可以实现重命名了。

网站前端优化的黄金法则

Web应用性能优化黄金法则:先优化前端程序(front-end)的性能,因为这是80%或以上的最终用户响应时间的花费所在。

法则1. 减少HTTP请求次数

80%的最终用户响应时间花在前端程序上,而其大部分时间则花在各种页面元素,如图像、样式表、脚本和Flash等,的下载上。减少页面元素将会减少HTTP请求次数。这是快速显示页面的关键所在。

一种减少页面元素个数的方法是简化页面设计。但是否存在其他方式,能做到既有丰富内容,又能获得快速响应时间呢?以下是这样一些技术:

Image maps组合多个图片到一张图片中。总文件大小变化不大,但减少了HTTP请求次数从而加快了页面显示速度。该方式只适合图片连续的情况;同时坐标的定义是烦人又容易出错的工作。

CSS Sprites是更好的方法。它可以组合页面中的图片到单个文件中,并使用CSS的background-image和background-position属性来现实所需的部分图片。

Inline images使用data: URL scheme来在页面中内嵌图片。这将增大HTML文件的大小。组合inline images到你的(缓存)样式表是既能较少HTTP请求,又能避免加大HTML文件大小的方法。

Combined files通过组合多个脚本文件到单一文件来减少HTTP请求次数。样式表也可采用类似方法处理。这个方法虽然简单,但没有得到大规模的使用。10大美国网站每页平均有7个脚本文件和2个样式表。当页面之间脚本和样式表变化很大时,该方式将遇到很大的挑战,但如果做到的话,将能加快响应时间。

减少HTTP请求次数是性能优化的起点。这最提高首次访问的效率起到很重要的作用。据Tenni Theurer的文章Browser Cache Usage - Exposed!描述,40-60%的日常访问是首次访问,因此为首次访问者加快页面访问速度是用户体验的关键。

我们的应用:

外贸: 将首页的几十个小图标合并为一个,通过CSS控制它们的显示,减少了HTTP请求数。


方便和实用

  很多设计师都会遇到这样的问题。一个产品会有很多种方式去包装,其中包括很多功能和很多体验。功能越多会被认为越实用,体验越好会被认为越方便。

  方便和实用之间到底是什么关系,设计师应该关注的是什么?有两点,一点是技术体验,一种是交互体验。作为一个交互设计师,要去考虑的更多是体验的问题,而并非功能的问题。

  举个例子,在一个移动媒体上需要安放日历的插件,设计师会去考虑在基础的日历功能上要不要加上农历,这个对于中国人来讲很实用,然而农历这个功能涉及到了技术的开发,算是一种技术瓶颈。当你发现技术无法完成你的要求时(当然农历这玩意儿对于中国山寨机来讲算是小菜一碟),你的日历插件依然是一个平庸的产品,这说明你没有关注技术体验。但是你换个角度来看,如果把日历上以星期一开头还是以星期天开头作为你设计研究方向的话,你会发现,中国人更习惯于星期一开头,这个在体验上给用户带来更多的价值,而且也不算是一个技术瓶颈,你也满足了技术体验和交互体验的结合。

  说到这里,大家应该明白方便比实用更体现设计的价值。

  刚才说的山寨机就是把一大堆功能都罗列在里面,虽然很实用但是每个都不好用,种种问题还是让很多人选择了高端的品牌,高端的体验,这就是设计的力量。

  作为一个设计师,不要一直依赖自己无法掌控的功能去实现自己的设计,老是天花乱坠的想着各式各样的功能去满足用户,从商业成本和用户满足感去讲都不是一个好的设计。越来越多的交互设计师感觉到自己没有什么作品,那是因为你依赖太多不是自己开发的功能,往往产品中只有你一点想法的影子,产品并没有被你的设计情感化。

  实用并非等于方便,但方便一定是实用的。

Pages (21) « Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Next »