[译]Efficient, maintainable CSS
翻译自 Russ Weakley 的 Efficient, maintainable CSS
翻译自Russ大师的一篇关于如何书写高效、可维护、组件化的CSS的演示文档。Enjoy~
By admin
read more翻译自Russ大师的一篇关于如何书写高效、可维护、组件化的CSS的演示文档。Enjoy~
By admin
read more翻译自 Russ Weakley 的Line Height
一个简单的, step-by-step 关于 CSS 行高的演示文档, 涵盖行间距, 如何应用各种类型的行高值, 当然还有 inline box 模型介绍, 希望能满足您 (但实战应用在中文字体或中英文字体混合,以及IE678,XP win7里,行高规则又有所不同,泪流满面)
By admin
read more表分区为海量数据的存储提供了一种更有效率的储存方式,可通过分区将表的数据分开存储在不同的磁盘上,提高数据检索和操作的效率。
在SQL Server中进行表分区操作,包括三个步骤:
CREATE PARTITION FUNCTION FN_Partition AS RANGE LEFT FOR VALUES (N’2008-01-01T23:59:59′, N’2009-01-01T23:59:59′, N’2010-01-01T23:59:59′)
此分区函数采用时间进行分区,共有4个分区,边界值为括号里的时间值
第一个分区为: 时间 第二个分区为: N’2008-01-01T23:59:59′< 时间 第三个分区为: N’2009-01-01T23:59:59′< 时间 第四个分区为: 时间>N’2010-01-01T23:59:59′
CREATE PARTITION SCHEME [SE_Partition] AS PARTITION [FN_Partition] TO ([xmsddgroup1], [xmsddgroup2], [xmsddgroup3])
此步骤把分区连接到指定的文件组,定义分区的位置
使用已经做好的分区函数,创建表,就实现了表数据按指定的分区方案存储。注意需指定分区的字段
CREATE TABLE users(ID int,Name nvarchr(40), RegDate Datetime) ONcustomer_partscheme(RegDate)
本例中,<code>若
users为用户注册表,字段RegDate为用户注册日期,那么用户数据将按照注册日期,按 2008年之前,2008年,2009年,2010年后注册的用户分别存储在不同的文件组中,实现表分区。
By admin
read more这里Web组件指Web服务器提供的所有基于URL访问的资源,比如动态内容,图片,Javascript脚本,CSS样式表
我们可以从以下几个方面来看这些Web组件的差异
文件大小
文件数量
内容更新频率
预计并发用户数
是否需要脚本解释器
是否涉及大量CPU计算
是否访问数据库
访问数据库的操作主要是读还是写
是否包含远程调用(RPC)
值得一提的是,即便是同一Web组件,显然也存在特点的差异,比如负责呈现内容的动态网页和负责用户注册的动态网页,可以
视为不用的用户组件,再比如由用户上传的大尺寸照片和站点网页的小尺寸修饰图片也存在以上方面的差异,也可以将它们区分对待。
web组件分离的目的是便于采用针对性的方法,使得各种Web组件能够充分利用服务器资源。如何实现web组件分离呢?
最常见的做法是拥有不同的域名:
如:img.run21.cn
存放网页中的图片,指向服务器A
upload.run21.cn
存放用户上传的照片,指向服务器B
static.run21.cn
存放静态化的网页,指向服务器C
js.run21.cn
存放javascript脚本文件,指向服务器D
当我们用不同的域名对Web组件进行分离后,另一个好处是提高了浏览器在下载Web组件时的并发数。
当浏览器打开一个网页的时候,浏览器首先下载网页本身,也就是HTML,然后分析这些HTML标记,同时逐步下载其中包含的
一系列组件。然而浏览器下载组件的过程受到最大并发数的限制,也就是浏览器同一时刻最多只可以下载一定数量的组件。
那为什么Web组件分离后会提高浏览器的并发数呢?其实,浏览器的最大并发数限制有一个前提,那就是对同一个域名下
的组件才有效,也就是说浏览器会为每个域名维护不同的下载队列,这样浏览器的下载并发数将增多,整体下载速度也随之提高。
By admin
read more人们评估一个web站点的性能如何,通常先置身于用户的角度,访问该站点的一系列页面,体验等待时间
在等待的时间里,大概经历了以下几部分的时间
数据在网络上的传输时间
站点服务器处理请求并生成回应数据的时间
浏览器本地计算和渲染的时间
作为web开发人员, 大部份情况下只要从”站点服务器处理请求并生成回应数据的时间”这点去考虑和设计, 尽量的减少在这一过程的时间,针对提高站点性能上的优化大概总结有如下方案.
1. 增加宽带
2. 减少网页的http请求
在不影响美观和功能的情况下,尽量减少图片和脚本
将多个图片合并为一个文件,利用CSS背景图片和偏移技术呈现在网页中,避免多个图片的下载
合并Javascript或者CSS
使用浏览器端的Cache策略,减少重复下载
3.加快服务器脚本运算速度
脚本语言编写的程序文件需要通过相应的脚本解释器进行解释后生成中间代码,脚本加速就是在这一过程中减少生成中间代码的时间。对于一些拥有较强商业 支持的脚本语言 ,比如Java和ASP.NET,均有内置的优化方案,如解释器对某个脚本程序第一次解释的时候,将中间代码缓存起来,以供下次直接使 用。对于开源类的脚本语言,也有很多的第三方组件来提供此功能,比如PHP的APC组件等。
4. 使用动态内容缓存
减少动态内容的重复计算,截取已经生成的动态内容,将动态内容的HTML输出结果缓存起来,在随后的一段时间内当有用户访问时便跳过重复的动态内容 计算而直接输入。
5. 使用数据缓存
与动态内容缓存将数据和表现整体打包相比,数据缓存主要是针对一些特殊数据,这些数据或者更新过于频繁,或者消耗大量的IO等待时间。如果将整个网 页全部缓存,对网页的其他部分内容似乎也不公平,于是引入部分数据缓存的概念和方法。
6. 将动态内容静态化
在动态内容缓存实现机制中,还是都要调用动态脚本解释器来判断缓存是否过期以及读取缓存,这似乎某些情况下也有些多余.若将网页直接静态化,生成 HTML,就不用消耗脚本解释器的时间。
页面组件分离
合理部署服务器
使用负载均衡
优化数据库
考虑可扩展性
By admin
read more一、使用缓存
要开启smarty的缓存,只需将caching设为true,并指定cache_dir即可.
使用cache_lefetime指定 缓存生存时间,单位为秒
要对相同页面生成多个不同的缓存,在display或fetch中加入第二参数cache_id, 如$smarty->display(‘index.tpl’,$my_cache_id);此特性可用于对不同的$_GET进行不同的缓存
二、清除缓存
clear_all_cache();//清除所有缓存
clear_cache(‘index.tpl’);// 清除index.tpl的缓存
clear_cache(‘index.tpl’,cache_id);//清除指定id的缓存
三、使用自定义缓存方式
设置cache_handler_func使用自定义的函数处理缓存
如:
$smarty->cache_handler_func = “myCache”;
function myCache($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null){
}
该 函数的一般是根椐$action来判断缓存当前操作:
switch($action){
case “read”://读取缓存内容
case “write”://写入缓存
case “clear”://清空
}
一般使用 md5($tpl_file.$cache_id.$compile_id)作为唯一的cache_id
如果需要,可使用gzcompress和 gzuncompress来压缩和解压
四、局部关闭缓存
要在某些区域使缓存失效(只对需要的缓存),有几种方法:
inser:
定 义一个inser标签要使用的处理函数,函数名格式为:insert_xx(array $params, object &$smarty)其中的xx是insert的name,也就是说,如果你定义的函数为insert_abc,则模板中使用方法为{insert name=’abc’}
参数通过$params传入
也可以做成insert插件,文件名命名为:insert.xx.php,函数命名 为:smarty_insert_aa($params,&$smarty),xx定义同上
register_block: 定 义一个block:smarty_block_name($params,$content, &$smarty){return $content;} //name表示区域名
注册block:$smarty->register_block(‘name’, ‘smarty_block_name’, false); //第三参数false表示该区域不被缓存
模板写法:{name}内容 {/name}
写成block插件:
1)定义一件插件函数:block.cacheless.php,放在smarty的plugins目录
block.cacheless.php 的内容如下:
function smarty_block_cacheless($param, $content, &$smarty) {
By admin
read more1. 语法:命名规则
CREATE TRIGGER <触发器名称> <– { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON <表名称> FOR EACH ROW <触发器SQL语句>
触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
这里我有个习惯:就是用表的名字+’_’+触发器类型的缩写.因此如果是表t26,触发器是在事件UPDATE(参考下面的点(2)和(3))之前 (BEFORE)的,那么它的名字就是t26_bu。
2. 语法:触发时间
CREATE TRIGGER <触发器名称> { BEFORE | AFTER } <– { INSERT | UPDATE | DELETE } ON <表名称> FOR EACH ROW <触发的SQL语句>
触发器有执行的时间设置:可以设置为事件发生前或后 BEFORE | AFTER 。
3. 语法:事件
CREATE TRIGGER <触发器名称> { BEFORE | AFTER } { INSERT | UPDATE | DELETE } <– ON <表名称> FOR EACH ROW <触发的SQL语句>
By admin
read more简介: 一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。
一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。
创建存储 过程:
语法:
CREATE PROCEDURE p()
BEGIN
/此存储过程的正文/
END
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(pro_price) AS priceaverage
FROMproducts;
END;
调用存储 过程的方法是:
CALL productpricing();
删除存储 过程的方法是:
DROP PROCUDURE productpricing;
创建带参 数的存储过程:
CREATE PROCUDURE productpricing(
OUT p1 DECIMAL(8,2),
OUT ph DECIMAL(8,2),
OUT pa DECIMAL(8,2)
)
BEGIN
SELECT Min(prod_price) INTO pl FROM products;
SELECT Max(prod_price) INTO ph FROM products;
SELECT Avg(prod_price) INTO pa FROM products;
By admin
read more1.从http://code.google.com/p/apploader/下载AppLoader并安装。
2.运行AppLoader Configure。
3.在Application File Name选择C:\Program Files\VMware\VMware Workstation\vmware.exe。
4.在Args输入 -x “D:\VM backup\Windows XP Professional\Windows XP Professional.vmx”。(引号内是虚拟文件名,自行修改)。
5.保存。
6.在services中重启RapidHorse Apploader的服务进行测试,以后关机重启时都将启动vmware。其他应用程序也如此处理。
7.注:vmware启动时会询问一些问题,一般都选择“下次不再出现”,另外为了防止启动时出现更新提示,preferences中的check for updates设置为never。
方法2 第一步
首先 打开虚拟机的主窗口 编辑 参数 同时勾上以下两个选项 在关闭后在后台运行电源已打开的虚拟机 虚拟机电源打开时显示托盘图标 选上后确定 关闭虚拟机
第二步
此时例如你的虚拟机的虚拟磁盘相应文件保存在
E:\Windows XP Professional\ 目录下 其配置文件名为 Windows XP Professional.vmx 打开记事本并写入相应命令 命令内容如下
start /min vmware.exe -x “E:\Windows XP Professional\Windows XP Professional.vmx” ping -n 10 127.0.0.1>nul 2>nul taskkill /im vmware.exe /f exit
编写完以后保存到虚拟机目录下 例如 C:\Program Files\VMware\VMware Workstation 文件名为 自动运行虚拟机.bat (文件名可以任意 只要后缀名没错就行)
By admin
read more来到新公司以后开始使用VMWare Workstation V6。这个新版本允许在有运行中的虚拟机时切换到后台运行,VMWare不再占用任务栏空间,这个平时不会使用的程序窗口也不会被切换出来。如果在菜单 “编辑”->“参数”->标签页“工作区间”中选择了“虚拟机电源打开时显示托盘图标”,被切换到后台的VMWare就会在系统托盘里留下一 个图标,可以用它再将VMWare切换到前台。不过我没有看到过这个图标,想来是我的VMWare并没有安装,而是从一个可执行程序中直接运行的。
By admin
read more1、如果未安装Apache。编译时,加上–enable-deflate,例如:(仅针对Linux版,Windows版无须此步骤) ./configure –prefix=/usr/local/apache –enable-rewrite –enable-so –enable-deflate
2、如果已安装Apache。添加mod_deflate模块,例如:(仅针对Linux版,Windows版无须此步骤) /usr/local/apache/bin/apxs -i -a -c /home/zhangyan/software/httpd-2.0.59/modules/filters/mod_deflate.c 注:/home/zhangyan/software/httpd-2.0.59/为Apache源码路径。
3、进行以上步骤后,会在httpd.conf中自动加入一行:(Windows版请将下行最前面的#号去掉)
LoadModule deflate_module modules/mod_deflate.so
4、 编辑httpd.conf,增加: Linux版:
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
#LogFormat ‘”%r” %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate
#CustomLog logs/deflate_log.log deflate
Windows版:
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
#LogFormat ‘”%r” %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate
#CustomLog logs/deflate_log.log deflate
如果将#号去掉,可以在logs/deflate_log.log日志文件中看到文件压缩前后的字节数、压缩比,例如: “GET /index.html HTTP/1.1″ 49373/276249 (17%) 压缩前的字节数为276249,压缩后的字节数为49373,压缩比为17%
By admin
read moreYSlow分析网页,并提出如何提高其性能的基础上一套规则,高性能的网页。我搜索一下”Yslow使用说明“,发现都是旧版本Yslow的使用介 绍。于是翻译了一下yahoo官方关于新版Yslow的的使用帮助,希望给初次使用Yslow的朋友一些帮助。
注:英文不是很好,对着翻译软件翻译的,有不对的地方,大家指正。
先安装 Firebug https://addons.mozilla.org/en-US/firefox/addon/1843
Firebug 帮助文档 http://www.getfirebug.com/docs.html.
再下载安装 http://developer.yahoo.com/yslow
使用Yslow
Yslow是运行在Firebug窗口下,所有要运行Yslow,必须安装Firebug。
有两种方法启动Yslow
1、打开Firebug窗口,选择Yslow选项。
2、直接点击浏览器右下角的Yslow启动按钮。
你第一次打开Yslow时,以下图像作为Firebug的一部分被显示在的浏览器窗口。
点击 Run Test 运行Yslow,也可以点击 Grade, Components, 或Statistics选项开始对页面的分析。
你可以选择 Autorun YSlow each time a web page is loaded 它将自动对以后打开页面进行分析,
您也可以右击YSlow状态栏,然后选择或取消自动运行。
Yslow视图
YSlow显示测试结果的分析,分为等级、组件、统计信息。你可以浏览这些观点之间选择标签以观的名字在YSlow标签的Firebug控制台。
以下是说明的等级、组件、统计信息。
一、等级视图
查看一个分析,选择页面的性能等级标签或点击网页的字母等级在状态栏这页纸的底部。
视图显示了等级为网页的成绩单。整个字母等级为页面显示在顶部随着全面数值的表现。这个页面是基于22可分级的高性能网页的规则(见性能规则)。这些规则是列在按重要性的顺序,从最重要不重要。从 A 级到 F 级,A 级为最高。
下面是一个等级的例子:
如果页面与某一个规则无关,则显示 N/A ,表示不适用。
点击每一规则,都给出了改进建议。要查看更全面的改进方法进入前端性能优化指南
二、组件视图
分组显示页面组件,表格列出组件的信息,点击 Expand All展开显示给个分 组内各的组件信息。
下面简要列在组件检视表:
TYPE:该组件的类 型。该网页是由组成部分的下列类型: doc, js, css, flash, cssimage, image, redirect, favicon, xhr, and iframe.
By admin
read more在 [Yahoo][1] 开 发者网站上,Yahoo 提出了 优 化网站性能的N条规则(Best Practices for Speeding Up Your Web Site)。这些规则是:
尽可能的减少 HTTP 的请求数(Minimize HTTP Requests) —— Tag: content
使用 CDN(Use a Content Delivery Network) —— Tag: server
添加 Expires 头(或者 Cache-control ) (Add an Expires or a Cache-Control Header) —— Tag: server
Gzip 组件(Gzip Components) —— Tag: server
将 CSS 样式放在页面的上方 (Put Stylesheets at the Top) —— Tag: css
将脚本移动到底部(包括内联的)(Put Scripts at the Bottom) —— Tag: javascript
By admin
read more正确使用Etag和Expires标识处理,可以使得页面更加有效被Cache。
在客户端通过浏览器发出第一次请求某一个URL时,根据 HTTP 协议的规定,浏览器会向服务器传送报头(Http Request Header),服务器端响应同时记录相关属性标记(Http Reponse Header),服务器端的返回状态会是200,格式类似如下:
HTTP/1.1 200 OK
Date: Tue, 03 Mar 2009 04:58:40 GMT
Content-Type: image/jpeg
Content-Length: 83185
Last-Modified: Tue, 24 Feb 2009 08:01:04 GMT
Cache-Control: max-age=2592000
Expires: Thu, 02 Apr 2009 05:14:08 GMT
Etag: “5d8c72a5edda8d6a:3239″
客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送报头(Http Request Header),服务器端响应并记录相关记录属性标记文件没有发生改动,服务器端返回304,直接从缓存中读取:
HTTP/1.x 304 Not Modified
Date: Tue, 03 Mar 2009 05:03:56 GMT
Content-Type: image/jpeg
Content-Length: 83185
Last-Modified: Tue, 24 Feb 2009 08:01:04 GMT
By admin
read more平时我用一般用Yslow这个ff下的插件来检查网页的好坏,其中有一项为添加文件过期头.
实施这一方法将节省你难以置信数额的带宽,极大地加快你的网站为你的网站访客。基本上,对于图片,CSS , JavaScript以及其他文件可以通过优化更快的下载,告诉你的网站访问者快取记忆体,为他们在某一段时间内。默认的行为是每一次请求检查文件的 last-modified 和/或者 Etag headers。 所以一个用户去/home/index.html,及浏览器缓存所有图象和文件。然后用户离开网站稍后回来,与浏览器发送If-Modified- Since 有条件的GET 请求为每一个缓存的项目时,基本上看,如果文件已被改变和他们必须更新他们的缓存。
当你执行在这篇文章中所述的缓存方法,你可以指定某文件或扩展名被缓存为某一特定数额的时间。这些文件然后缓存在你的网站访客和他们不发送If- Modified-Since头直到设置的缓存时间已经到了。 #================================================= ============================# # TIME CHEAT SHEET #================================================= ============================# # 300 5 M # 604800 1 W # 2700 45 M # 1814400 3 W # 3600 1 H # 2419200 1 M # 54000 15 H # 14515200 6 M # 86400 1 D # 26611200 11 M # 518400 6 D # 29030400 1 Y (never expire)
By admin
read more