emu in blogjava

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評(píng)論 :: 2 Trackbacks
          function __flash__arrayToXML(obj) {
              
          var s = "<array>";
              
          for (var i=0; i<obj.length; i++) {
                  s 
          += "<property id=\"" + i + "\">" + __flash__toXML(obj[i]) + "</property>";
              }
              
          return s+"</array>";
          }
          function __flash__argumentsToXML(obj,index) {
              
          var s = "<arguments>";
              
          for (var i=index; i<obj.length; i++) {
                  s 
          += __flash__toXML(obj[i]);
              }
              
          return s+"</arguments>";
          }
          function __flash__objectToXML(obj) {
              
          var s = "<object>";
              
          for (var prop in obj) {
                  s 
          += "<property id=\"" + prop + "\">" + __flash__toXML(obj[prop]) + "</property>";
              }
              
          return s+"</object>";
          }
          function __flash__escapeXML(s) {
              
          return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
          }
          function __flash__toXML(value) {
             var type = typeof(value);
              if (type == 
          "string") {
                  return 
          "<string>" + __flash__escapeXML(value) + "</string>";
              } else if (type == 
          "undefined") {
                  return 
          "<undefined/>";
              } else if (type == 
          "number") {
                  return 
          "<number>" + value + "</number>";
              } else if (value == null) {
                  return 
          "<null/>";
              } else if (type == 
          "boolean") {
                  return value ? 
          "<true/>" : "<false/>";
              } else if (value instanceof Date) {
                  return 
          "<date>" + value.getTime() + "</date>";
             } else if (value instanceof Array) {
                 return __flash__arrayToXML(value);
             } else if (type == 
          "object") {
                 return __flash__objectToXML(value);
             } else {
                  return 
          "<null/>"; //???
              }
          }
          function __flash__addCallback(instance, name) {
            instance[name] = function () { 
              return eval(instance.CallFunction(
          "<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
            }
          }
          function __flash__removeCallback(instance, name) {
            instance[name] = null;
          }

          啥都甭說(shuō)了,看看上面這幾個(gè)“+=”,已經(jīng)把啥都說(shuō)了。剛看到y(tǒng)ouyee同學(xué)定位到一個(gè)嚴(yán)重性能瓶頸并表情上面把這段flash往頁(yè)面里面注入的代碼貼出來(lái)的時(shí)候,emu簡(jiǎn)直無(wú)法相信。
          還好大家都是干這行的,在flash注入完上述腳本后再覆蓋(一開始誤為重載了,感謝jee等同學(xué)的)掉這幾個(gè)函數(shù)并不為難,最多就是為之難受罷了。
          posted on 2010-01-16 13:09 emu 閱讀(3732) 評(píng)論(7)  編輯  收藏

          評(píng)論

          # re: flash player往頁(yè)面注入的腳本表現(xiàn)了adobe的臨時(shí)工水平 2010-01-16 20:39 匿名
          還好大家都是干這行的,在flash注入完上述腳本后再重載掉這幾個(gè)函數(shù)并不為難,最多就是為之難受罷了。

          重載和覆蓋都分不清,不過(guò)是五十步笑百步  回復(fù)  更多評(píng)論
            

          # re: flash player往頁(yè)面注入的腳本表現(xiàn)了adobe的臨時(shí)工水平 2010-01-17 00:28 jee
          javascript里對(duì)字符串不能用+=嗎?javascript又不是java(java里面這樣用才實(shí)效率低下)。
          你對(duì)重載的理解有誤,樓上的已經(jīng)指出了。  回復(fù)  更多評(píng)論
            

          # re: flash player往頁(yè)面注入的腳本表現(xiàn)了adobe的臨時(shí)工水平 2010-01-17 09:25 xpf7622
          前天我匆匆的看了一下,沒仔細(xì)看,我以為JS里+=操作效率低下,也就沒有仔細(xì)看。是啊,重載和覆蓋(c++,Java)都涉及,這個(gè)弄不明白,就有些問(wèn)題了。
          網(wǎng)上好象沒有人說(shuō)JS里+=效率低下。如果有高見,不妨說(shuō)一下。
            回復(fù)  更多評(píng)論
            

          # re: flash player往頁(yè)面注入的腳本表現(xiàn)了adobe的臨時(shí)工水平 2010-01-17 10:55 Feenn
          這是對(duì)的,這個(gè)確實(shí)影響效率,網(wǎng)上可以找到其他人做的測(cè)試。http://topic.csdn.net/t/20051214/15/4459147.html  回復(fù)  更多評(píng)論
            

          # re: flash player往頁(yè)面注入的腳本表現(xiàn)了adobe的臨時(shí)工水平 2010-01-18 10:02 emu
          @匿名
          @jee
          批評(píng)的對(duì)呵呵,有5年沒寫java了(c++更不要說(shuō)了)。
          當(dāng)時(shí)腦子里面閃過(guò)了一下,override中文怎么說(shuō)的來(lái)著,沒細(xì)想就寫成重載了。
          其實(shí)這個(gè)地方并不是面向?qū)ο缶幊讨兴^的重載或者覆蓋了,不涉及到類的繼承,純粹就是一個(gè)函數(shù)覆蓋一個(gè)函數(shù)。確實(shí)應(yīng)該用“覆蓋”的。

          @xpf7622
          不是“+=”效率有問(wèn)題,是對(duì)字符串連續(xù)的“+=”有性能問(wèn)題。在IE8以前的IE瀏覽器中,字符串拼接有和java中一樣的問(wèn)題。因此不建議在循環(huán)中對(duì)字符串使用“+=”  回復(fù)  更多評(píng)論
            

          # re: flash player往頁(yè)面注入的腳本表現(xiàn)了adobe的臨時(shí)工水平 2010-03-12 00:05 yukon
          不大肯定清楚as里+=會(huì)不會(huì)有效率問(wèn)題,
          但同個(gè)祖宗的js用字符串大量+=的確是有效率問(wèn)題。
          因?yàn)镋CMAscript中字符串是值類型而不是引用型。一般解決方法是把每個(gè)字符串放入一個(gè)數(shù)組的數(shù)組項(xiàng),再拼接這個(gè)數(shù)組。  回復(fù)  更多評(píng)論
            

          # re: flash player往頁(yè)面注入的腳本表現(xiàn)了adobe的臨時(shí)工水平 2010-03-12 00:16 emu
          @yukon
          一些新瀏覽器的javascript引擎對(duì)這個(gè)問(wèn)題有一些優(yōu)化,但是現(xiàn)在瀏覽器的主流還是IE6,字符串拼接效率低是無(wú)疑的。  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 莒南县| 阜平县| 科技| 信阳市| 高台县| 建宁县| 汕尾市| 肥乡县| 湖南省| 伊宁市| 濮阳市| 宁乡县| 彭州市| 游戏| 三河市| 无棣县| 江川县| 阿坝| 弋阳县| 阳朔县| 巫溪县| 济南市| 额济纳旗| 绥宁县| 石家庄市| 江都市| 虹口区| 开原市| 三江| 沁水县| 绥德县| 平远县| 于田县| 威信县| 武夷山市| 宜兰市| 五家渠市| 郁南县| 桂林市| 特克斯县| 丰城市|