Aug15

【原创】《构建高性能Web站点》读书笔记

Author: leeon  Click: 6415   Comments: 0 Category: 其他  Tag: 高性能,website

Etag Cache-Control Expires Last-Modified 这四者的区别?

答:Ctrl+F5 强制刷新,不使用本地cache,故对上述四者均无效。

      F5 对Etag(If-None-Match)和Last-Modified(If-Modified-Since)有效,会向服务器发起询问文件是否过期,如果没有过期会返回304,如果过期会返回200

     Expires 只对通过链接跳转和通过地址栏“转到”按钮有效。这样不会像服务器发起询问,只会扫描本地cache并返回给浏览器。这样速度是最快的

     Cache-Control用来记录max-age,这种标记是在HTTP1.1中出现的,用来弥补本地时间和服务器时间的不同导致缓存失效,max-age依据本地时间来进行cache,这样有效的保证了过期时间的确定性

 

sendfile--->直接将文件所在磁盘的特定部分传送给客户端的socket描述符

APC -->opcode缓存:(php.ini:apc.cache_by_default=on)是php转换后的解释代码直接做cache,这样做性能非常好。

Xcache

Xdebug-->WinCacheGrind(一款可以读取xdebug输出的profiler信息的工具)

Apache缓存

--> mod_disk_cache  和 mod__mem_cache(官方已放弃,原因为apache多进程模型下共享内存缓存的开销较大)

-->apache缓存可以识别:Last-modified 和expires 

 --> 可以通过设置:CacheIgnoreHeaders Set-cookie来避免有cookies的页面形成cache。

-->缓存文件描述符,apache可以通过:CacheFile /data/www/index.html 的方式来指定在apache cache中记录文件描述符,提升查找文件的速度。(当文件更新后,必须重启apche才能刷新cache。)

 

提高web服务和mysql服务在同一台主机上的性能

通常教科书是让我写

[code="php"]
mysql_connect("127.0.0.1","xxxx","xxxx");
[/code]

是的这样的连接方式是在同一台主机上形成tcp连接,但是这样的tcp握手是非常消耗资源的。我们为何不用mysql的另外一种连接方式socket来提升php与mysql的连接性能呢?

PHP手册中有提到socket的连接方式:

[code="php"]
// we connect to localhost and socket e.g. /tmp/mysql.sock

//variant 1: ommit localhost
$link = mysql_connect('/tmp/mysql', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);


// variant 2: with localhost
$link = mysql_connect('localhost:/tmp/mysql.sock', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>
[/code]

 Note:只要将 server 指定为 "localhost" 或 "localhost:port",MySQL 客户端库会越过此值并尝试连接到本地套接字(Windows 中的名字管道)。如果想用 TCP/IP,应该用 "127.0.0.1" 代替 "localhost"。如果 MySQL 客户端库试图连接到一个错误的本地套接字,则应该在 PHP 配置中设定 MySQL 的正确路径并把 server 留空。

从这里可以知道写成localhost php还是会自动连接套接字,如果写成127.0.0.1的话就用TCP/IP模式连接了

对于静态网页可以从以下几点进行优化:

1. 支持epoll

2. 非阻塞I/O

3. 异步I/O

4. 使用sendfile系统调用

5. 单进程

6. 使用高速磁盘

7. 使用RAID分区

8. 购买足够的带宽

 

MySQL一些小记:

innodb_flush_log_at_trx_commit:

0: Innodb 中的Log Thread 每隔1 秒钟会将log buffer中的数据写入到文件,同时还会通知文件系统进行文件同步的flush 操作,保证数据确实已经写入到磁盘上面的物理文件。但是,每次事务的结束(commit 或者是rollback)并不会触发Log Thread 将log buffer 中的数据写入文件。所以,当设置为0 的时候,当MySQL Crash 和OS Crash 或者主机断电之后,最极端的情况是丢失1 秒时间的数据变更。事务提交后不立即将事务写入磁盘,而是每隔一秒写入磁盘一次,并刷新到磁盘,同时更新数据和索引。mysql崩溃内存中的事务日志缓冲区最近一秒的数据将会丢失,无法恢复。

1: 这也是Innodb 的默认设置。我们每次事务的结束都会触发Log Thread 将log buffer 中的数据写入文件并通知文件系统同步文件。这个设置是最安全的设置,能够保证不论是MySQL Crash 还是OS Crash 或者是主机断电都不会丢失任何已经提交的数据。

2: 事务提交后立即将事务日志写入磁盘,但是不刷新磁盘,而是每隔一秒刷新到磁盘一次,同时更新数据和索引,这种情况下mysql crash后数据是可以恢复的,但是系统挂了就恢复不了最后一秒的数据。

写入磁盘:表示写入物理内存中的内核缓冲区。

刷新磁盘:表示将内核缓冲区的数据真正写入磁盘。

增加mysql线程数量:my.cnf--->thread_cache_size=100 增加到100个线程

Jul1

专业的Web原型设计工具推荐

Author: leeon  Click: 7910   Comments: 0 Category: 其他  Tag: Pencil,原型设计,交互设计

http://pencil.evolus.vn/en-US/Home.aspx

The Pencil Project's unique mission is to build a free and opensource tool for making diagrams and GUI prototyping that everyone can use.

Top features:

  • Built-in stencils for diagraming and prototyping
  • Multi-page document with background page
  • Inter-page linkings!
  • On-screen text editing with rich-text supports
  • Exporting to HTML, PNG, Openoffice.org document, Word document and PDF.
  • Undo/redo supports
  • Installing user-defined stencils and templates
  • Standard drawing operations: aligning, z-ordering, scaling, rotating...
  • Cross-platforms
  • Adding external objects
  • Personal Collection
  • Clipart Browser
  • Object snapping
  • Sketchy Stencil
  • And much more...

相当赞的Web原型设计工具,插件很小巧,安装到Firefox 3.5+即可使用。

Jun6

修改windows7中的OEM信息

Author: leeon  Click: 7430   Comments: 4 Category: 其他  Tag: windows
Windows7 OEM 信息手动修改方法/步骤:

1> 打开注册表编辑器:
开始菜单 -> 运行 -> 输入 "regedit"

2> 在注册表编辑器中,定位到如下位置(若没有则建立):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation

3> 在其下建立如下内容(字符串项):
"Manufacturer"="OEM厂商名称" (如图中:位置1)
"Model"="计算机型号" (如图中:位置2)
"SupportPhone"="客服电话号码" (如图中:位置3)
"SupportHours"="客服服务时间" (如图中:位置4)
"SupportURL"="支持网址" (如图中:位置5 | 如:http://www.google.com)
"Logo"="OEM LOGO 图片位置" (如图中:图片1 | 如:C:\Windows\system32\oobe\Info\oemlogo.bmp | 说明:图片大小需为 120x120 像素

4> 在注册表编辑器中,定位到如下位置(若没有则建立):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winsat\WindowsExperienceIndexOemInfo

5> 在其下建立如下内容(字符串项):
"Logo"="OEM LOGO 图片位置"
(与步骤3中相同)

至此全部完成!

最后,无需重启,关闭注册表编辑器,刷新桌面,右键点击"我的电脑"选择"属性"菜单项,即可查看更改后的 OEM 信息。
May19

IE中PNG图片无法正常显示的解决办法

Author: leeon  Click: 6348   Comments: 0 Category: 其他  Tag: png,pngfilt

如果你的IE中有些文件无法正常显示,你可以点击右键查看是否是PNG文件,如果是png文件,那么可以这样解决问题,下载符合你系统的pngfilt.dll
放入:
C:\WINDOWS\system32\ 目录下覆盖源文件。
如果提示无法覆盖等提示,那么请关闭所有的应用程序,包括QQ,浏览器等。

分类

标签

归档

最新评论

Abyss在00:04:28评论了
Linux中ramdisk,tmpfs,ramfs的介绍与性能测试
shallwe99在10:21:17评论了
【原创】如何在微信小程序开发中正确的使用vant ui组件
默一在09:04:53评论了
Berkeley DB 由浅入深【转自架构师杨建】
Memory在14:09:22评论了
【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)
leo在17:57:04评论了
shell中使用while循环ssh的注意事项

我看过的书

链接

其他

访问本站种子 本站平均热度:8823 c° 本站链接数:1 个 本站标签数:464 个 本站被评论次数:94 次