Einzelnen Beitrag anzeigen

Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#279

AW: Google Maps über COM (Component Object Model)

  Alt 31. Aug 2012, 20:07
Ja, was soll ich sagen: JavaScript bleibt nun mal JavaScript - und darauf muß das Framework leider aufbauen (Lizenzbestimmungen von Google).

Ich habe Deine Aussagen untersucht und mußte feststellen, daß die Zuweisung von Ereignishandlern tatsächliche überproportional viel Zeit kostet. Ein kleiner Patch in der Unit JScriptObjects sollte etwas Entspannung bringen:
Delphi-Quellcode:
procedure TCustomScript.MakeFunctionNameUnique(var FunctionName: String);
var
  s: String;
  GUID: TGUID;
begin
  if Assigned(FExternalMethods) then
  begin
    if FExternalMethods.IndexOf(FunctionName)>=0 then
    begin
      CreateGuid(GUID);
      s:=GUIDToString(GUID);
      s:=StringReplace(s,'{','',[rfReplaceAll]);
      s:=StringReplace(s,'}','',[rfReplaceAll]);
      s:=StringReplace(s,'-','',[rfReplaceAll]);
      FunctionName:=FunctionName+s;
      if AnsiChar(FunctionName[1]) in ['0'..'9']
        then FunctionName:='_'+FunctionName;
    end;
  end;
end;
Das Ganze ist zwar kein Wundermittel - brachte aber auf meinem Rechner reichlich 50% Zeitersparnis bei 1000 Markern.

Um für die Marker nicht die ganze Oberfläche zu blockieren, könntest Du deren Erstellung auch in das OnIdle-Ereignis der Anwendung auslagern oder zwischendurch Application.ProcessMessages aufrufen. Die Auslagerung in einen Thread geht leider nicht, da Microsoft's JavaScript-Engine nicht threadsicher ist.

Es wäre schön, wenn Du den Patch testen und mir mitteilen könntest, wie viel er gebracht hat. Wenn ich wieder etwas mehr Zeit habe, werde ich das Ganze noch einmal intensiver untersuchen und finde vielleicht noch die eine oder andere Optimierungsmöglichkeit.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat