读 《构建可扩展的Web站点》笔记

 

从目录中就可以看出来这是一本超越纯粹代码范畴的书涉及到开发工具开发方法开发过程体系结构应用分层常用web功能举例和注意事项性能瓶颈扩展并提出一些解决方法最后还涉及到性能的监控方法.

 

扩展Web应用程序

 

一、概念

 

简单的来说,如果一个系统可扩展,那么你可以通过扩展来提供系统的性能。这代表着系统能够容纳更高的负载、更大的数据集,并且系统是可维护的。扩展和语言、某项具体的技术都是无关的。扩展可以分为两种:

1. 垂直扩展(stade up),通俗的说就是将某台单一的机器的性能提升的更高,如添加内存、更换更强的处理器等等。

2. 水平扩展(out),通俗的说就是添加新的机器。

对比可以发现,水平扩展比垂直扩展有更强大的扩展性,可以说是“无限”扩展,毕竟单台的机器的性能总是有限的,硬件的技术发展还赶不上web的发展。但同时,水平扩展也来了更高的维护成本。实际中,需要根据具体情况来寻求一个平衡点。 (全文…)

折腾了许久WP,终于找到了比较好的高亮方案

WP固然强大,但是其编辑器一直是比较鸡肋的。今晚折腾了挺久终于放弃了WP自带的编辑器,而改用强大的FCK。之后就可以不使用代码高亮插件了,方法如下:

1.本地将IDE编写的代码复制进WORD

2.拷贝WORD的代码,如浏览器有访问剪切板的提示则选择允许,OK,代码高亮了。

限制:某些IDE的代码拷贝到WORD后颜色会丢失(基于Java开发的貌似都不会,而DW之内的则会丢失)

 

 

PHP中memcache扩展set失败的解决

在代码中遇到了memcache set方法失败的问题,无任何错误提示,PHP的memcache扩展本身也没有debug或者error提示。同样的代码,将本地的环境跟服务器的环境对比了一下(在服务器端一直没有遇到这个问题),发现原来是我所使用的php memcache扩展版本较低导致的。PECL有个bug报告http://pecl.php.net/bugs/bug.php?id=9486 ,也是提到这个问题了,在新的版本中已经解决了(2.1.1)。

使用php的memcache扩展时,如果给set/get方法传递一个空值(NULL),则会导致memcached服务端主动关闭连接,见如下的代码示范:
 

$mem new Memcache();

$mem->connect(’192.168.64.12′’11211′);

$mem->set(‘aaa’array(‘aaa’)); //成功

$mem->set($aaaa‘aaaa’); //失败,并导致到memcached服务器的连接丢失,所以之后的方法都失败了(返回false)

$mem->set(‘bbb’array(‘bbb’));//失败

$mem->get(‘aaa’);//失败

没有测试memcached扩展是否有过这样的bug。
顺便提一下在PHP中memcached和memcache是两个不同的扩展,区别是memcached基于libmemcached库封装的API接口。见PHP手册
This extension uses libmemcached library to provide API for communicating with memcached servers. It also provides a session handler (memcached).

而通常所说的memcached就是指memcached服务器端。

另外如果key过长(250以上),value过大(1M以上)或者过期时间过长(大于2592000)都会导致set失败。

Javascript 修改与获得style

当我们不使用框架时经常使用如下的方法修改某个元素的样式.

document.getElementById('test').style.color = 'red';

document.getElementById('test').style.left  = '15px';

基本上每个css属性, javascript都有一个对应的style键名对应如 top, font, 对于css中的带有 的属性如font-size则改成驼峰命名式即可:

document.getElementById('test').style.fontSize = '14px';

记住写上px这样的单位是个好习惯因为在某些css模式下不写单位浏览器会因为不知道具体的单位标准而不做任何事情.

在读取时使用style属性就不见得一定有用了如下面的两端代码:

代码一:

<script type="text/javascript">

alert(document.getElementById('test').sytle.left);

</script>

<style type="text/css">

#test {left: 10px; position:absolute;}

</style>

代码二:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<title>Untitled Document</title>

<script type="text/javascript">

alert(document.getElementById('test').sytle.left);

</script>

</head>

<body>

<div id="test" style="left:10px; position:absolute;"></div>

</body>

</html>

第一段代码弹出空第二段代码弹出10px.

那么如果需要读取一个元素的某些属性呢margin, left等呢有两种方式

1. currentStyle(IE Only)  

2. window.getComputedStyle() [W3C标准,  MozillaOpera支持].

代码一:

document.getElementById('test').currentStyle.left;

代码二:

var x = document.getElementById('test');

alert(window.getComputedStyle(x,null).color);

更多内容请参考<<ppkJavaScript>>

javascript之setTimeout使用详解

setTimeout的第一个参数为函数名或者以""包含的js代码如果是第一种情形当函数带有参数时往往不能达到我们预期需要的效果文字说明比较抽象我们来看代码: (全文…)

第一次工作月总结

工作已经两个月, 有一些汗水, 有一些收获, 有一些欢乐, 有一些郁闷. 前方的路依然光明, 我要继续走下去.

整理一下两个月的收获和问题,说的不全,完全以这段时间的实践为主线。

一 面向对象 VS 面向过程
1.我们的选择
项目开始时,技术经理那边决定使用面向过程作为我们的主要开发方式,当时主要的考虑点是效率和项目人员对OO和面向过程的熟悉程度。
我们的项目是一个交易平台,预计并发、高负载、快速响应会是项目最重要的问题,再结合PHP本身的特点,我们觉得面向过程应该是我们的更好选择。
另外,项目中,除了我本人接触的OO较多外,其他人对于OO的理解还仅仅位于“对象”上, 对OOA/OOD/Design Pattern等基本无概念,而由于我们的时间和现有资源的问题,我们也不可能进行这方面的入职培训。 所以最终我们决定使用面向过程。

2.如何选择
很多人大谈OO或者面向过程的好处,互相攻击对方的方法缺陷。就讨论本身而言,辩论有利于更好的交流以及对知识更深层次的理解。但也容易带来一些偏见,这些往往是由于个人的阅历经验、对新事物的心态以及是否辩证看待事物有关。每个人的工作环境、项目要求等等都不尽相同,而OO和面向过程都不是万能的解决方案,他们有各自的优缺点,有各自的适应环境(所以不能一概而论, 不能断定哪种方式绝对的好),同时也有重叠的部分(既然有重叠,那么在某些情况下使用OO和面向过程皆可,具体使用哪一种,主要取决于个人的偏好)。
因而我们讨论两种方法,重点在于分析他们各自的利弊、适应环境,而不是打败对方。我们的目的在于赢得真理, 而不是赢得讨论。无论枪有多好,刀也不会淘汰;同时枪也的确比刀强大很多—某些情况下。 (全文…)

驱动测试开发的几条TIPs

拿到《测试驱动开发》这本书10天左右, 我便"粗鲁"的把它看了一遍, 说是粗鲁, 是因为我这是我一次正式的阅读关于极限编程的书籍, 同时又看的比较快, 对于诸多内容有些囫囵吞枣的嫌疑. 尽管如此, 我还是不得不感叹 Kent Beck(作者)的伟大思想, 给我感觉测试驱动开发更是一门方法学, 而非简单的软件工程解决方案.
激动与感慨之余, 顺便从书中摘抄了一些比较重要的TIps.

1.从测试开始, 而不是从建立对象开始.

2.测试开始之前, 写一个包含所有你认为必须要编写的测试的清单. 最后, 列出所有你认为这一轮编程结束后为了获得整洁代码而必须要完成的重构.

3.开始时的目的是为了让测试能够运行, 而非获得完美的解决方案.

4.测试驱动培养的是你在软件开发中一小步一小步的进行开发的能力, 而非教条的一小步一小步的进行开发.

5.首先解决目标的可用性, 之后再解决代码整洁性的问题.

6.尽量减少测试程序和代码之间的耦合度.

7.如果引入了新的测试, 你需要把新的测试记在清单上.

8.除非有更好的动机,否则不要引入过多的设计.

9.每一个周期,考虑重构一次代码,去掉重复部分.clear一下代码.

10.各种测试之间应该没有任何的相互影响.

11.相互独立的测试意味着所有的测试都是不依赖于顺序的.

12.试着从一开始就编写断言.

13.使用让人容易理解的测试数据.

14.测试从不做任何工作开始.

15.一次只解决一个问题.

16.注意休息.

相关资源:  
1 PHP测试驱动开发介绍
2 豆瓣讨论

linux下fork函数的一些理解

fork函数用于linux下创建进程, fork的字面意思为"叉子", 从之后的内容中将会了解到"叉子"是非常的贴切的.
fork原型为 pid_t fork() , 如果成功则返回子进程的进程id, 如果失败则返回-1, 通常在系统内存不够或者进程数已经达到上限时, fork才会失败.
让我们来看一段代码 (全文…)

Pages: 上一页 1 2 3 4 5 6 7 8 下一页