atom-js / document

0 stars 0 forks source link

FAQ #3

Open lianqin7 opened 11 years ago

lianqin7 commented 11 years ago

为什么js里不能使用seajs.use?

首先

在seajs的模式里面,所有的js文件都是 CMD 模块。 而在 CMD 模块中,对模块的引用只能通过 require()require.async() 的方式,seajs.use的用法是 不符合规范

其次

在js文件中使用 seajs.use 也有性能问题,比如:

目前“正确”使用 seajs.use 的流程是这样的:

...
|
| - 在 html/vm 里写 seajs.use 去请求模块(js文件)  
                       ====异步===>  模块  ====> 运行 callback
|
| - 其他html渲染,script运行等
|
...

整个过程的请求都是 异步的 ,不会阻塞

如果是在 js 文件里写 seajs.use 的情况是这样的:

...
| - 在 html/vm 里用 script 标签去加载写有 seajs.use 的入口js
| - ====同步====> 加载 入口js  ====>  运行(有seajs.use) 
                          ====异步====>  模块  ====>  运行callback
|
| - 其他html渲染,script运行等
|
... 

很明显的,入口js文件是同步加载进来的,然后才去异步加载依赖的模块,多了一次 同步的js请求 性能会受影响

还有

js 里的 seajs.use 是无法享受 combo 服务的 ,这个原因另说,也是对性能的大影响


i18n相关

改变页面的i18n

目前只提供一个js调用的接口

// 页面中越早调用越好
// 建议在引入 atom.js 之后马上设置
seajs.setLocale(locale);

目前 locale的规范 是: "en-us","zh-cn"等这种字符串( 小写字母+中划线

模块里使用i18n模块的方法

var i18nStr = './i18n/{locale}.js';
var i18n = require(i18nStr) || {};

通用组件里的 i18n 不够了,要新增怎么办?

联系架构组,把新增的语言模块给架构组,由架构组同学来添加即可