阳光男孩

Never give up!

Entries for the ‘WEB架构’ Category

HTML 5 Web 存储

0顶一下在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage – 没有时间限制的数据存储 sessionStorage – 针对一个 session 的数据存储 之前,这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高。 在 HTML5 中,数据不是由每个服务器请求传递的,而是只有在请求时使...[阅读全文]

0
顶一下

在客户端存储数据
HTML5 提供了两种在客户端存储数据的新方法:

localStorage – 没有时间限制的数据存储
sessionStorage – 针对一个 session 的数据存储

之前,这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高。
在 HTML5 中,数据不是由每个服务器请求传递的,而是只有在请求时使用数据。它使在不影响网站性能的情况下存储大量数据成为可能。
对于不同的网站,数据存储于不同的区域,并且一个网站只能访问其自身的数据。
HTML5 使用 JavaScript 来存储和访问数据。
localStorage 方法
localStorage 方法存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。
如何创建和访问 localStorage:
实例

<script type=”text/javascript”>
localStorage.lastname=”Smith”;
document.write(localStorage.lastname);
</script>

下面的例子对用户访问页面的次数进行计数:
实例

<script type=”text/javascript”>
if (localStorage.pagecount)
  {
  localStorage.pagecount=Number(localStorage.pagecount) +1;
  }
else
  {
  localStorage.pagecount=1;
  }
document.write(“Visits “+ localStorage.pagecount + ” time(s).”);
</script>

sessionStorage 方法
sessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。
如何创建并访问一个 sessionStorage:
实例

<script type=”text/javascript”>
sessionStorage.lastname=”Smith”;
document.write(sessionStorage.lastname);
</script>

下面的例子对用户在当前 session 中访问页面的次数进行计数:
实例

<script type=”text/javascript”>
if (sessionStorage.pagecount)
  {
  sessionStorage.pagecount=Number(sessionStorage.pagecount) +1;
  }
else
  {
  sessionStorage.pagecount=1;
  }
document.write(“Visits “+sessionStorage.pagecount+” time(s) this session.”);
</script>

Comments (10)

ASP.NET:从XML文档转换到DataSet

0顶一下 以下是代码片段: using System; using System.Xml; using System.Data; using System.Text; using System.IO; namespace NET.MST.Tenth.XmlAndDataSet { partial class XmlAndDataSet { static void Main(string[] args) { Console.WriteLine(“从XML文档转换到DataSet:”); DataSet ds = ConvertXMLFileToDataSet(“..\\..\\Test.xml”); PrintDataSet(ds); Console.WriteLine(“从D...[阅读全文]

0
顶一下

以下是代码片段:
using System;
using System.Xml;
using System.Data;
using System.Text;
using System.IO;
namespace NET.MST.Tenth.XmlAndDataSet
{
partial class XmlAndDataSet
{
static void Main(string[] args)
{
Console.WriteLine(“从XML文档转换到DataSet:”);
DataSet ds = ConvertXMLFileToDataSet(“..\\..\\Test.xml”);
PrintDataSet(ds);
Console.WriteLine(“从DataSet转换回XML文档:”);
ConvertDataSetToXML(ds).Save(Console.Out);
Console.Read();
}
///
/// 打印DataSet
///
/// DataSet对象
static void PrintDataSet(DataSet ds)
{
foreach (DataTable table in ds.Tables)
{
Console.WriteLine(“表{0}:”, table.TableName);
foreach (DataColumn column in table.Columns)
{
Console.Write(“{0}({1}) “, column.ColumnName, column.ColumnMapping.ToString());
}
Console.Write(“\r\n”);
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
Console.Write(“{0} “, row[col.ColumnName].ToString().Trim());
}
Console.Write(“\r\n”);
}
}
}
}
partial class XmlAndDataSet
{
///
/// 将xml文件转换为DataSet
///
public static DataSet ConvertXMLFileToDataSet(string xmlFile)
{
//读入XML文档
XmlDocument xml = new XmlDocument();
xml.Load(xmlFile);
DataSet result = new DataSet();
using (StringReader stream = new StringReader(xml.InnerXml))
{
using (XmlTextReader reader = new XmlTextReader(stream))
{
result.ReadXml(reader);
return result;
}
}
}
///
/// 将DataSet转换为xml对象字符串
///
public static XmlDocument ConvertDataSetToXML(DataSet ds)
{
using (MemoryStream stream = new MemoryStream())
{
//通过XmlTextWriter来生成XML
using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.Unicode))
{
//DataSet转换为XML文档
ds.WriteXml(writer);
//从流中读出数据
int count = (int)stream.Length;
byte[] arr = new byte[count];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(arr, 0, count);
XmlDocument result = new XmlDocument();
result.LoadXml(“”+
Encoding.Unicode.GetString(arr).Trim());
return result;
}
}
}
}
}

Comments (46)

什么是web 2.0

1顶一下什么是web 2.0(1) 为下一代软件的设计模式和商业模板 2001年秋季网络泡沫的破灭标志着互联网的一个转折点。很多人得出结论说,互联网被过分夸大了,实际上,泡沫和随之而来的衰退看上去是所有科技革命的共同特点。衰退是正处于上升期的科技准备占据中央舞台的特色。伪装者被逐出门外,真正的成名故事显示出他们的实力,开始理解一个事物与其他分开的原因。 Web 2.0的概念开始于O’R...[阅读全文]

1
顶一下

什么是web 2.0(1)
为下一代软件的设计模式和商业模板

2001年秋季网络泡沫的破灭标志着互联网的一个转折点。很多人得出结论说,互联网被过分夸大了,实际上,泡沫和随之而来的衰退看上去是所有科技革命的共同特点。衰退是正处于上升期的科技准备占据中央舞台的特色。伪装者被逐出门外,真正的成名故事显示出他们的实力,开始理解一个事物与其他分开的原因。

Web 2.0的概念开始于O’Reilly与 MediaLive International的一个献计献策会。网络先锋人物和O’Reilly公司副总裁Dale Dougherty指出,网络非但没有破灭,而且随着许多令人激动的新程序和网站让人惊讶的突然规律性出现,网络比以往的作用更重要。更重要的是,在互联网灾难中幸存下来的公司看上去有一些共同的特点。.com公司的垮掉能在某种程度上标志互联网的转折点吗, web 2.0这样的称呼有意义吗?我们同意它的确是,web 2.0大会就这样诞生了。

在那以后的一年半时间内,web 2.0这个词就无疑已经生根,在Google上有超过950万个引用结果。但仍有大量对web 2.0含义的不同观点,一些人谴责这只不过是一个毫无意义的市场时髦吵作词汇(buzzword),其他人则认为它是一个新的传统概念。

本文旨在阐明我们通过web2.0想要表达的含义。

在最初的集体讨论上,我们用例子阐明了我们对web2.0的理解。

Web 1.0―> Web 2.0
DoubleClick―>Google AdSense
Ofoto(网上照片
贮存和共享服务的提供商)―>Flickr
Akamai(阿卡迈技术公司)―>BitTorrent
mp3.com―>Napster
不列颠百科全书在线―>Wikipedia
个人网站―>网络日志(博客、部落格)
evite―>upcoming.org and EVDB
域名投机买卖―>搜索引擎优化(SEO)
网页浏览―>每次点击成本
屏幕抓取―>网络服务
发表/出版―>参与
内容管理系统(CMS)―>维基(wiki)
目录(分类)―>标签(“folksonomy”)
粘性―>聚合

这个表格还可以不断往前进。但是,究竟什么可以让我们确定一种程序或道路是web 1.0,而另外一种则是web 2.0呢?(这个问题非常迫切,因为web 2.0 概念已经非常流行,许多公司把它当作市场时髦词汇了,却并不真正理解它的含义。问题特别困难,因为许多对时髦词汇有癖好的创业型公司绝对不是web 2.0。其他有些程序如napster和BT被认为是web2.0,但它们甚至不是适当的网络应用程序!译者注:应该是由于版权问题)
web 1.0有一些被成功故事以及最有趣的新应用程序证明的原则,下面是列表。
1,作为平台的网络

和其他许多重要的概念一样,web2.0没有坚实的分界线,但有重力的核心。可以通过一系列原则和实践把web 2.0形象化,并证明部分或所有原则都在离核心或远或近的地方。

上图显示了在FOO Camp的一次献计献策会上的web 2.0“meme map”。这是一项正在进行的工作,但显示了许多来自web 2.0核心的思想。
例如,在2004年10月第一届web 2.0大会上,John Battelle和我在公开讨论中列出了初步的一系列原则。第一个原则就是“作为平台的互联网”。虽然这也是web 1.0时代骄子网景公司的口号。更重要的是,web 1.0时代最初的2个标兵

Comments (65)

小规模低性能低流量网站设计原则

1顶一下到处都是什么大规模啊,高流量啊,高性能之类的网站架构设计,这类文章一是满足人们好奇心,但看过之后也就看过了,实际收益可能并不大;另外一个副作用是容易让人心潮澎湃,没学走先学跑,在很多条件仍不具备的情况下,过度设计、过度扩展(高德纳大爷也说过,”过早优化是万恶之源”),所以,这里反弹琵琶,讨论一下小规模、低性能、低流量的网站该如何搞法。 如果站点起步阶段可能就是一...[阅读全文]

1
顶一下

到处都是什么大规模啊,高流量啊,高性能之类的网站架构设计,这类文章一是满足人们好奇心,但看过之后也就看过了,实际收益可能并不大;另外一个副作用是容易让人心潮澎湃,没学走先学跑,在很多条件仍不具备的情况下,过度设计、过度扩展(高德纳大爷也说过,”过早优化是万恶之源”),所以,这里反弹琵琶,讨论一下小规模、低性能、低流量的网站该如何搞法。

如果站点起步阶段可能就是一台机器(或是一台虚拟机,比如 JobsDigg.com ),这个时候,去关注什么数据拆分啊,负载均衡啊,都是没影子的事情。很多大站点的经验绝不能照搬,辩证的参考才是硬道理。
拥抱熟知的技术
动手构建站点的时候,不要到处去问别人该用什么,什么熟悉用什么,如果用自己不擅长的技术手段来写网站,等你写完,黄花菜可能都凉了。所以,有现成的软件组件可用,就不要自己重新发明轮子。人家说 Python 牛,但自己只懂 PHP ,那就 PHP 好了,如果熟悉 .net ?,那也不错。用烂技术不是丢人的事情,把好技术用烂才丢人。
架构层次清晰化
起步的阶段应该清楚的确定下来架构的层次。如果都搅和在一起,业务一旦扩增开来,如果原有的一堆东西拆不开就是非常痛苦的事情。
Web Server <–> (AppServer)<–>Cache(eg. Memcached)<–>DB
层次清晰化的一个体现是(以 LAMP 架构为例):即使只有一台机器,也应该起个 Memcached 的实例,效果的确非常好–一般人儿我不告诉他…不要把什么都压到 DB 上,DB 一旦 I/O 压力走到磁盘上,问题要暴露出来是很快的。没错,DB 本身也会利用自己的 Cache,但 DB 的Cache 和 Memcached 设计出发点毕竟不一样。
数据冗余? 有必要
很多人并不是数据库设计专家,如果应用要自己设计表结构什么的,基本都是临时抱佛脚,但三个范式很多人倒是记得牢,这是大多数小型 Web 站点遇到的一个头疼事儿,一个小小的应用搞了几十个表… 忘掉范式这个玩意儿! 记住,尽可能的冗余数据,你在数据层陷入的时间越多,你在产品上投入的就会越少。用户更关心的是产品的设计。
前端优化很重要
因为流量低,访客可能也不多,这时候值得注意的是页面不要太大,多数流量低的站点吃亏就在于一个页面动辄几兆(我前两天看到一个Startup的首页有4M之大,可谓惊人),用户看个页面半分钟都打不开,你说咋发展? 先把基本的条件满足,再去研究前端优化。
功能增加要谨慎
不是有个 80/20 原则么? 把最重要的精力放在最能给你带来商业价值的地方。有些花里胡哨的功能带来很大的开销,反而收效甚微。记住,小站点,最有价值的是业务模式,而不是你的技术有多牛。技术是为业务服务的,不要炫技。

有些网站不停的添加功能,恰恰是把这些新功能变成了压死自己的稻草。
从开始考虑性能
这一点是可选的,但也重要。设计应用的时候在开始就应考虑 Profile 这件事情。一套应用能否在后期进行有效优化和扩展,很大的程度限制在是否有比较合适的 Profile 机制上。需要补充的是,对性能的考虑必然要把有关的历史数据考虑进来。另请参见网站运维之道的容量规划以及其它小帖子。
好架构不是设计出来的
这是最后要补充的一点。好的架构和最初的设计有关系,但最重要的是发展中的演化:
发展–>发现问题–>反馈–>解决问题(执行力)–> 改进->进化到下一阶段–新问题出现(循环)
有些站点到了某个阶段停足不前,可能卡在执行力这个地方,来自用户的反馈意见上来了之后,没有驱动力去做改进。最后也是死猪不怕开水烫了。最怕听到的就是”业务不允许”的托词,试想如果不改进业务都没了,那业务还允许么? 其实就是一层心理障碍。

这篇文章有浓重的山寨风格,所以,你不要太认真。如果在用短、平、快的方式构建某些山寨网站的话,可参考其中对你有益的点,不赞同的地方可以直接忽视掉,就没必要费力留言进行争论了。

Comments (13)