wie wichtig ist eine ordnungsgemäße verschlechterung von javascript?
<p>sollten webentwickler weiterhin anstrengungen unternehmen, um unsere webanwendungen schrittweise mit javascript zu verbessern und sicherzustellen, dass die funktionen ordnungsgemäß beeinträchtigt werden, wodurch die zugänglichkeit gewährleistet wird? oder sollten wir diese zeit auf neue funktionen oder andere entwicklungsbereiche konzentrieren?</p><p>der untertext dieser frage wäre: wie viele unserer kunden/kunden/benutzer nutzen unsere websites oder anwendungen mit deaktiviertem javascript? haben sie projekte mit anforderungen, die speziell javascript-funktionalität erfordern (fast alle von mir), und erfordern diese anforderungen auch eine ordnungsgemäße verschlechterung?</p><p>um diese frage zu stellen, habe ich programmers.stackexchange.com ohne aktiviertes javascript aufgerufen und wurde mit der folgenden meldung begrüßt: "programmierer - stack exchange funktioniert am besten mit aktiviertem javascript". es war schwierig, sich anzumelden, obwohl die website im allgemeinen in ordnung zu sein schien. (ich konnte keine fragen beantworten.)</p><p>ich denke, dies ist ein zufriedenstellender ansatz für die entwicklung. stellen sie sich vor, wie viel aufwand erforderlich ist, damit alle funktionen der site mit einfachem altem html und serverseitiger logik funktionieren. andererseits frage ich mich, wie viele benutzer durch diesen ansatz entfremdet wurden.</p><p>wir wurden alle geschult (zumindest die guten entwickler unter uns), um progressive verbesserungen zu verwenden und sicherzustellen, dass sich die dynamischen funktionen unserer webanwendungen ordnungsgemäß verschlechtern. pisst diese fortschreitende verbesserung nur in den wind oder nutzen einige unserer kunden tatsächlich bestimmte webdienste ohne aktiviertes javascript?</p>
<p>ich verwende <a href="http://noscript.net/features">noscript</a> , aber liste jede site auf, die ich tatsächlich verwenden möchte.</p><blockquote> <p>wenn sie noscript installieren, werden javascript, java, flash silverlight und möglicherweise andere ausführbare inhalte standardmäßig <em> blockiert </em>. sie können <em> die ausführung von </em> javascript/java/... selektiv auf den websites zulassen, denen sie vertrauen. sie können einer site erlauben, skripte vorübergehend auszuführen, wenn sie nur zufällig oder dauerhaft surfen, wenn sie sie häufig besuchen und ihr wirklich vertrauen. dies bedeutet, dass noscript aus ihren eigenen browsergewohnheiten lernt und nach einer weile im hintergrund verschwindet. wenn sie jedoch auf eine schädliche webseite stoßen, wird es sofort wieder angezeigt, um ihren tag zu retten.</p> <p>wenn sie eine site mit blockierten skripten durchsuchen, wird eine benachrichtigung angezeigt, die der vom popupblocker ausgegebenen ähnelt.<br> sehen sie sich das symbol oder das statusleistensymbol an, um die aktuellen noscript-berechtigungen zu erfahren ...</p> <p><img src="https://i.stack.imgur.com/zfxkv.png" alt="http://noscript.net/noscript/ss0.png" title="noscript tooltip screen shot"></p> </blockquote>
<p>die antwort ist nicht so einfach wie sie zuerst erscheint, da sie von ihrer anwendung abhängt. in vielen fällen sind die auswirkungen negativ, da der benutzer software auf seinem computer installieren muss, was aus allen möglichen gründen viele menschen davon abhält, diese zu verwenden.</p><p>gleichzeitig kann es für heiße neue plugins oder beliebte addons eine positive auswirkung haben. flash ist so verbreitet, dass es wahrscheinlich nur geringe oder keine negativen auswirkungen hat und (wenn es gut verwendet wird) die leute mehr auf ihre website aufmerksam macht.</p><p>silverlight ist interessant. es ist nicht ungewöhnlich, dass sie es benötigen, wenn sie microsoft-websites verwenden. und sobald es heruntergeladen wurde, werden einige leute froh sein, eine site gefunden zu haben, die es verwendet.</p><p>das anfordern eines plugins ist in ordnung, wenn die meisten benutzer es bereits heruntergeladen haben. das erfordernis, dass ihre benutzer explizit ein plugin herunterladen, das sie wahrscheinlich nicht haben, ist ein echtes minus. die verwendung einer, die ihre benutzer wahrscheinlich bereits haben, kann sehr positiv sein.</p> <p>der beste weg, für ihr blog zu werben, ist nicht, das blog selbst zu bewerben, sondern die darin enthaltenen informationen. wenn sie einen artikel darüber schreiben, wie sie ein häufig auftretendes programmierproblem lösen, sollten sie nach personen suchen, bei denen dieses problem auftritt. versehen sie sie dann mit einem link zu ihrer lösung.</p><p>die leute sind an lösungen für ihre probleme interessiert, und das programmieren von blogs wird interessant, wenn der blogger weiterhin lösungen für probleme veröffentlicht, mit denen sie konfrontiert sind. ich folge css-tricks.com aus genau diesem grund. es gibt lösungen für probleme, die ich als webentwickler habe.</p><p>wenn sie probleme in foren (oder auf websites wie diesen) suchen und ihre relevanten links bereitstellen, wird ihr google-ranking ebenfalls steigen, da sie über andere websites verfügen, die zu ihren websites führen.</p><p>vorsicht jedoch! versuchen sie, ihre links nicht zu spammen. stellen sie sicher, dass sie auf relevante informationen verweisen, die für diejenigen hilfreich sind, die nach einer lösung für ein problem suchen.</p> <p>nun, sie werden all diese anderen kategorien vor den benutzern verstecken, sodass sie möglicherweise nie wissen, dass sie existieren. wenn es sich um informationsseiten handelt, kann ich das opfer verstehen, aber wenn es sich um andere produktkategorien handelt, ist es auf lange sicht vielleicht in ihrem interesse, sie anzuzeigen, selbst auf kosten einiger benutzer, die entkommen.</p><p>wenn sie zu recht davon ausgehen, dass sie bei google sehr spezifisch waren, weil sie genau wissen, was sie wollen, dann würde ich erwarten, dass sie zurückkommen und den kauf abschließen, auch nachdem sie ein wenig auf der website gestöbert haben. die tatsache, dass sie es nicht tun (ich nehme an, sie haben sich das angesehen), legt mir nahe, dass sie vielleicht doch nicht so sehr auf das produkt aus sind. in diesem fall können sie jetzt davon profitieren, ihre website weiter für sie zugänglich zu machen, oder ihr risiko mit der reduzierten navigation eingehen.</p><p>reduzierte navigation ist im checkout-prozess selbst üblich, auf seiten in der haupthierarchie jedoch viel weniger.</p><p>noch etwas zu beachten: sie beeinträchtigen die konsistenz ihrer website. eine person, die ihren freunden einen link zu einer produktseite sendet oder diese über soziale medien teilt, und eine person, die diesem link folgt, sehen nicht dieselbe navigation. selbst eine person, die den link in ihren lesezeichen oder e-mails oder was auch immer gespeichert hat, sieht nicht das gleiche menü wie beim ersten mal. sie werden es nicht unbedingt bemerken, aber es ist eine schlechte praxis.</p> <p>wenn sie updates installieren als option haben, können sie besser verfolgen, wie oft ihre server für updates neu gestartet werden. aus it-sicht ist ein neustart eines servers normalerweise keine gute sache. so sehr, dass eine der verkaufsfunktionen von linux (ich nehme auch unix an?) immer darin bestand, dass weniger neustarts erforderlich sind.</p><p>dies ist wahrscheinlich eine dieser funktionen, bei denen eine gruppe innerhalb von microsoft dies für eine gute idee hielt, eine andere gruppe sich jedoch sorgen über die möglichen auswirkungen machte, wenn jemand sagen konnte: "ich musste meinen server diesen monat viermal neu starten, und ihr protokollierungssystem zeigt es mir." dass alle von ihnen update bezogen waren. "</p> <p>die kurze antwort lautet: niemand außer ihnen kann diese frage beantworten.</p><p>die lange antwort lautet, dass sie das benchmarking ihrer spezifischen arbeitsbelastung selbst durchführen müssen, da es ein bisschen so ist, als würden sie fragen: "wie lang ist ein stück schnur?".</p><p>eine einfache einseitige statische website könnte auf einem pentium pro 150 gehostet werden und dennoch jeden tag tausende von impressionen liefern.</p><p>der grundlegende ansatz, den sie zur beantwortung dieser frage wählen müssen, besteht darin, <em> zu versuchen </em> und zu sehen, was passiert. es gibt viele werkzeuge, mit denen sie ihr system künstlich unter druck setzen können, um zu sehen, wo es knickt.</p><p>ein kurzer überblick darüber ist:</p><ul> <li>stellen sie ihr szenario auf</li> <li>überwachung hinzufügen</li> <li>fügen sie verkehr hinzu</li> <li>ergebnisse auswerten</li> <li>abhilfe basierend auf den ergebnissen</li> <li>spülen, wiederholen, bis einigermaßen glücklich</li> </ul><h2>stellen sie ihr szenario auf</h2><p>grundsätzlich benötigen sie zum testen einer last etwas, gegen das sie testen können. richten sie eine umgebung zum testen ein. dies sollte nach möglichkeit eine ziemlich genaue vermutung für ihre produktionshardware sein, da sie sonst ihre daten extrapolieren müssen.</p><p>richten sie ihre server, konten, websites, bandbreite usw. ein. auch wenn sie dies auf vms tun, ist dies in ordnung, solange sie bereit sind, ihre ergebnisse zu skalieren.</p><p>also werde ich eine virtuelle maschine mit mittlerer leistung (zwei kerne, 512 mb ram, 4 gb festplatte) einrichten und meinen bevorzugten load balancer installieren, <a href="http://haproxy.1wt.eu/"><code>haproxy</code></a> inside - <a href="http://en.wikipedia.org/wiki/red\_hat\_linux">red hat linux</a> auf der vm.</p><p>ich werde auch zwei webserver hinter dem load balancer haben, die ich zum stresstest des load balancers verwenden werde. diese beiden webserver sind identisch mit meinen live-systemen eingerichtet.</p><h2>überwachung hinzufügen</h2><p>sie müssen einige metriken überwachen, damit ich messen kann, wie viele anforderungen an meine webserver gesendet werden und wie viele anforderungen ich pro sekunde verarbeiten kann, bevor benutzer eine antwortzeit von mehr als zwei sekunden erhalten.</p><p>ich werde auch die ram-, cpu- und festplattennutzung auf der instanz <code>haproxy</code> überwachen, um sicherzustellen, dass der load balancer die verbindungen verarbeiten kann.</p><p>wie dies zu tun ist, hängt stark von ihren plattformen ab und liegt außerhalb des rahmens dieser antwort. möglicherweise müssen sie webserver-protokolldateien überprüfen, leistungsindikatoren starten oder sich auf die berichtsfunktionen ihres stresstest-tools verlassen.</p><p>ein paar dinge, die sie immer überwachen möchten:</p><ul> <li>cpu auslastung</li> <li>ram-nutzung</li> <li>festplattennutzung</li> <li>festplattenlatenz</li> <li>netzwerkauslastung</li> </ul><p>sie können sich auch sql-deadlocks, suchzeiten usw. ansehen, je nachdem, was sie speziell testen.</p><h2>fügen sie verkehr hinzu</h2><p>hier macht es spaß. jetzt müssen sie eine testlast simulieren. es gibt <a href="https://stackoverflow.com/questions/1754427/jmeter-alternative">viele tools</a> , die dies mit konfigurierbaren optionen tun können:</p><ul> <li> <a href="https://jmeter.apache.org/">jmeter</a> (web, ldap)</li> <li> <a href="http://httpd.apache.org/docs/2.4/programs/ab.html">apache benchmark</a> (web)</li> <li> <a href="http://grinder.sourceforge.net/">grinder</a> (web)</li> <li> <a href="http://code.google.com/p/httperf/">httperf</a> (web)</li> <li> <a href="http://www.iis.net/community/default.aspx?tabid=34&amp;i=1466&amp;g=6"> wcat </a> (web)</li> <li>visual studio-auslastungstest (web)</li> <li> <a href="https://www.microsoft.com/download/en/details.aspx?id=20163"> sqlio </a> (sql server)</li> </ul><p>wählen sie eine nummer, eine beliebige nummer. angenommen, sie werden sehen, wie das system mit 10.000 treffern pro minute reagiert. es spielt keine rolle, welche nummer sie wählen, da sie diesen schritt viele male wiederholen und diese nummer nach oben oder unten anpassen, um zu sehen, wie das system reagiert.</p><p>idealerweise sollten sie diese 10.000 anforderungen auf mehrere lasttest-clients/-knoten verteilen, damit ein einzelner client nicht zu einem engpass bei anforderungen wird. zum beispiel bietet jmeters <a href="http://jmeter.apache.org/usermanual/remote-test.html">remote testing</a> eine zentrale schnittstelle, über die mehrere clients von einer steuernden jmeter-maschine aus gestartet werden können.</p><p>drücken sie die magische <em> go </em> taste und beobachten sie, wie ihre webserver zusammenbrechen und abstürzen.</p><h2>ergebnisse auswerten</h2><p>nun müssen sie zu ihren metriken zurückkehren, die sie in schritt 2 gesammelt haben. sie sehen, dass bei 10.000 gleichzeitigen verbindungen ihre <code>haproxy</code>-box kaum ins schwitzen kommt, aber die antwortzeit mit zwei webservern ist eine berührung über fünf sekunden. das ist nicht cool - denken sie daran, ihre reaktionszeit beträgt zwei sekunden. wir müssen also einige änderungen vornehmen.</p><h2>abhilfe schaffen</h2><p>jetzt müssen sie ihre website um mehr als das doppelte beschleunigen. sie wissen also, dass sie entweder skalieren oder verkleinern müssen.</p><p>holen sie sich zum skalieren größere webserver, mehr ram und schnellere festplatten.</p><p>holen sie sich zum skalieren mehr server.</p><p>verwenden sie ihre metriken aus schritt 2 und testen sie, um diese entscheidung zu treffen. wenn sie beispielsweise festgestellt haben, dass die festplattenlatenz während des tests sehr hoch war, müssen sie skalieren und schnellere festplatten erhalten.</p><p>wenn sie festgestellt haben, dass der prozessor während des tests zu 100% ausgelastet war, müssen sie möglicherweise skalieren, um zusätzliche webserver hinzuzufügen, um den druck auf die vorhandenen server zu verringern.</p><p>es gibt keine generische richtige oder falsche antwort, es gibt nur das, was für sie richtig ist. versuchen sie es mit einer skalierung. wenn dies nicht funktioniert, skalieren sie stattdessen. oder auch nicht, es liegt an ihnen und einigen, die über den tellerrand hinaus denken.</p><p>nehmen wir an, wir werden skalieren. also entscheide ich mich, meine zwei webserver (sie sind vms) zu klonen und jetzt habe ich vier webserver.</p><h2>spülen, wiederholen</h2><p>beginnen sie erneut mit schritt 3. wenn sie feststellen, dass die dinge nicht wie erwartet verlaufen (z. b. haben wir die webserver verdoppelt, die antwortzeiten betragen jedoch immer noch mehr als zwei sekunden), prüfen sie andere engpässe. zum beispiel haben sie die webserver verdoppelt, haben aber immer noch einen beschissenen datenbankserver. oder sie haben mehr vms geklont, aber da sie sich auf demselben physischen host befinden, haben sie nur eine höhere konkurrenz für die serverressourcen erzielt.</p><p>mit diesem verfahren können sie dann andere teile des systems testen. versuchen sie, anstatt den load balancer zu treffen, den webserver direkt zu treffen, <a href="https://serverfault.com/q/350458/7709">oder den sql server mit einem sql-benchmarking-tool</a> .</p> <p>verwenden sie (oder wer auch immer die suche durchgeführt hat) einen werbeblocker? sie blockieren oft tracking-skripte wie ga.</p><p>stellen sie außerdem sicher, dass nichts dummes vorkommt, wie der code, der sich nicht auf der seite befindet, auf der sie sich befinden, oder sie haben ga angewiesen, ihre ip-adresse zu ignorieren, oder sie haben js deaktiviert. stellen sie sicher, dass sie den richtigen datumsbereich und jeden suchbegriff in der liste überprüfen.</p><p>versuchen sie möglicherweise, diesen benutzerdefinierten code vorübergehend zu entfernen, um sicherzustellen, dass das problem nicht durch ihn verursacht wird.</p><p>ich weiß nicht, ob ga tatsächlich jeden suchbegriff protokolliert. beispielsweise werden möglicherweise keine langen genauen abfragen (in anführungszeichen) und möglicherweise keine abfragen wie <code>site:</code> protokolliert.</p> <p>der von drupal 7) verwendete javascript-code lautet wie folgt:</p><pre><code>drupal.attachbehaviors = function (context, settings) { context = context || document; settings = settings || drupal.settings; // execute all of them. $.each(drupal.behaviors, function () { if ($.isfunction(this.attach)) { this.attach(context, settings); } }); }; </code></pre><p>drupal 6 verwendet einen ähnlichen code:</p><pre><code>drupal.attachbehaviors = function(context) { context = context || document; if (drupal.jsenabled) { // execute all of them. jquery.each(drupal.behaviors, function() { this(context); }); } }; </code></pre><p>wenn javascript garantieren würde, dass objekt-/array-eigenschaften immer in derselben reihenfolge durchlaufen werden, in der sie hinzugefügt werden, werden die werte von <code>jquery.each()</code> an die funktion übergeben, die als zweiter parameter in derselben reihenfolge verwendet wird, in der sie eingefügt werden das array wurde als erster parameter übergeben.<br> dies würde bedeuten, dass das erste in <code>drupal.behaviors</code> eingefügte verhalten zuerst ausgeführt wird.<br> in diesem fall können sie ein geringeres gewicht verwenden, damit die von ihrem modul definierten verhaltensweisen zuerst ausgeführt werden können. wenn sie möchten, dass sie vor den anderen ausgeführt werden, sollte das modulgewicht auf -50 eingestellt werden. andere werte können auch funktionieren. wenn sie drupal 7, <a href="https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal\_add\_js/7.x">drupal\_add\_js ()</a> verwenden, können sie dem javascript-code eine gewichtung zuordnen. javascript-code mit einer geringeren gewichtung wird zuerst in der html-ausgabe angezeigt ist nicht möglich mit drupal 6, dachte.</p><p>javascript garantiert nicht, dass eigenschaften in derselben reihenfolge durchlaufen werden, in der sie hinzugefügt wurden. dies bedeutet, dass verschiedene javascript-implementierungen dieselben eigenschaften in einer anderen reihenfolge aufweisen. dies bedeutet auch, dass sich dieselbe reihenfolge in verschiedenen versionen desselben browsers ändern kann.</p> <p>vermutlich meinst du die folgenden vier:</p><ol> <li><code>mozilla/5.0 (x11; linux x86\_64)</code></li> <li><code>applewebkit/537.36 (khtml, like gecko)</code></li> <li><code>chrome/51.0.2704.63</code></li> <li><code>safari/537.36</code></li> </ol><p>die meisten webbrowser verwenden einen user-agent-zeichenfolgenwert wie folgt:</p><pre><code>mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]. </code></pre><ul> <li> <p><code>mozilla</code> ist ein <a href="https://stackoverflow.com/questions/1114254/why-do-all-browsers-user-agents-start-with-mozilla">nebenprodukt von browserkriegen</a> .</p> </li> <li> <p><code>applewebkit/537.36</code> ist die von ihrem browser verwendete plattform.</p> </li> <li> <p><code>chrome/51.0.2704.63</code> ist dein browser</p> </li> <li> <p><code>safari/537.36</code> wurde aus historischen gründen hinzugefügt, wo safari anders behandelt wurde.</p> </li> </ul><p>vielleicht möchten sie auch <a href="https://www.nczonline.net/blog/2010/01/12/history-of-the-user-agent-string/">diesen verlauf</a> oder <a href="https://stackoverflow.com/questions/4024230/strange-user-agent-with-google-chrome">diesen so beitrag</a> lesen</p> ja gibt es, beschäfftige dich mal mit dem thema "linkbuilding" und "seo". natürlich kannst du auch deine webseite via besuchertauschssysteme bewerben, wo du locker die 1.000 besucher pro tag erreichen kannst, aber da sollte man sich die frage stellen was bringt es einem? sieht zwar im counter und in der statistik schön aus, aber das war es auch schon. 1 freiwilliger besucher ist mir persönlich mehrwert als 10.000 besucher die über forcierte traffic-kampagnen auf die webseite gekommen sind. <p>sie versuchen, ein problem zu lösen, das sie gar nicht erst haben sollten: <strong>kennwortwiederverwendung</strong></p><p>das konzept ist einfach. sie denken an ein "gutes" passwort und verwenden dieses für alles. ihr bankkonto, online-shopping, ihr e-mail-anbieter usw.</p><p>das problem ist, wenn alle von ihnen durchgesickert sind, sind alle anderen konten möglicherweise in gefahr. <strong>dies ist ein völlig unnötiges risiko!</strong></p><h1>was ist mit meinem vorgeschlagenen schema?</h1><p>sie selbst sagten, erfinden sie das rad nicht neu. wenn sie das tatsächlich tun würden, müssten sie entweder eine anwendung schreiben, die die hashes für sie berechnet, oder sie selbst berechnen und speichern.</p><p>es gibt bereits anwendungen, die das problem der speicherung von anmeldeinformationen lösen, und sie machen es viel besser: offline-passwort-manager</p><h1>warum sind offline-passwort-manager besser?</h1><p>weil sie wirklich zufällige und eindeutige passwörter generieren. es besteht keine notwendigkeit, kryptographie in diese zu bringen. ich muss mein passwort für mein e-mail-konto nicht daran binden, dass es die zeichenfolge "gmail.com" enthält.</p><p>weil <code>sn2\zj2cw92dqx^{$omqac\_p'xr|md)[</code> ist definitiv ein besseres passwort als die md5-summe von <code>hunter2+gmail.com</code> (es ist <code>01f9a94a0febf268495d08f5960e7f05</code>, falls du dich gewundert hast).</p>