Mein Plugin erweiterbar zu machen, ist der nächste Weg, um die Probleme der meisten Leute zu lösen. Und ich weiß, dass ich hier und da viele Filter- und Action-Hooks platzieren kann, um die Dinge dynamischer zu gestalten. Aber für mich ist es zu chaotisch.
Kürzlich hat ein Benutzer meines Plugins gebeten, den Text des QuickInfos zu ändern, und in diesem Fall ist dies kein so schlechter Grund. Auf dieser Seite befinden sich 6-8 QuickInfos. Ich weiß, dass ich Filterhaken für jeden von ihnen platzieren kann. Aber soll ich?
Gibt es einen Nachteil, Leistungsprobleme beim Platzieren vieler Haken?
Antworten:
Solange an Hooks nichts gebunden ist, sind sie No-Ops, das heißt fast nichts und haben keinen wesentlichen Einfluss auf die Laufzeit. Es wird ganz anders , wenn die Dinge sind süchtig und es gibt eine Menge von Anrufen.
Da Sie über das Anpassen von Zeichenfolgen sprechen, wäre das gute Beispiel
gettext
Hook-in-Core. Jeder lokalisierte String durchläuft ihn.Also in der Theorie ist dies ein sehr flexible Haken, der fast überall Filtertext ermöglicht. In der Praxis kann es tausende Male ausgelöst werden, und wenn Sie sich nur vorbehaltlos daran anschließen, wird die komplexe Site schnell zum Stillstand gebracht.
Sie behandeln Ihren Anwendungsfall nicht detailliert genug, um eine bestimmte Implementierung zu empfehlen. Im Allgemeinen haben Sie mehrere Möglichkeiten, wie Sie dies organisieren können:
apply_filters( 'prefix_tooltip', $text )
Im Grundfall müsste der Filter herausfinden, ob der Text genau übereinstimmt, um den Kontext zu bestimmen, und somit zerbrechlich.apply_filters( 'prefix_tooltip', $text, 'type/location' )
Mit einem zusätzlichen Argument können Sie den Typ der QuickInfo angeben, auf die der Filter abzielen kann. Selbst wenn sich der Text ändert, wird er vom Typ identifiziert.apply_filters( 'prefix_tooltip_' . $type, $text )
dynamischer Hook-Name, der sich mit dem variablen Wert ändert; Dies ist sehr flexibel für Fälle mit vielen / generierten Typen. Das Problem besteht hauptsächlich darin, dass dynamische Hooks im Code schwerer zu erkennen sind und sich viel schlechter selbst dokumentieren lassen.apply_filters( 'prefix_tooltips', $texts_array )
Einzelfilter für den vollständigen Satz der verwendeten Tooltips.Bei einer Anzahl von 6 bis 8 Einträgen gibt es keinen wirklich bedeutenden Leistungsunterschied zwischen diesen.
Für Sie ist es wichtig zu lernen, welche Ansätze es gibt und dass Sie sorgfältig den für jeden Fall am besten geeigneten auswählen müssen, damit er für Sie und nachgeschaltete Entwickler sinnvoll und bequem ist.
quelle
Hier gibt es wirklich zwei Fragen: 1. Wie wirkt sich ein Haken aus? und 2. Sollten Sie einfach überall Haken spreizen
Die Auswirkung ist nahe Null. Wenn nichts an der Aktion / dem Filter
do_action/apply_filters
hängt, werden die Anrufe fast sofort zurückgegeben, sodass Personen, die den Hook nicht verwenden, keine spürbaren Auswirkungen haben. Daher ist es technisch nicht schlecht, sie hinzuzufügen (wenn Sie dies tun) Geben Sie einen halbwegs vernünftigen Grund für das Hinzufügen von Hooks zum Kern an. Dies wird höchstwahrscheinlich durch das Kernthema hinzugefügt.Aber ist es als Softwareentwicklungspraxis klug? Nein. Hooks sind APIs, und APIs bedeuten, dass Sie sich verpflichten, sie langfristig zu warten. Daher sollten Sie wie bei jeder "offiziellen" API, die Sie erstellen, denken, dass dies auf lange Sicht für Ihr Plugin sinnvoll ist, und Sie tun dies nicht nur, um einen Plugin-Benutzer glücklich zu machen.
Wenn Sie Ihrer Beschreibung nach der Meinung sind, dass ein Text angepasst werden muss, sollten Sie möglicherweise in Betracht ziehen, dafür einen Einstellungsbildschirm zu verwenden. Dies ist natürlich auch eine Art API, die jedoch für Endbenutzer sichtbarer ist.
quelle
Anpassung ist immer ein Stein des Stolperns (schmerzhafter Prozess). Von einer Seite haben wir echte Anfragen (Probleme) von Benutzern, die immer wichtig sind. Auf der anderen Seite können all diese zusätzlichen Optionen Ihr schönes Thema, Plugin oder ein abstraktes Produkt zur Hölle machen. Was können wir als Entwickler tun?
Als erstes. Schreiben Sie erweiterbaren Code mit der Möglichkeit, einige Teile Ihres Codes zu ändern - wiederverwendbaren Code. Klassen, Schnittstellen, Merkmale und nur das Aufteilen von falschem Code in kleine Methoden (Funktionen). Einige Benutzer können sie problemlos verwenden, ohne Änderungen an Ihrem Produkt vorzunehmen. Zum Beispiel kann jemand ein Widget mit seinen eigenen Bedürfnissen erstellen und die interne Plugin-Funktion verwenden
please_echo_the_plugin_awesome_stuff()
.Das Hinzufügen der neuen Filter und Aktionen ist keine schlechte Idee . Viele beliebte Plugins wie Jetpack oder bbPress enthalten Hunderte von Filtern im Code. Manchmal sogar übermäßig. Jeder neue Filter (oder jede neue Aktion) ohne Handler verursacht normalerweise keinen großen Overhead. Es ist eine Mikrosekunde.
10 ^ −3 s Millisekunde ms 10 ^ −6 s Mikrosekunde µs
Viel wichtiger ist, was Sie bei dieser Aktion tun, indem Sie neue Handler über
add_action()
oder hinzufügenadd_filter()
. Zum Beispiel Anfragen an den Datenbankserver (manchmal nicht offensichtlich, wie das Abrufen der Option "Nicht automatisch laden"get_option()
). Und du kannst es messen. Das einfachste Beispiel:Es ist eine sehr einfache und manchmal am besten geeignete Technik, um Ihren Code zu profilieren. Übrigens hat WordPress interne "Stoppuhr", Kasse
timer_start()
undtimer_stop()
.Oder Sie können XDebug verwenden. Die Konfiguration scheint sehr komplex zu sein. Sie können jedoch VVV oder einen anderen einsatzbereiten Server verwenden. Alle haben Xdebug bereits richtig konfiguriert und Sie können es einfach verwenden - klingt großartig, nicht wahr?. Wenn Sie VVV verwenden, drücken Sie einfach einige Befehle:
Das ist alles! Wechseln Sie zu Ihrer IDE und profilieren Sie Ihren Code. Oder verwenden Sie interne VVV-Dienste wie WebGrind. Weitere Informationen zu diesen Techniken finden Sie im Code Debugging Wiki . Es sollte beachtet werden, dass die Verwendung von Xdebug die Leistung beeinträchtigt, Sie jedoch langsamen Code finden können (Engpass).
Und drittens. Das letzte Ding. Die WordPress-Philosophie ist Entscheidungen, nicht Optionen .
quelle