我有一个关于优化的问题,但有更多关于浏览器/客户端的问题。
我正在迎合一些需要大约3种不同语言的社团。所以我只是将我的用户的语言类型放在php会话中,并在他们导航到的每个页面上交换选定区域的文本。所以,真的没什么复杂的。
然而,我正在考虑让javascript在每个页面上查找/替换所选文本。
有几种方法可以给这只猫上皮,我已经完成了所有这些,并且它们起作用了。但是,我确实有几百页,并用正确的语言文本替换了许多单词。
如果我要使用Javascript路线,是否有人对此持反对态度?如果是这样,为什么?我有兴趣让用户的浏览器完成工作,而不是我的服务器不断寻找和替换,或为每种语言特定情况创建新的CONSTANTS。
我担心他们的浏览器会变慢。但这可能是一个非常小的问题。
对于那些喜欢详细说明的人来说,这就是我用javascript做的事情。
我会加载一个languages.js文件,其中包含我实现的任何语言的所有适当的单词翻译。我没有在每个页面加载上运行巨大的查找/替换,而是将查找/替换本地化到特定页面,或者可能缩小元素以具有我的脚本将在DOM中加载并执行查找/替换的属性仅此一点。
我愿意接受更好的想法。
另外,对于那些发现“过度优化”无用或“过度做”的人,请不要提及任何内容。这是有趣的,而不是关键的决定项目。
谢谢你们!
答案 0 :(得分:1)
嗯,在专业方面,是的,你正在将一些工作卸载给客户,但我认为这不会产生任何真正的影响。您可能正在谈论网站整体性能的一小部分。当然要知道的唯一方法是测试它。
另外,您将增加加载站点所需的带宽,因为用户需要加载页面和语言文件。如果你设置正确,它将被缓存,所以这可能不是一个大问题。
另一个问题是,这将使您的网站依赖于JavaScript。非脚本访问者将无法获得翻译,其中包括搜索引擎。这对您来说是否重要取决于您网站的性质,但总的来说,这是一个非常大的负面因素。
您还必须注意非本地化语言的“闪烁”。如果加载页面会很糟糕,然后在一瞬间将语言更改为其他内容。如果您正在从jquery中的DOM ready事件($(function(){})进行交换,例如),可能为时已晚。您可以从放在页面底部的脚本执行此操作,这可能没问题,但即便如此,它可能取决于浏览器和标记的结构,更不用说用户的带宽以及是否服务器以块的形式发送内容。
我认为这取决于最适合您的需求。对不起,这不是一个答案,但我认为这是一个准确的答案:)
答案 1 :(得分:0)
我同意保持服务器不会过载非常重要。我会用两种方法解决问题
使用您建议的javascript查找和替换,当javascript正在运行时,有一个loading.gif旋转,带有“翻译”效果的消息几乎向用户解释为什么他们必须等待。如果你正在逐字逐句地进行翻译,你必须小心引起像IE这样的浏览器或者抱怨必须做的工作'页面已经变得没有反应';我建议运行一个setInterval(Translate(),1),其中translate一次翻译一定数量的单词,这样浏览器就不会认为你的脚本是无限循环的。
如果所有外国访问者都翻译了相同的部分,您可以创建一个PHP脚本,在原始文件旁边创建新的翻译页面。翻译的页面可以包括translator.php脚本,以快速检查原始页面是否已更改以决定是否创建新的翻译页面。这并不意味着每次需要用外语翻译时翻译页面,只需要检查原始文件是否发生了变化 - 在服务器上加载的负载较少,在客户端浏览器上没有加载。
就个人而言,如果可能的话,我会实现2更低功耗的浏览器(例如移动设备)但实际上要么会这样做,这是一个有趣的问题。