123
 123

Tip: 看不到本站引用 Flickr 的图片? 下载 Firefox Access Flickr 插件 | AD: 订阅 DBA notes --

2008-06-29 Sun

23:00 Web 前端优化最佳实践之 JavaScript 篇 (4965 Bytes) » DBA notes

作者:Fenng 发布在 dbanotes.net. FeedBurner 订阅数量,点击则可进行订阅

Web 前端优化最佳实践之 JavaScript 篇,这部分有 6 条规则,和 CSS 篇 重复的有几条。前端优化最佳实践,最重要的还是"实践",要理解这东西容易得很,关键是要去"实践",去"执行",去"反馈",去获取受益。

1. Put Scripts at the Bottom

当一个脚本在下载的时候,浏览器干不了其它的事儿(串行了)。所以,把它扔到最后面去处理。对于一些功能性的脚本,可能实现起来有些两难。不过对于国内网站来说,有很多使用 Google Analytics 服务进行网站数据分析的。这这一点来说,绝对可行的建议,放到页面最底下。

2. Make JavaScript and CSS External

参见 CSS 篇的描述

3. Minify JavaScript and CSS

参见 CSS 篇的描述

4. Remove Duplicate Scripts

对于一些历史遗留站点或是论坛类的网站来说,这倒是比较常见的。接手维护人前后变化过多,每个人都有自己的一套。这就会带来一些潜在的麻烦。

5. Minimize DOM Access

有三条指导建议:
  • 缓存已经访问过的元素 (Cache references to accessed elements)
  • "离线"更新节点, 再将它们添加到树中 (Update nodes "offline" and then add them to the tree)
  • 避免使用 JavaScript 输出页面布局--应该是 CSS 的事儿 (Avoid fixing layout with JavaScript)

6. Develop Smart Event Handlers

除了英文解释外,这里也提醒一下注意关于 Java Script 内存泄漏的问题。

另外推荐一篇《如何优化 JavaScript 脚本的性能》.

后记1) :整理得差不多之后,发现网络上已经有一篇 《Yahoo!网站性能最佳体验的34条黄金守则》,是翻译稿。看来我做了一部分重复劳动。

后记 2):CSS / JavaScript 都有优化规则。但似乎缺少了对 Flash 的优化实践。

--EOF--

相关文章|Related Articles

评论数量(0)|Add Comments

本文网址:
最近作者还说了什么? Follow Twitter / Fenng

DBA notes 理念: 用最简约的技术取得最大的收益!

21:41 Resyncing table on MySQL Slave (10598 Bytes) » MySQL Performance Blog

Sometimes MySQL Replication may run out of sync - because of its own buts or operational limitations or because of application mistake, such as writing to the slave when you should be only writing to the master. In any case you need slave to be synced with Master.

To discover the difference between Master and Slave you can use excellent Maatkit tool though if you you just need to resync small single table it may be easy to do it other way:

Assuming your table schema does not change you can do something like this on the master:

LOCK TABLE tbl WRITE;
SELECT * FROM table INTO OUTFILE '/tmp/tbl.txt';
DELETE FROM tbl;
LOAD DATA INFILE 'tmp/tbl.txt' INTO TABLE tbl;
UNLOCK TABLES;

This will dump master's table content to the file clean the table on master and slave and refresh it on both of them.

This obviously makes table inaccessible on master for duration of operation but for small tables it can take just few seconds.

This trick is of course quite dirty, especially if you're dealing with sensitive data - what if you run out of space or SELECT INFO OUTFILE fails for other reason and you proceed with deletion you may kiss your data goodbye.

Alternative would be not to drop the table but rather raname them. Unfortunately you can't rename locked tables (ERROR 1192 (HY000): Can't execute the given command because you have active locked tables or an active transaction) - this is also I used DELETE instead of TRUNCATE to clean out the table.

In the applications which are error tolerant (like handle errors properly) you may rename table instead of locking - for many applications this works better anyway as having table locked causes connections to pile up and either MySQL runs out of connections or Apache out of children allowed to process request;

So you can do following instead:

SQL:
  1. mysql> RENAME TABLE rep TO rep_maint;
  2. Query OK, 0 rows affected (0.01 sec)
  3.  
  4. mysql> SELECT * FROM rep_maint INTO OUTFILE '/tmp/rep.txt';
  5. Query OK, 0 rows affected (0.01 sec)
  6.  
  7. mysql> CREATE TABLE rep_new LIKE rep_maint;
  8. Query OK, 0 rows affected (0.00 sec)
  9.  
  10. mysql> LOAD DATA INFILE '/tmp/rep.txt' INTO TABLE rep_new;
  11. Query OK, 0 rows affected (0.01 sec)
  12. Records: 0  Deleted: 0  Skipped: 0  Warnings: 0
  13.  
  14. mysql> RENAME TABLE rep_maint TO rep_old, rep_new TO rep;
  15. Query OK, 0 rows affected (0.00 sec)

This way you never actually delete any data and besides same data loaded to "rep" table you will get the copy of old table in "rep_old" - this can be very handy if you would like to later investigate why data got out of sync and may be do some manual touch ups after you resync the data.

Note - this process works well for small tables when you do not want to shut down the master and slave. If you need quick resync of large amount of data it is much better to use LVM snapshots or similar techniques - these are much faster.


Entry posted by peter | No comment

Add to: delicious | digg | reddit | netscape | Google Bookmarks

21:00 Andrew J. Holdsworth 来阿里技术交流 [Flickr] (534 Bytes) » DBA notes

dbanotes posted a photo:

Andrew J. Holdsworth 来阿里技术交流

Andrew J. Holdsworth 与 Bob Carlin 来阿里交流

技术笔记简略版

20:56 Andrew J. Holdsworth 来阿里技术交流 (534 Bytes) » Uploads from dbanotes

dbanotes posted a photo:

Andrew J. Holdsworth 来阿里技术交流

Andrew J. Holdsworth 与 Bob Carlin 来阿里交流

技术笔记简略版

20:46 SaaS让互联网变成软件的平台 (4892 Bytes) » Fenng's shared items in Google Reader
Shared by Fenng
詹膑老师的枪稿,但是要推荐 :)

For杂志,请勿转载

一家叫做银杏泰克(ginkgotek.com)的创业公司进入的是竞争十分激烈的网络搜索领域,但是他们并不和google或者百度直接竞争——他们面向中小网站提供站内搜索服务,帮助拥有大量信息和内容的网站更好的寻找和组织自己的站内资源。

这件事情看上去也有不少竞争对手,不一样的是,银杏的竞争对手们是将搜索底层技术卖给顾客,类似传统销售软件的方式,而他们则是将服务放在自己的服务器上,让客户来租用,不仅极大降低了客户的成本,而且能够为所有客户提供7/24的全天候服务。“套一个时髦的词,这叫做SaaS”,银杏泰克解释其商业模式时提到了一个正在互联网和企业之间颇为流行的新词。

SaaS是Software as a Service的开头字母简写,意思是将软件作为服务。这已经成为一种潮流,在互联网上正蓬勃发展,蔚为壮观。最为典型的公司是ZOHO,你能想象到的个人办公和企业常用的软件,它都为你提供了网络版本,比如利用Zoho Writer替代Microsoft Word,或者采用Zoho CRM进行网络客户关系管理。同样,Google为了与微软竞争,推出了Google Document,可以在线实现微软Office套装中word、excel、powerpoint三项主题服务的基本功能,此外还有其它产品可以类比outlook、frontpage等。

如果互联网是未来的话,那么微软office建立起的王朝可能会被上述这样的在线服务彻底推翻。SaaS的潜力无穷,未来光明。

37signals是该领域的另外一个明星公司,它有数个面向中小企业的轻量级企业应用产品,包括服务于项目管理和团队协作的BaseCamp,小型客户关系管理服务Highrise,团队在线即时交流系统Campfire和用于组织信息、日程安排的Backpack在线服务。这个公司只有十人左右的团队,却能服务数百万注册用户。

除了巨头们可以玩这个游戏以外,显然,SaaS也是创业公司的一个不错选择,比如银杏泰克和37Signals这样,让自己成为一个快公司,保持轻量级,灵活面对市场。从这两个公司的例子来看,SaaS所呈现出来的优点十分明显:让公司一开始就是正的现金流;能为客户提供7/24的全天候服务;能帮助客户快速部署产品并更好进行定制开发;大规模节约人力及其它成本;更丰富的数据和反馈来进行产品调整与升级;不需要庞大的分销系统……

刚起步不久的银杏泰克还缺乏像37Signals那样百万级用户的炫耀资本,但是它的客户满意度却相当不错,比如饭统网——这是一家提供餐饮导航和订餐服务的公司,一直持续增长和稳健发展,积累了大量餐馆相关消费场所的信息,它尝试采用银杏泰克的站内搜索服务来重新整合数据,以将之价值最大化,同时给用户带来利益。

“很快就可以用上,成本很低,而且立马产生价值”。这样的评价恰好是SaaS对软件客户的利益所在。对于企业而言,将自己的桌面信息系统向SaaS转移,也正成为趋势,当然,更多的新型企业会一开始就部署基于SaaS的企业信息系统。与其购买调整和部署一套属于自己的软件系统,不如采用一个网络服务,因为成本低、风险低、立即可用,企业拥有良好的主动权。

只需要一个浏览器,就能享受服务。

SaaS带来的双方共赢,让提供服务和接收服务的公司都提升效率、降低成本,这个依旧是建立在互联网奇迹之上。

互联网的高速发展,正在让自身从一个浏览型、休闲型的平台转变为一个参与型、功能型的平台,新的协议不断在这个平台上形成,使其越来越被“可编程”,即可以在互联网上实现越来越多样的功能,比如日程管理、文档写作和管理甚至图片处理和视频剪辑。

所以,在PC机上运行的程序绝大部分都可以切分为两个部分,一是通过服务器完成,一是通过浏览器完成,这就是SaaS潮流的核心推动力。

SaaS的发展还进一步促进互联网的演化,因为SaaS在让互联网变得一个“操作系统”,浏览器成了“程序界面”,越来越多的程序生长在互联网上,此时,互联网就益发智能,产生更大的能动性。

20:45 期望,别忘了动机 (4073 Bytes) » Fenng's shared items in Google Reader
Shared by Fenng
在想着“终极目标”的时候其实还不如考虑一下初级目标。更多的时候,我们连初级目标都偏离了

好几次书友会,我们讨论着讨论着就说到了设计的“终极目标”:用户想要什么,就给他什么。这里的想要什么,应该更多的是指期望。需求和期望的联系和区别,Angela 的设计的价值里解释的比较清楚,我想补充的是:期望,是需求的多种实体。

其实,我很少“关注”需求和期望,在设计过程中,我比较关注的是很直接的两点:a) 用户有什么问题? b) 我们怎么去解决?(一般在前面会加上谁是用户,不过跟本文不太相关,就略了)。前者主要是结合问题去发现动机(为什么会这样,有时候也能理解为需求),而后者主要就是用一些设计方法去摆平。问题、动机、解决方法,形成了一个三角。这三者相互制约着,三者都有可能分析错误,但三者同时错误的几率不高。当这三者都能说通的时候,一切就顺理成章了。

应该有很多的设计师同行,按着用户的想法(期望)来设计产品,测试期间满意度也甚高,但之后呢,用户又不买帐了。到底哪里出了问题?我曾写过一篇文章,把设计师比作侦探,把用户比作嫌疑人。如果找不出犯罪动机,那么一件案子是不完美的。设计同样如此。准确、合理的动机,往往比知道什么是需求什么是期望来的影响更大,就像是用户有个小把柄落在自己手上一样。有了动机,需求和期望才能够得到合理的解释,设计才是100%的设计。

期望不是石头里面蹦出来的。来自消费者行为学的一个例子,消费者购买1/4 in的电钻,并不是为了获得电钻或部件本身,而是为了获得1/4 in的孔眼。在这里,要获得1/4 in孔眼是消费动机,如果在消费者的个人经历中并不知道有电钻这个产品,那么不会产生要电钻这个期望,他的期望可能是找一个接近1/4 in的起子、尖锐物等等,DIY出1/4 in的孔眼。有一期书友会话题是“排序”,在南京会场讨论过程中,我坚持一点是:因为用户想要排序(因为排序这个概念,已经深入人心了),所以我们设计了排序。这里的“想要排序”就是指期望了,但从动机角度讲,可能是想找到某项信息、获得各项信息之间的关系。

所以从营销角度讲,可以从更好、更高效的满足期望来作为切入点,而不是局限于目前的解决方法。如果能够让用户知道,通过搜索(只是假设,具体还得看如何设计)能够更高效的完成“找到某项信息”,那么这个营销案子是成功的。所以我并不赞同Angela文中提到的“期望是一个相对稳定的状态”,我认为期望是个不稳定状态,用户会倾向于选择更优的解决方案。

最后再理一下思路:

  1. 用户(或消费者,下同)遇到了问题
  2. 用户要解决这个问题
  3. 用户根据自身经验想到了某个解决办法
  4. 网站或产品(或市场)提供了该解决办法或更好的解决办法
  5. 用户使用该网站或产品(发生消费行为)

大家看看每一步对应的是什么呢?

转载请注明出自UCDChina.com,谢谢。

相关文章

20:32 掉电引起的ORA-1172错误解决过程(一) (644 Bytes) » yangtingkun
由于UPS故障,导致机房连续多次掉电,问题解决后,发现一台本地测试数据库打开时报错,ORA-1172、ORA-1151错误。同事告诉我一台数据库无法打开,只能启动到MOUNT状态,于是连接数据库尝试打开,报错如下:SQL> alter database open;alter database open*ERROR at line 1:ORA-01172: recovery of thread 1 stuck at block 1669 of file 2ORA-01151: use media recovery to recover block, restore backup if needed看来数据文件已经出现了坏块,估计需要通过备份来恢复了。检查了一下数据库的基本情况,发现虽然数据库处于归档模式下,但是...
17:15 如何去做你讨厌做的事情? (4796 Bytes) » 生活帮-LifeBang

每个人都有他讨厌做的事情,但是有些事情却不得不做,这叫什么?这就叫人在江湖身不由己。

比如说:

你正在聚精会神写代码的时候,项目经理突然要召开一个会议,请问,你能不去吗?

你正在激动的看中国队比赛的时候,老婆让你下楼买菜,请问,你好意思不去吗?

你非常讨厌看电影,可是女朋友非拉着你去电影院,请问,你可以不去吗?

你非常讨厌锻炼身体,可是电梯停电三天,并且你家在20层,请问,你可以不去爬楼吗?

周星星问道:我们如何爱上一个我们不喜欢的人呢?麻烦你告诉我。

GTDLife.cn回答:我并不是让你爱上你讨厌做的事情,只是让你以平常心完成他即可。

这个时候我们是需要一点阿Q精神的。

转移注意力

当我们不得不做一件我们讨厌的事情时,如果你能有效的转移自己的注意力,那么这就不是一件难事了,比如说,按照我们上面的例子,你在爬20层的时候(一个极端的例子),你可以带上你的ipod,听着你喜欢的音乐,或者听着GTD音频教程,这样你在不知不觉之中就可以将讨厌做的事情斩于马下。你可以试试,非常有效。

躲不了就享受吧

像看电影这种事情,其实是一件非常有意思的事情,只不过你因为个人原因不喜欢他,那这里就存在一种可能性:你有可能会爱上他!你以前不喜欢可能是因为你不喜欢某种类型的电影,或者你害怕电影院里的黑暗,也有可能因为身边不是你喜欢的人。当你实在没有办法避开一件你讨厌去做的事情时,那你就尽量的去享受他吧~呵呵~

拿出点牺牲精神

鱼和熊掌不可兼得,这是我们大家都明白的道理,这主要就看你自己的评估了,你是更爱你老婆多一些,还是更爱中国足球多一些?我想绝大多数都选择前者。中国男足确实让人爱不起来,呵呵~~~所以,我们能不能为了我们可爱的老婆牺牲一点点的看球时间,下楼买点菜上来呢?呵呵~

学会处理临时突发事件

处理临时突发事件也是一门学问,我们的工作和生活中经常会遇到这些事情,究竟该怎么处理呢?这里给您了一些处理原则流程图,大家可以参考一下。对您的工作应该会有帮助的。我们对待临时突发事件时应该学会理性的处理。

讨厌一件事需要十年二十年,喜欢一件事只需要一瞬间。

标签:, ,

相关内容

15:48 Virtual Machines Are Your Friends (6102 Bytes) » Eddie Awad's Blog

VirtualBox, Virtual PC, VMware Workstation and a few other software packages help you create and run multiple virtual machines on your desktop or laptop enabling you to run multiple operating systems simultaneously on a single computer.

My personal favorite is VirtualBox (recently acquired by Sun Microsystems), not only because it is freely available as Open Source Software and runs on Windows, Linux and Macintosh but also because it has great features and supports a large number of guest operating systems.

Last Saturday I used VirtualBox to create a new virtual machine (VM) running Windows XP Pro and Oracle Database 11gR1. First, I created a “base” VM with only Windows XP pro SP3 installed. I then detached the virtual disk file (VDI) from the VM. I ended up with a VDI file that I can clone as many times as I want eliminating the need to install a new operating system every time I create a new VM.

Cloning a virtual disk in VirtualBox is done using the command line. For example, to clone WindowsXP.vdi as a new virtual disk called WindowsXPProOraDB11gR1.vdi, you would issue this command:

VBoxManage clonevdi WindowsXP.vdi WindowsXPProOraDB11gR1.vdi

You would then assign WindowsXPProOraDB11gR1.vdi as the virtual hard drive of a new virtual machine.

The installation of Oracle Database 11gR1 on a new Windows XP VirtualBox VM on my laptop went very smoothly, but I had to troubleshoot a couple of things on the VM: A missing loopback adapter and a 100% CPU usage.

My laptop and the newly created VM do not have a static IP address. Dynamic Host Configuration Protocol (DHCP) is used to assign dynamic IP addresses on the network. According to the documentation, before installing Oracle Database onto a computer that uses the DHCP protocol, you need to install a loopback adapter to assign a local static IP address to that computer. I followed the instructions found in the Oracle Database Pre-installation Requirements document to install the loopback adapter. After that, the database installed without any issues.

Now that my WinXP VM and 11g Database are up and running, I noticed that the oracle.exe process was consuming 100% of the CPU. I waited a few minutes, but the CPU usage did not go down, it stayed at 100%. After a quick search, I found these two forum posts: post 1 and post 2. Since this is a test database, I did not hesitate to follow the instructions in post 2 and was able to bring the CPU usage down to a normal level.

Virtual machines are a great way to learn and try new software and applications without the need to buy new hardware or messing up your existing computer. You may even have fun embarking on some virtual adventures.

---
Related Articles at Eddie Awad's Blog:


09:58 开庭日三 (1283 Bytes) » Chanel [K]

7月1日下午我会去朝阳区亚运村法庭领传票,这一次的开庭应该是在7月初的某一天,具体日期等领到传票再公布。
希望这是最后一次开庭。

06:30 功夫熊猫 与 无师自通的领悟 (4029 Bytes) » Oracle Life

©作者:eygle 发布在 eygle.com

功夫熊猫周五和老婆在东方广场的 新世纪 电影院看了一场 功夫熊猫,这只熊猫风头正健,到电影院很多人都是来看这部电影。 由于去的匆忙,没有带电影券、优惠券之类,结果到电影院发现中国移动VIP用户可以发短信来获取折扣券,很方便,发送VIPFILM代码很快就获得彩信优惠券。终于发现移动的VIP用户还有点用。

关于精彩部分就不说了,我要说说 熊猫阿宝的五溪指法,阿宝最后通过自悟的指法击败了残豹,那么这指法是如何来的呢?
师傅当初是没有教过的,我相信有这样一种无师自通的领悟,Panda在不断的练习和战斗中熟练并且成为一个挥洒自如,充分发挥自身潜质的功夫高手,这些使他具备了自由发挥与创造的基础。
终于Panda使出了核武器一样的超级指法。

其实在残豹和师傅斗争中,我一直期望能够有另外一种结局,残豹从一只可爱的小豹子成为一个充满野心与暴力的复仇者,很多人应该对此负责,甚至在Panda与残豹的决斗中,我也期待能有一种回归的结局,但是这种结局没有出现,因为电影需要有一个对立面的存在。

无师自通与忽然的领悟,每个人都需要这样的时刻。

有一些台词很值得回味,网上找到了几条:
1.往往在逃避命运的路上,却与之不期而遇
One meets its destiny on the road he takes to avoid it
2.你的思想就如同水,我的朋友,当水波摇曳时,很难看清,不过当它平静下来,答案就清澈见底了。
Your mind is like this water, my friend , when it is agitated ,it becomes difficult to see ,but if you allow it to settle , the answer becomes clear.
3.退出,不退出。做面条,不做面条。
Quit don't quit. Noodles don't noodles.
4.昨天是历史,明天是谜团,只有今天是天赐的礼物
Yesterday is history
Tomorrow is a mystery
But today is a gift
That is why it's called the present (the gift)
5.从来没有什么意外
There are no accidents
6.师傅:但有些事情我们可以控制,我可以控制果实何时坠落,我还可以控制在何处播种。
but there are things we can control,I can control when the fruit will fall ... And I can control What time to seed

-The End-


相关文章|Related Articles

评论数量(3)|Add Comments

本文网址:

2008-06-28 Sat

10:47 好歹做了一年多理财网站 » Fenng's shared items in Google Reader
09:27 HPUX开异步IO » OracleBlog.cn
06:40 软件测试基础-确认和验证 » Ricky's Test Blog

2008-06-27 Fri

11:35 MySQL命令行的几个用法 » NinGoo@Net
09:33 Log Buffer #103: a Carnival of the Vanities for DBAs » Pythian Group Blog » Log Buffer
08:39 盖茨 » Uploads from dbanotes
08:30 盖茨 [Flickr] » DBA notes
06:07 教训不教训 » 柔嘉维则@life.oracle.eng
05:07 (译)我在这里,我在那里 » Fenng's shared items in Google Reader
03:24 一千个农行有一千个规定 » Fenng's shared items in Google Reader