紫荆棘鸟

注册日期:2008-05-03
访问总量:2941358次

menu网络日志正文menu

博客新版很慢的另一原因是JavaSript很糟糕


发表时间:+-

改贴,在这里加几句:很多同学(包括我自己)留言说,没法删除评论,没法修改帖子,新版为啥将这些基本功能去掉了,etc。其实呢,这些功能都在,只不过因为新版的程序问题,导致这些功能被隐藏了,因为如前贴留言以及这里所说的那样(见下面正文打头的蓝色部分),无论用户做什么(点击阅读,发评论等),用户电脑程序都会向服务器发出更新请求,这其中就包括登录请求(哪怕你已经登录了)。比如说你刷新自己的主页或者某篇文章,如果你登录了,老版是不会向服务器继续发登录请求的,因此老版知道你登录了,你是文章的主人,于是将“修改文章”链接enable。但新版不行,你点击什么,程序会assume你没登录(尽管记住了你的userName/password)。在新版。通常登录比刷新文章慢,所以你的文章刷新后,登录并没有完成,所以系统就会判定你不是文章的主人,从而disable修改文章的链接。删除评论也是同样的原因。这些都是新版程序bug带来的。

目前没啥好办法删除评论,但修改文章是可以的。你登录后,点击左上角的“发表日志”链接,点击完后再点击左侧的“日志管理”就成了。


博客新版除了提供的功能严重退化外,另一值得吐糟的地方就是它非常慢,至少比旧版明显慢。这基本上应该是共识了。这里先不说功能退化,光说快慢的问题。新版之所以慢,原因估计不少,但有些原因是结构上根本的,凭万维的技术力量,在较短的时间内只怕是修改不了的 --- 上贴的留言里我们分析了新版之所以慢的主因之一,这里将留言摘录如下,估计大部分读者都能看得懂:

“刚才熘达了一下,很明显,新版为啥更慢的原因是,无论用户做什么 (例如点击文章),那么整个版面都将更新一次,包括用户登录。
如果你点击文章,那么像用户登录,版面的左栏(什么友好连接,名片,分类目录等),还版面最上面那些和文章无关的东西,是不必更新的。
旧版之所以快一点,是因为这些不必要刷新的内容,就没去服务器那边刷新,只有文章显示的那部分才去刷新。
新版呢,大家留意一下,点击文章后,左栏的很多内容开始都是空白,随后才显示完整。为啥呢?很明显,新版的程序在向服务器那边发刷新的请求---这样很明显,服务器和用户电脑都变得更慢了。
哪 位电民看看我说错了没。我估计十有八九是这么回事情。你说新版为啥不慢?不慢才奇怪,冤枉做了很多不必要的劳动。”

这里我觉得我找到了新版为啥很慢的另一主因:糟糕的 JavaScript。

茶馆的大拿夭夭同学很早就怀疑 BBS 的 JavaScript 很糟糕,因为他说经常让他的 browser 当掉:那些 JavaScript 经常让他的电脑 CPU 100% 负载运行。这种情形,我在新版博客已经遇到几次了。例子之一就是芹泥同学的文章:我们的秋天(ZT)
   http://blog.creaders.net/u/6210/201509/235929.html
因为我一般不用 IE,所以我就测试 FireFox 以及 Chrome。我的 FireFox 版本是 40.03,Chrome 版本是 45.0.24……,估计不是最新的版本,但无论如何算很新的。测试结果,我用 chrome 能打开芹泥这篇文章(虽然不算快),但用 Firefox 基本上打不开,因为我遇到了夭夭差不多的情况:CPU 满负荷运行,大约一分钟后浏览器就弹出一个类似下面这个 warning 的窗口:
jsPopup.jpg



通常如果在别的网站遇到这种 JavaScript 的问题,选择“Don't ask me again”+“Stop script”就行了,但万维不行:它还是继续 run 这个“language.js”,让 CPU 100% busy,然后弹出个类似的窗口……就芹泥这篇文章而言,问题都出在这个 language.js,它像土八路一样非常让国军讨厌:煮不烂,咬不动,打不掉,甩不开,呵呵。

如果将 JavaScript disable 掉如何呢?尽管这是个馊主意,但不妨试试看。于是我 disable 了 JavaScript。结果我的主页就成了下面这个样子:

noJS.jpg


看到了么?登录内容以及左侧栏目的内容全部消失了,不过主栏内容都在,点击文章时速度很快,文章内容和评论内容不到一秒全部加载完毕。如果 JavaScript is enabled(通常情形),打开一篇文章需要 5-20 来秒。因此结论就是:
    新版之所以很慢,主因之一是因为 JavaScript 导致的(上面我从昨天有关的帖子引述的结果,是另一主因,而且那个主因也很明显是用户电脑这边的程序问题:那些根本不需更新内容的模块,它总是不停地向服务器发出更新请求)。

有严重问题的可能不止 lanaguage.js,但 language.js 肯定有严重问题,因为芹泥这篇文章,看不出有啥异样,但用 firefox 就是打不开(我将 firefox 的缓冲,cookie全部清除后重新 start firefox,还是有同样的问题,文章打不开)。

于是俺来 debug 这个 lanaguage.js,看能否看出什么问题,尽管我对 JavaScript 一窍不通。等了几分钟,debug 结果显示如下:

debug.jpg

问题出在 Line 71:for(var i=0;i

    for(var i=0;i    {
        if(cc.charCodeAt(i)>10000&&tt.indexOf(cc.charAt(i))!=-1)str+=ss.charAt(tt.indexOf(cc.charAt(i)));
          else str+=cc.charAt(i);
    }

其中一些变量的取值见图:

d2.jpg

cc = “  我连忙道贺,他无言只微笑着一鞠躬。”(芹泥原文中的一句),ss 的值很长,见附录。str =“  ”,tt = 的值也很长,见附录留言。这几行不知在干什么,倒好像在进行繁体字和简体字转换(哪位电民懂这个?俺是一窍不通),似乎是这么回事:
1)对芹泥原文的每一段(这时的一段刚好就一句)话,或者一句话,或者一行(or whatever)
2)对1)中的每个字,如果它是繁体字,转换为简体字。

如果 language.js是这么运行的,那肯定慢了(至于有什么好办法,别问我,呵呵,不懂),不过如果光是慢还能凑合(例如在 Chrome 中),问题在于它基本上不 work。如果你看上上图的 “Call Stack”,你会发现 Line 45 似乎被自己 call 了非常非常非常多的次数(至少上千次)。不知程序在干嘛。这几行程序我拷贝如下,供电民们参考,其中红色那行就是 Line 45:

//转换对象,使用递归,逐层剥到文本
function LangBody(fobj)
{
    if(typeof(fobj)=="object"){var obj=fobj.childNodes}
    else
    {
        var obj=document.body.childNodes
        document.title=LangText(document.title)
    }
    for(var i=0;i    {
        var OO=obj.item(i)
        if("||BR|HR|TEXTAREA|".indexOf("|"+OO.tagName+"|")>0)continue;
        if(OO.title!=""&&OO.title!=null)OO.title=LangText(OO.title);
        if(OO.alt!=""&&OO.alt!=null)OO.alt=LangText(OO.alt);
        if(OO.tagName=="INPUT"&&OO.value!=""&&OO.type!="text"&&OO.type!="hidden")OO.value=LangText(OO.value);
        if(OO.nodeType==3){OO.data=LangText(OO.data)}
        else LangBody(OO)
    }
}

浏览(2634)
thumb_up(10)
评论(52)
  • 当前共有52条评论
  • 紫荆棘鸟
    hmm...瑾子好,很奇怪的是刚刚用firefox去修改某篇文章(不是真的要去修改,而是测试),就是那篇 秋(古绝一组) (因为它字数最少,呵呵),结果:
    1)发现了 <span 之类的 tags
    2)七首古绝只能显示四首多。
    奇怪吗?所以问题不一定就是来自不同的browser(IE,say),更有可能是因为存入数据库的老data 不能completely handled by 新的编辑器。
    屏蔽 举报回复
  • 瑾子
    紫儿:我用 IE编辑博文时,那些 html tags 不会变,无论我等多久,也就是说无法编辑。倒是用 chrome 测试时,像你说的那样,html tags 闪了一下,马上恢复正常。

    框框昨天仍然不断出现在我的firefox浏览器上,我没有仔细看它,但和你文中的图片一模一样,下边也是那三个选择。刚才我又试了一下,还没有看到它,希望它彻底被赶走了。

    我还试了一下IE,那个Scrip Error框框再次出现,这次我能够关掉它,也立刻关了万维,以免死机。
    屏蔽 举报回复
  • 紫荆棘鸟
    @瑾子:刚才我用 IE 测试了一下你所说的。我久不用 IE,版本可能比较老。
    测试了一篇以前带 font 格式的,编辑文章时,最开始也能见到一堆 html tags(估计数据库里保存的就是那个格式),但很快这些标签就不见了,被编辑器 rendering 成带颜色和字体的文本。

    (如果我在 IPHONE 或者 IPAD下编辑文章,倒是确实能见到诸如 <font...或者<span> 之类的标签。很明显,IOS 不知如何 render 这些html 标签)

    所以在 IE 环境下我不能 reproduce ur issues……

    关于 language.js...这个 javascript 就算没有完全 disable,也至少是改了很多。我倒是觉得 essentially disabled 了,因为我这两天一直没见到它,而且你看这个帖子的第二个跟贴,起先是显示简体的(本来应该显示繁体),现在没有了,显示的确实是繁体,这就表明 language.js 不再对它起作用了。

    如果你遇到类似的问题,你确信是因为 language.js? 你看第一个附图,那里确实写明了是 language.js。
    屏蔽 举报回复
  • 紫荆棘鸟
    对,我也支持 marsfield 的提议,还是老版的那种 paging 分页比较好。我如果想到第十页,直接输入 10 回车就行。现在则不成,只能老老实实地按“更多文章”。如果作者有 1000 篇文章,那么这 1000 篇文章的信息都会显示在同一版面中,这显得很 silly。paging 明显合理得多,不知为啥舍弃。
    屏蔽 举报回复
  • Marsfield
    博主这个帖子非常好。赞。

    顺便在这里也提一点:

    以前,每个博主的文章列表除了左侧栏的列表之外,在正下方也有用页数来显示。改版后,用“更多网络日志》》”来显示。这个改动对检索文章多的博主的文章简直就是一个梦魇,不可能完成的任务。如果博主的设置是一页显示3,5篇文章,每次按一下“更多网络日志》》”,再显示3,5篇文章,对一位有上百,几百上千的文章,你怎么去搜索?这种不顾顾客体验的改动真的是莫名其妙。万维博客的挨踢人自以为是让人难以理解。
    屏蔽 举报回复
  • 瑾子
    紫儿好,谢谢!我上边贴的那个 HTML 标签,出现在我登录我的账号,并打开“编辑日志”要编辑博文时,你看不到的。而且只有在使用IE时有这种奇怪的HTML 标签。

    在用firefox浏览万维时,那个language.js框框仍然活跃,只是不会马上出现,如果在网页上呆的久一点,转换几篇不同的文章,它就会跳出来。IE上的Scrip Error框框症状差不多,它们都没有被disable,起码在我的电脑上。这会儿我的firefox 和IE浏览器,全被这两个框框劫持了,对firefox 只能关掉万维。而对IE,不得不关电源。好在我现在有 chrome,不然,寸步难行。

    希望万维管理员能看到我们的反馈。
    屏蔽 举报回复
  • 紫荆棘鸟
    @瑾子:你是说这篇文章 (from your blog):
    http://blog.creaders.net/u/5840/201508/229004.html
    我刚才看了一下,挺好的呀,无论是 firefox 还是 chrome,没看到什么
    <span> 之类的明着显示了出来。
    屏蔽 举报回复
  • 紫荆棘鸟
    谢华山。那些建议可以发到管理员那里。

    瑾子好!Administrator账号是windows自带的,最 low-level 的管理员账号,通常它是 invisible 不明着显示的。一台PC可以有多个管理员账号,你目前用的就可能是。如果是而你对电脑不是特别熟,例如时不时感染病毒的话,最好是用个non-admin的账号上网,那样会安全不少。IE最好不用,你的bookmarks/favorites 其实是可以import到firefox或者chrome去的,你狗一下就知道如何做。

    Norton不是free的吧,杀毒软件通常只能“惩前”,不能“毖后”,如果你的Norton是free version,那它就不能update new virus definitions,也就没什么价值了。你查查看,如果你的last update是最近的,那就用norton;否则如果你不能更新,那就干脆卸载它,装Avast,或者微软的Security Essentials。微软的Security Essential不能remove BIOS level的病毒,这个我见识过。

    你博文那些 <span> 之类的符号,其实是些 HTML 标签。具体就不说了。你现在之所以见到这些,是因为新版的程序和老版程序之间的区别带来的。万维很多程序我估计是从哪里搬来的,所以handle <span> 这些html tags就会和老版不一致,这些不难fix(我猜),但万维能否fix,什么时候 fix,就不得而知了。前不久我介绍的在评论区贴图的方法,现在也不行了,呵呵。

    你在firefox下不见了那个JavaScript弹出的warning 框框,我想是因为万维改了程序,disable了那个不必要的language.js。我用firefox也能打开芹泥的那篇文章,前天都不行的。
    屏蔽 举报回复
  • 瑾子
    非常感谢紫儿MM的详细指点!

    刚刚下载了Avast Free Antivirus 和Chrome,我电脑上一直有norton,但每次装Chrome,都看起来有病毒袭击的危险,希望Chrome这次运行安全。我电脑上有一个administrator 账号, 应该就是管理员账号吧?我平常用自己的账号上机,从来没有和管理员账号打过交道。刚才我正是按你所说用管理员账号操作的下载,也不知道有什么好处。

    现在来说说眼下的问题,用FireFox打开万维时,那个JavaScript 仍然出来捣乱,今天上午出门前我匆匆试了一下,好像那东西消失了,很高兴,不想刚才它还是那副懒着不走的样子,什么也干不成,必须关网页。
    用IE时,问题更可怕,1)每次准备打开一个新页时,比如,从万维首页换到博客网页, Script Error窗口就跳出来,最后死机,关电源。重新开机后,好像好点儿。2)不能copy,比如我想copy你的某句话,无法highlit,copy不成。3)根本无法编辑博文,打开编辑日志时,看到是这些东西(一篇博文节选),前几天好像不是这样:

    “<span> </span> 
    <p>
    <span style="color:#003399;line-height:1.5;font-family:SimHei;font-size:16px;">五月末不是习俗墓祭上坟的时候,陵园空寥不见人,也不闻人语声,只有我和弟弟,我捧一盆新插的鲜花,跟着他,去看我们的父母。来过几次还是不认路,陵园大,说是江南园林风格,有几处殿堂,粉墙翘檐,给为死者做事的人用。一条浅河默默流过石桥,桥大概是伤心桥,水到这里呜咽几声,汨汨而去。柳丝搭在石桥上,像素手纤指,抚摸白色雕纹,一下,一下,柳应该是念亲柳。走过去,再走过长林矮柏。五月末是花季</span><span style="color:#003399;line-height:1.5;font-family:SimHei;font-size:16px;">,夹竹桃一人多高,花如白绒穗,走过风吹飒飒,转过头看看,明明像说话,我听不懂。</span><span style="color:#003399;line-height:1.5;font-family:SimHei;font-size:16px;">玫瑰园正是绛唇初点,远远看着,翠环丁当</span><span style="color:#003399;line-height:1.5;font-family:SimHei;font-size:16px;">,陵园的死气不再沉沉。墓碑立于花木之中,高一片,低一片,最小的墓碑是石砖,一排一排埋入青草中。父母的墓在小河旁,黄泥土径可能是特意留下,走上去能感觉土地的肌肤,柔软亲切,脚下也轻了,体会回音,石板和柏油路的回音是敲鞋底,土径的回音是摩挲</span><span style="font-family:SimHei;"><span style="color:#003399;line-height:1.5;font-size:16px;">---</span><span style="color:#003399;line-height:1.5;font-size:16px;">有灵性。</span></span> 
    </p>
    <span> </span> 
    <p>”

    多年用IE,我还是比较习惯它,其中一个原因是google search bar 随时可得,不必我打进去。另外那些favorites bar 也很方便,一键打开我的博客网页、万维等等。现在FireFox也有favorites bar功能,但Chrome上没有。
    不能在自己的博客网页登陆,编辑完之后要去主页,绕道回自己的博客网页,也挺不方便。
    再次谢谢MM!
    屏蔽 举报回复
  • 华山
    咱最希望的还是系统更新后彻底铲除拉黑与删贴功能。万维应该有统一不带预设意识形态立场的惩戒措施,从警告,严重警告与拉黑功能。这些功能应该由网管统一掌控。不能让这些功能为意识形态斗争所用。

    过去传统模式:置顶 + 删贴 + 拉黑,实际上就是变相的一言堂。不管你愿不愿意,你得跟着置顶的观念走,否则连批驳的权利都被剥夺。

    对将来的走向,咱们试目以待。
    屏蔽 举报回复