Ich habe eine Anwendung in Clojure, die ein Java-Framework namens Vaadin verwendet. Vaadin verwendet mehrere Callbacks mit der Java "Proxy" -Funktion von Clojure. Jedes Mal, wenn ein Proxy in einer Clojure-Funktion aufgerufen wird, gibt es jedoch eine signifikante Verzögerung (manchmal 100 ms). Kann ich das irgendwie beschleunigen?Langsame Aufrufe an Clojure Proxy
Antwort
Meines Wissens ist das neue reify
Makro schneller als proxy
. Sie können es verwenden, wenn Sie nur eine einzige Schnittstelle implementieren müssen.
Zum Beispiel, wenn Sie ein java.awt.event.ActionListener
implementieren möchten, können Sie Code wie den folgenden verwenden:
(import 'java.awt.event.ActionListener 'javax.swing.JButton)
(let [a-button (JButton. "Click Me")]
(.addActionListener a-button
(reify ActionListener
(actionPerformed [this ev] (comment do something interesting)))))
Aus irgendeinem Grund funktioniert die Verify nicht auf der Vaadin-Schnittstelle com.vaadin.ui.Button $ ClickListener. Ist das becomuase com.vaadin.ui.Button $ ClickListener ist eine statische Schnittstelle? – Zubair
@Zubair: Nicht sicher. Ich musste eine Zeit lang mit der Verify-Funktion herumspielen, bevor ich es zur Arbeit brachte. Das letzte, was ich getan habe, war die 'this' Variable hinzuzufügen. Welchen Fehler hast du bekommen? – Ralph
Eigentlich kann man mehrere Interfaces in einem einzigen 'verify' Formular implementieren. Die Einschränkung gegenüber "proxy" ist, dass 'reif 'die Klassen nicht erweitern kann. –
- 1. FakeItEasy Proxy-Methoden Aufrufe an echte Implementierung
- 2. Sporadisch langsame Aufrufe von .NET-Anwendung an SQL Server
- 3. repetitive Aufrufe an beginBackgroundTaskWithExpirationHandler
- 4. Verwenden von Python-Threads, um tausende Aufrufe an eine langsame API mit einem Ratenlimit zu senden
- 5. asp.net ajax Aufrufe an Benutzersteuerelemente
- 6. kombiniert mehrere Aufrufe an ScriptResource.axd
- 7. Mehrere Aufrufe an HttpContent ReadAsAsync
- 8. Langsame Internetgeschwindigkeit = Langsame Daten gesammelt?
- 9. Magento langsame Suche nur an einer Seite
- 10. TensorFlow: langsame Leistung bei Gradienten an Eingängen
- 11. NSURLConnection NSURLRequest Proxy für asynchrone Web-Service-Aufrufe
- 12. Proxy-Servlet hängt an HttpClient.execute()
- 13. Wrap Aufrufe an Methoden einer Python-Klasse
- 14. Mockito: mehrere Aufrufe an die gleiche Methode
- 15. Asynchrone Aufrufe in symfony2
- 16. überschreiben Multi-Arity-Methoden in Proxy in Clojure
- 17. Hinzufügen von Feldern zu einer Proxy-Klasse in Clojure
- 18. Proxy Anfrage an neuen Port mit http-Proxy
- 19. Übergeben von Auth an API-Aufrufe mit Web-Service-Referenzen
- 20. Langsame MySQL-Einfügungen
- 21. Langsame UIViewController-Ladezeit (langsame ClientState-Warnung)
- 22. WPF Rendering langsame Leistung
- 23. Weblogic Server langsame Leistung
- 24. Übergabe von Args an Clojure aus Java
- 25. Zukünftige Versprechungen in Clojure hängt an mir
- 26. Clojure: Annotationen an AOT-kompilierte Methoden anhängen
- 27. Clojure Übergabe einzelner Variablen an die Funktion
- 28. Oracle Anfragen Proxy
- 29. Twisted - Weiterleiten von Proxy-Anforderungen an einen anderen Proxy (Proxy-Kette)
- 30. django ajax Proxy-Ansicht
Haben Sie versucht, die Art Hinweise setzen? –
Meinst du das Hinzufügen von Typhinweisen für den Proxy-Namen oder die Methodenargumente für die implementierten Methoden? – Zubair
Aktivieren Sie einfach 'warn-on-reflection' und geben Sie Typhinweise, um alle Warnungen zu entfernen. –