<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title><![CDATA[GreenGnn.ORG - JavaScript]]></title>
<link>http://www.greengnn.org/index.php/feed/category/javascript/</link>
<language>zh-cn</language>
<description/>
<pubDate>Fri, 30 Jul 2010 23:41:22 -0500</pubDate>
<item>
<title><![CDATA[模块化概念]]></title>
<link>http://www.greengnn.org/index.php/2009/09/08/8.html</link>
<pubDate>Tue, 08 Sep 2009 03:32:13 +0000</pubDate>
<category><![CDATA[HTML]]></category>
<category><![CDATA[CSS]]></category>
<category><![CDATA[JavaScript]]></category>
<description><![CDATA[《设计规则模块化的力量》


模块化就是为了减少循环依赖，减少耦合，提高设计的效率。为了做到这一点，我们需要有一个设计规则，所有的模块都在这个规则下进行设计。良好的设计规则，会把耦合密集的设计参数进行...]]></description>
<guid>http://www.greengnn.org/index.php/2009/09/08/8.html</guid>
<slash:comments>5</slash:comments>
<comments>http://www.greengnn.org/index.php/2009/09/08/8.html#comments</comments>
<content:encoded><![CDATA[<p><strong>《</strong><a href="http://www.douban.com/subject/1737636/" target="_blank"><strong>设计规则模块化的力量</strong></a><strong>》</strong></p><blockquote>模块化就是为了减少循环依赖，减少耦合，提高设计的效率。为了做到这一点，我们需要有一个设计规则，所有的模块都在这个规则下进行设计。良好的设计规则，会把耦合密集的设计参数进行归类作为一个模块，并以此划分工作任务。而模块之间彼此通过一个固定的接口（所谓的可见参数）进行交互，除此之外的内部实现（所谓的隐参数）则由模块的开发团队进行自由发挥。</blockquote><p>程序模块化的目的：</p><ol><li>减少循环依赖</li><li>减少耦合</li><li>提高设计效率</li></ol><p>程序模块化的实施：</p><ol><li>把耦合密集的归为一个模块</li><li>模块间通过固定的接口交互</li><li>模块内部实现自由发挥</li></ol><p><strong>《</strong><a href="http://baike.baidu.com/view/5861.htm#4" target="_blank"><strong>宜家</strong></a><strong>》</strong></p><blockquote>IKEA的研发体制也非常独特，能够把低成本与高效率结为一体。IKEA发明了&ldquo;模块&rdquo;式家具设计方法（宜家的家具都是拆分的组装货，产品分成不同模块，分块设计。不同的模块可根据成本在不同地区生产；同时，有些模块在不同家具间也可通用）。这样不仅设计的成本得以降低（因为基本每一种设计都是可制造的，不会因为大量的设计方案不具备可实施性而去莫明地浪费成本），而且产品的成本也能得到降低（模块化意味着可以大规模生产和大规模物流）。<br />IKEA的设计理念是&ldquo;同样价格的产品谁的设计成本更低&rdquo;，因而设计师在设计中竞争焦点常常集中在是否少用一个螺钉或能否更经济地利用一根铁棍上，这样不仅能有降低成本的好处，而且往往会产生杰出的创意。<br />可能IKEA是唯一能深刻理解&ldquo;简单即美&rdquo;的机构，他用&ldquo;简单&rdquo;来降低顾客让度成本，用&ldquo;美&rdquo;来提高顾客让度价值。</blockquote><p>IKEA模块化目的：</p><ol><li>设计成本降低，都可实现</li><li>产品成本降低，大规模物流和大规模生产</li></ol><p>IKEA模块化实施：</p><ol><li>产品分成不同的模块，分块设计</li><li>有的模块在不同的家具间可以通用</li></ol><p>可以看出，两种模块化的实施都是类似的，耦合密集的区块分为一个模块，独立自由设计，提供开放接口。可以产生低成本，大规模生产和开发的效果。</p><p><strong>互联网研发</strong></p><p>互联网研发的流程，概念、需求产生，设计[产品设计，交互设计，UI设计]，开发[前端开发，后端开发]，测试，发布，然后第二版本 新的概念、需求产生，再执行一次研发流程。在这个环节中，概念的产生总是非常容易，研发的周期总是非常漫长，市场总是稍纵即逝。所以版本迭代的速度也就是提升的敏捷开发是一个企业竞争力的体现。</p><p>在前端开发环节中，如何运用模块化方法提升迭代的速度和开发效率呢？</p><p><!--more--></p><p>首先，管理模块化，将流程进行模块化，分为策划，交互设计，视觉设计，前端开发，后台开发，测试，运维。每个流程都是高度耦合的，作为一个流程，流程之间采用公共接口进行衔接，也就是交付物。</p><p>其实是某一个流程中具体的模块化，就拿我熟悉的前端开发举例：</p><p>现在有某网站v 1.0版本发布，版本计划是这样的</p><ul><li>产品策划 3人天</li><li>交互设计 3人天</li><li>视觉设计 3人天</li><li>前端开发2.5 人天</li><li>后端开发5人天</li><li>测试 2人天</li></ul><p><strong>共计 18.5 人天</strong></p><p>为了在前端开发阶段提高效率，让两个前端负责开发，一人负责一部分页面，彼此没有沟通完全自由独立开发，1.5天后双方将代码合并，发现存在多处样式属性重叠冲突和js变量冲突，约定其中一个代码保持不变，另外一个代码进行调整，耗费1人天。</p><p>而如果两个人在开发前期使用0.5天进行沟通，约定好高度耦合的部分归为一个模块，双方按模块分工，模块内部自由开发，模块外部约定公共接口。然后1.5天后代码合并。提交后端开发工程师。</p><p>&hellip;</p><p>V1.0 版本发布</p><p>V2.0需求已经期待很久，又流程走到了前段开发阶段，需求是对局部功能进行改良优化，还是分两种情况</p><ol><li>非模块化代码设计，开发和解决代码冲突耗费2人天，其实开发只需要1人天</li><li>模块化代码设计，开发耗费1人天</li></ol><p>到了后端开发，进行后台开发，两种情况</p><ol><li>非模块化代码设计，页面html修改多处，模版文件进行多处修改</li><li>模块化开发，仅仅这几个模块进行代码修改，修改模版工作量很少</li></ol><p>从这两个例子可以看出，模块化在研发中版本的迭代速度是很快的，某公司产品以最快的市场应对速度赢得用户的认可和好感，获得可观的pv或者收入。</p><p>[未完待续..]</p>]]></content:encoded>
<author><![CDATA[greengnn]]></author>
<dc:creator><![CDATA[greengnn]]></dc:creator>
<wfw:commentRss>http://www.greengnn.org/index.php/feed/2009/09/08/8.html</wfw:commentRss>
</item>
<item>
<title><![CDATA[A股数据实时查询]]></title>
<link>http://www.greengnn.org/index.php/2009/09/01/7.html</link>
<pubDate>Tue, 01 Sep 2009 09:15:52 +0000</pubDate>
<category><![CDATA[Ajax]]></category>
<category><![CDATA[JavaScript]]></category>
<description><![CDATA[最近研究js的api，就拿sina的股票数据接口练练手，完成了一个简单的A股查询系统。

访问demo

因为这种api的设计是js变量的方式，自己财经网站调用，不适合做api，不想google的ap...]]></description>
<guid>http://www.greengnn.org/index.php/2009/09/01/7.html</guid>
<slash:comments>1</slash:comments>
<comments>http://www.greengnn.org/index.php/2009/09/01/7.html#comments</comments>
<content:encoded><![CDATA[<p>最近研究js的api，就拿sina的股票数据接口练练手，完成了一个简单的A股查询系统。</p><p><a href="http://www.greengnn.org/lab/stock/" target="_blank">访问demo</a></p><p>因为这种api的设计是js变量的方式，自己财经网站调用，不适合做api，不想google的api设计的那么合理，所以采用php动态调用变量，然后ajax存储到php中，再展示出来。其实js能直接展示，但是我后续要做的模拟炒股需要把数据放到服务端运算。</p><p>顺便问下看到这个日志的朋友，谁知道股票的数据来源是从哪里来的?或者有什么代理商没，用sina这种不知道几手的数据怕给封掉ip</p>]]></content:encoded>
<author><![CDATA[greengnn]]></author>
<dc:creator><![CDATA[greengnn]]></dc:creator>
<wfw:commentRss>http://www.greengnn.org/index.php/feed/2009/09/01/7.html</wfw:commentRss>
</item>
<item>
<title><![CDATA[JavaScript 模板]]></title>
<link>http://www.greengnn.org/index.php/2009/08/10/5.html</link>
<pubDate>Sun, 09 Aug 2009 16:01:42 +0000</pubDate>
<category><![CDATA[JavaScript]]></category>
<description><![CDATA[JavaScript模板是什么东东？懂php smarty框架的人应该能够理解模板，作为MVC的view层，为什么对这个东西感兴趣，最近给blog添加google日历，用的是json的方式，用创建do...]]></description>
<guid>http://www.greengnn.org/index.php/2009/08/10/5.html</guid>
<slash:comments>1</slash:comments>
<comments>http://www.greengnn.org/index.php/2009/08/10/5.html#comments</comments>
<content:encoded><![CDATA[<p>JavaScript模板是什么东东？懂php smarty框架的人应该能够理解模板，作为MVC的view层，为什么对这个东西感兴趣，最近给blog添加google日历，用的是json的方式，用创建dom的方式展示数据超级麻烦，而且死google的json嵌套又特别复杂，为了维护方便还是用js模板比较好一些。<br />不过还没应用到blog上，先看我的<a href="http://www.greengnn.org/lab/template/" target="_blank">demo</a></p><p>下面就粘贴几个不错的模板资料，还有<a href="http://www.twinsenliang.net" target="_blank">twinsenliang</a>弄的WTemplet。</p><ul><li>一个简单的JavaScript模板原理教程<a href="http://bbs.blueidea.com/viewthread.php?tid=2735200" target="_blank">客户端模版应用</a></li><li><a href="http://www.webrebuild.org/wtemplet/" target="_blank">WTemplet</a>，请重点看下这个技术所传达的web开发流程优化</li><li>一个完善的牛逼的老外的<a href="http://code.google.com/p/trimpath/wiki/JavaScriptTemplates" target="_blank">JavaScriptTemplates</a>，先一睹他的<a href="http://trimpath.com/demos/test1/trimpath/template_demo.html" target="_blank">demo</a></li></ul><p>JavaScriptTemplates想多说几句，他是TrimPath项目的一个部分，目的是在js基础上实现MVC的模式，应用google gears的离线技术等创建牛逼的客户端应用，JavaScriptTemplates只是TrimPath的view层应用。该项目中还包含了一个<a href="http://code.google.com/p/trimpath/wiki/TrimQuery" target="_blank">TrimQuery</a>，我个人对js知道的甚少，觉得这个玩意也很牛逼，因为他实现客户端使用SQL的方式查询数据，直接看他的<a href="http://trimpath.com/demos/test1/trimpath/query_demo.html" target="_blank">demo</a>一目了然，反正我能看懂的洋码子也不对。这个项目在<a href="http://code.google.com/p/trimpath/" target="_blank">Google code</a>开源了，可以方便拿到代码，自己顺便留个记号，以防以后用得到。</p><p>取他例子的一段代码看看：<br />TrimQuery</p><pre>
SELECT Customer.id, Customer.acctBalance, Invoice.total
FROM Customer, Invoice
WHERE Customer.id = Invoice.custId
ORDER BY Customer.id
</pre><p>JavaScriptTemplates</p><pre>
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;Name&lt;/td&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Quantity &amp; Alert&lt;/td&gt;
&lt;/tr&gt;
{for p in products}
&lt;tr&gt;&lt;td&gt;${p.name|capitalize}&lt;/td&gt;&lt;td&gt;${p.desc}&lt;/td&gt;
&lt;td&gt;$${p.price}&lt;/td&gt;&lt;td&gt;${p.quantity} :
${p.alert|default:&quot;&quot;|capitalize}&lt;/td&gt;
&lt;/tr&gt;
{forelse}
&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;No products in your cart.&lt;/tr&gt;
{/for}
&lt;/table&gt;
</pre>]]></content:encoded>
<author><![CDATA[greengnn]]></author>
<dc:creator><![CDATA[greengnn]]></dc:creator>
<wfw:commentRss>http://www.greengnn.org/index.php/feed/2009/08/10/5.html</wfw:commentRss>
</item>
<item>
<title><![CDATA[应用google gears提高打开速度]]></title>
<link>http://www.greengnn.org/index.php/2009/08/06/4.html</link>
<pubDate>Thu, 06 Aug 2009 15:51:55 +0000</pubDate>
<category><![CDATA[JavaScript]]></category>
<category><![CDATA[Performance]]></category>
<category><![CDATA[google]]></category>
<description><![CDATA[google gears是提供离线存储的一个平台，NB的应用gmail的离线版，google日历的离线版等，他的本地存储对不经常变动的静态文件进行存储，降低请求数挺爽的，qzone已经采用了，不过今天...]]></description>
<guid>http://www.greengnn.org/index.php/2009/08/06/4.html</guid>
<slash:comments0/>
<comments>http://www.greengnn.org/index.php/2009/08/06/4.html#comments</comments>
<content:encoded><![CDATA[<p>google gears是提供离线存储的一个平台，NB的应用gmail的离线版，google日历的离线版等，他的<a href="http://code.google.com/intl/zh-CN/apis/gears/api_localserver.html#overview" target="_blank">本地存储</a>对不经常变动的静态文件进行存储，降低请求数挺爽的，qzone已经采用了，不过今天我测试了下又没了。</p><p>下面简单几句就搞定静态文件的存储，如果安装了gears，就可以体验到我的blog的文件本地存储服务。<br />一个完整的<a href="http://www.greengnn.org/lab/gears/index.html" target="_blank">离线测试demo</a>。</p><p>简单的代码</p><pre>&lt;script&nbsp;type="text/javascript"&nbsp;src="gears_init.js"&gt;&lt;/script&gt;
&lt;script&nbsp;type="text/javascript"&gt;
var&nbsp;localServer&nbsp;=&nbsp;google.gears.factory.create('beta.localserver');
var&nbsp;store&nbsp;=&nbsp;localServer.createManagedStore('test-store');
store.manifestUrl&nbsp;=&nbsp;'site-manifest.txt';
store.checkForUpdate();
&lt;/script&gt;</pre><pre>//&nbsp;site-manifest.txt
{
&nbsp;&nbsp;"betaManifestVersion":&nbsp;1,
&nbsp;&nbsp;"version":&nbsp;"site_version_string",
&nbsp;&nbsp;"entries":&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;"url":&nbsp;"site.html"&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;"url":&nbsp;"gears_init.js"&nbsp;}
&nbsp;&nbsp;]
}</pre>]]></content:encoded>
<author><![CDATA[greengnn]]></author>
<dc:creator><![CDATA[greengnn]]></dc:creator>
<wfw:commentRss>http://www.greengnn.org/index.php/feed/2009/08/06/4.html</wfw:commentRss>
</item>
<item>
<title><![CDATA[js和css文件的延迟加载]]></title>
<link>http://www.greengnn.org/index.php/2009/08/06/3.html</link>
<pubDate>Thu, 06 Aug 2009 01:44:28 +0000</pubDate>
<category><![CDATA[JavaScript]]></category>
<category><![CDATA[Performance]]></category>
<description><![CDATA[正常情况下，文件会被写到head区域，不管本页面用得到用不到就要加载，这种方式会造成一次性请求数过多加大block的时间，也容易造成文件字节过大。

延迟加载的方案是通过js在dom需要的位置load...]]></description>
<guid>http://www.greengnn.org/index.php/2009/08/06/3.html</guid>
<slash:comments0/>
<comments>http://www.greengnn.org/index.php/2009/08/06/3.html#comments</comments>
<content:encoded><![CDATA[<p>正常情况下，文件会被写到head区域，不管本页面用得到用不到就要加载，这种方式会造成一次性请求数过多加大block的时间，也容易造成文件字节过大。</p><p>延迟加载的方案是通过js在dom需要的位置load文件，比如一些需要用户触发才展示的组件，日历选择，弹出框等。</p><p>一个<a href="http://www.greengnn.org/lab/load/test.html" target="_blank">demo</a></p><pre>function&nbsp;loadScript(url,&nbsp;callback){

&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;script&nbsp;=&nbsp;document.createElement("script")
&nbsp;&nbsp;&nbsp;&nbsp;script.type&nbsp;=&nbsp;"text/javascript";

&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(script.readyState){&nbsp;&nbsp;//IE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script.onreadystatechange&nbsp;=&nbsp;function(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(script.readyState&nbsp;==&nbsp;"loaded"&nbsp;||
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script.readyState&nbsp;==&nbsp;"complete"){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script.onreadystatechange&nbsp;=&nbsp;null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;//Others
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script.onload&nbsp;=&nbsp;function(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;script.src&nbsp;=&nbsp;url;
&nbsp;&nbsp;&nbsp;&nbsp;document.getElementsByTagName("head")[0].appendChild(script);
}
function&nbsp;loadCSS(url){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cssLink&nbsp;=&nbsp;document.createElement("link");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cssLink.rel&nbsp;=&nbsp;"stylesheet";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cssLink.rev&nbsp;=&nbsp;"stylesheet";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cssLink.type&nbsp;=&nbsp;"text/css";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cssLink.media&nbsp;=&nbsp;"screen";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cssLink.href&nbsp;=&nbsp;url;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementsByTagName("head")[0].appendChild(cssLink);
}</pre>]]></content:encoded>
<author><![CDATA[greengnn]]></author>
<dc:creator><![CDATA[greengnn]]></dc:creator>
<wfw:commentRss>http://www.greengnn.org/index.php/feed/2009/08/06/3.html</wfw:commentRss>
</item>
</channel>
</rss>