{"id":6099,"date":"2022-01-21T12:56:55","date_gmt":"2022-01-21T11:56:55","guid":{"rendered":"https:\/\/medtech-ingenieur.de\/?p=6099"},"modified":"2022-01-21T12:56:55","modified_gmt":"2022-01-21T11:56:55","slug":"performanceoptimierung-fuer-2d-anwendungen","status":"publish","type":"post","link":"https:\/\/medtech-ingenieur.de\/en\/performanceoptimierung-fuer-2d-anwendungen\/","title":{"rendered":"Performance optimization for 2D applications"},"content":{"rendered":"<p>User interfaces have special requirements. They must respond with lightning speed and often render 60 frames per second, sometimes with millions of pixels, to convey a high-quality impression. This puts embedded systems to the test. This article is based on the optimization of a 2D application under Linux that used the SDL graphics library. However, the concepts are also transferable to other systems or graphics libraries.<\/p>\n<h1>Where is the problem? \u2013 Profiling tools<\/h1>\n<p>To avoid wasting unnecessary effort in the wrong places, you should first find out what the CPU spends most of its time on. This is often where you can save the most time. Profiling tools are very useful for finding problem areas.<\/p>\n<p>Callgrind is one of them and is part of the powerful analysis tool Valgrind. Unfortunately, Callgrind takes a long time to collect data and can slow down applications that are already too slow to the point where they are no longer usable or testable.<br \/>\nThe gprof tool is significantly faster, but it also has its drawbacks. The profiler doesn&#039;t take into account the time spent on syscalls (e.g., sleep, read, write, blocking waits for messages), and these operations can take a relatively long time.<br \/>\nCallgrind and gprof are both compatible with the program <a href=\"https:\/\/github.com\/jrfonseca\/gprof2dot\">gprof2dot<\/a>\u00a0It is compatible with the IDE, which can be used to generate clearer representations of dependencies and computation times. This tool is highly recommended for a quick overview.<br \/>\nSyscalls can be a huge waste of time. To find these, strace is a great tool, especially with the options <span class=\"consoleOutput\">-r -T<\/span> and to filter the syscall types e.g. <span class=\"consoleOutput\">-\u200b-trace=read,write<\/span>.<br \/>\nPrograms like htop can help, at least roughly identifying which thread might be causing the problem. Commands like sleep, of course, don&#039;t cause too much load, but they do cause significant time loss. Alternatively, you can manually measure the time of specific function calls and have them displayed, or you can comment out suspicious function calls. This isn&#039;t as elegant, but it also achieves the goal quite well.<\/p>\n<h1>What usually fits is not always good \u2013 drawing algorithms<\/h1>\n<p>Graphics libraries should be usable for a wide variety of applications and are therefore difficult to optimize for specific use cases. Depending on what you want to draw, however, you can also use significantly more optimized drawing algorithms. Here, a balance must be struck between performance, effort, and code comprehensibility.<\/p>\n<p>For example, lines between any two points are usually drawn using the <a href=\"https:\/\/de.wikipedia.org\/wiki\/Bresenham-Algorithmus\">Bresenham algorithm<\/a> drawn. However, if the points share an x or y coordinate (i.e. are parallel to the axis), then it is obvious which pixels need to be colored even without a complex algorithm. This can therefore be replaced by a simple loop over the pixels. The SDL graphics library already provides functions for this, as long as the lines are only one pixel wide. For wider lines, however, the Murphy algorithm (a modification of the Bresenham algorithm for thick lines) is used, regardless of the line&#039;s orientation. A lot of computing time can be saved here by replacing thick horizontal and vertical lines with simple loops over the pixels or with rectangles. In many applications, the majority of the lines are parallel to the axes, which makes this optimization applicable.<\/p>\n<p>Time can also be saved by implementing the <a href=\"https:\/\/de.wikipedia.org\/wiki\/Rasterung_von_Polygonen#Kantenlisten-Algorithmen\">Edge list algorithm&#039;<\/a> save, which SDL and other libraries use to draw filled polygons. How this works, <a href=\"https:\/\/www.tutorialspoint.com\/computer_graphics\/polygon_filling_algorithm.htm\">shows the page<\/a> under the heading \u201cScan Line Algorithm.\u201d For a polygon of pixel height <span class=\"consoleOutput\">h<\/span> with <span class=\"consoleOutput\">n<\/span> Corners and edges are <span class=\"consoleOutput\">h*n<\/span> Potential intersection points are calculated, which can quickly become computationally intensive. A horizontal line is always drawn between pairs of intersection points (for which the Bresenham algorithm should definitely not be used).<\/p>\n<p>Polygons such as rounded buttons also use the edge list algorithm in SDL, but for a large range of such buttons, the calculated intersection points are always on the same left and right edges. This can be exploited: Once intersection points have been found on two parallel edges, for many polygons you can draw not just the line between the intersection points, but an entire rectangle extending to the end of one of the edges. For this to work, the polygon must be able to have at most two horizontal intersection points with the polygon. This applies, among other things, to all convex polygons.<\/p>\n<figure id=\"attachment_6102\" aria-describedby=\"caption-attachment-6102\" style=\"width: 300px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-6102\" src=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2021\/09\/polygons-300x136.png\" alt=\"\" width=\"300\" height=\"136\" srcset=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2021\/09\/polygons-300x136.png 300w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2021\/09\/polygons-100x45.png 100w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2021\/09\/polygons-150x68.png 150w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2021\/09\/polygons-200x91.png 200w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2021\/09\/polygons-450x204.png 450w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2021\/09\/polygons.png 554w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-6102\" class=\"wp-caption-text\">Drawing polygons. Using the normal (left) and optimized (right) algorithms. The already drawn area is dark blue, while the area drawn in one step using the optimized algorithm is light blue.<\/figcaption><\/figure>\n<h1>Putting the picture together<\/h1>\n<p>If you use multiple drawing layers, you have to correctly combine them for each image before updating the displayed image. It is useful to remember which areas have changed since the last image, if the graphics library you are using does not already do this. Especially with user interfaces where not too much changes, you can save a lot of processing power by copying together only the changed areas of the layers and then only updating the area of the displayed image. A simple starting point is to define a rectangle that is always expanded after each drawing operation so that it encloses the area of all previous operations since the last image. Advanced methods can be found under the keyword &quot;dirty rectangles&quot;.<\/p>\n<p>Under certain circumstances, you can also reduce the number of layers, blitting (copying the image data, <strong>bl<\/strong>ock <strong>i<\/strong>mage <strong>t<\/strong>transfer) is relatively complex if it is not hardware accelerated.<\/p>\n<p>Often, however, it is unavoidable to have multiple layers. This may raise the question of whether you should draw on a lower layer if the content is currently hidden by a higher layer anyway. You could also draw only when the lower layer is no longer hidden, thus saving yourself the time spent drawing beforehand. Whether this is worthwhile depends on what is being drawn. It could be problematic if you have to redraw a lot in one frame. Instead of optimizing the average time per frame, it is usually more sensible to use the maximum time per frame. In this case, you should continue to draw on a hidden layer.<\/p>\n<h1>Check settings<\/h1>\n<p>Hardware acceleration can save the CPU a lot of work. It&#039;s worth taking a look at the available hardware operations, but it&#039;s also possible that crucial functionality isn&#039;t hardware-accelerated.<\/p>\n<p>The pixel formats of different layers can vary. This means that the pixel data must first be converted to the correct format when composing the entire image, which takes additional time. Therefore, it usually makes sense to keep the formats consistent.<\/p>\n<p>The choice of graphics library also makes a huge difference. If performance issues are foreseeable, you should at least try out a few libraries before proceeding.<\/p>\n<p>Do you have any other profiling or optimization tips? Let us know in the comments!<\/p>","protected":false},"excerpt":{"rendered":"<p>F\u00fcr Benutzeroberfl\u00e4chen gibt es besondere Anspr\u00fcche. Sie m\u00fcssen blitzschnell reagieren und oft 60 Bilder pro Sekunde mit teilweise Millionen von Pixeln berechnen, um einen hochwertigen Eindruck zu vermitteln. Dies stellt besonders Embedded Systeme auf die Probe. Dieser Artikel basiert auf der Optimierung einer 2D-Anwendung unter Linux, die die Grafikbibliothek SDL verwendet hat. Die Konzepte sind [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":6439,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8],"tags":[588,589,590,38],"class_list":["post-6099","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","category-tools","tag-grafik","tag-performance","tag-profiling","tag-software","post-wrapper","thrv_wrapper"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Performanceoptimierung f\u00fcr 2D-Anwendungen - MEDtech Ingenieur GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/medtech-ingenieur.de\/en\/performanceoptimierung-fuer-2d-anwendungen\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Performanceoptimierung f\u00fcr 2D-Anwendungen - MEDtech Ingenieur GmbH\" \/>\n<meta property=\"og:description\" content=\"F\u00fcr Benutzeroberfl\u00e4chen gibt es besondere Anspr\u00fcche. Sie m\u00fcssen blitzschnell reagieren und oft 60 Bilder pro Sekunde mit teilweise Millionen von Pixeln berechnen, um einen hochwertigen Eindruck zu vermitteln. Dies stellt besonders Embedded Systeme auf die Probe. Dieser Artikel basiert auf der Optimierung einer 2D-Anwendung unter Linux, die die Grafikbibliothek SDL verwendet hat. Die Konzepte sind [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/medtech-ingenieur.de\/en\/performanceoptimierung-fuer-2d-anwendungen\/\" \/>\n<meta property=\"og:site_name\" content=\"MEDtech Ingenieur GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/medtechIngenieur\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-21T11:56:55+00:00\" \/>\n<meta name=\"author\" content=\"Falke Stephan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@MedtechIng\" \/>\n<meta name=\"twitter:site\" content=\"@MedtechIng\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Falke Stephan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/\"},\"author\":{\"name\":\"Falke Stephan\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/person\\\/7662ccc10a058bcb56a7887d14c97726\"},\"headline\":\"Performanceoptimierung f\u00fcr 2D-Anwendungen\",\"datePublished\":\"2022-01-21T11:56:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/\"},\"wordCount\":1143,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/Anonymous-Time-icon.svg\",\"keywords\":[\"Grafik\",\"Performance\",\"Profiling\",\"Software\"],\"articleSection\":[\"Software\",\"Tools\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/\",\"name\":\"Performanceoptimierung f\u00fcr 2D-Anwendungen - MEDtech Ingenieur GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/Anonymous-Time-icon.svg\",\"datePublished\":\"2022-01-21T11:56:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/#primaryimage\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/Anonymous-Time-icon.svg\",\"contentUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/Anonymous-Time-icon.svg\",\"width\":187,\"height\":187},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/performanceoptimierung-fuer-2d-anwendungen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/medtech-ingenieur.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Performanceoptimierung f\u00fcr 2D-Anwendungen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#website\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/\",\"name\":\"MEDtech Ingenieur GmbH\",\"description\":\"Ingenieursdienstleister f\u00fcr Medizintechnik\",\"publisher\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#organization\"},\"alternateName\":\"MEDtech\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/medtech-ingenieur.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#organization\",\"name\":\"MEDtech Ingenieur\",\"alternateName\":\"MEDtech\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo-700x700-1.png\",\"contentUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo-700x700-1.png\",\"width\":700,\"height\":700,\"caption\":\"MEDtech Ingenieur\"},\"image\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/medtechIngenieur\",\"https:\\\/\\\/x.com\\\/MedtechIng\",\"https:\\\/\\\/www.instagram.com\\\/medtech.ingenieure\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/37871229\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/person\\\/7662ccc10a058bcb56a7887d14c97726\",\"name\":\"Falke Stephan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7393cdd5f8d6bcfd16c02dd5e7a7691516f8901753a4ac05907e45934ccf4167?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7393cdd5f8d6bcfd16c02dd5e7a7691516f8901753a4ac05907e45934ccf4167?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7393cdd5f8d6bcfd16c02dd5e7a7691516f8901753a4ac05907e45934ccf4167?s=96&d=mm&r=g\",\"caption\":\"Falke Stephan\"},\"description\":\"Falke Stephan arbeitet seit 2020 als Softwareentwickler bei MEDtech Ingenieur. Seine Aufgabengebiete umfassen unter anderem die Entwicklung von Medizinger\u00e4ten basierend auf Embedded Linux.\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/en\\\/author\\\/fstephan\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Performanceoptimierung f\u00fcr 2D-Anwendungen - MEDtech Ingenieur GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/medtech-ingenieur.de\/en\/performanceoptimierung-fuer-2d-anwendungen\/","og_locale":"en_US","og_type":"article","og_title":"Performanceoptimierung f\u00fcr 2D-Anwendungen - MEDtech Ingenieur GmbH","og_description":"F\u00fcr Benutzeroberfl\u00e4chen gibt es besondere Anspr\u00fcche. Sie m\u00fcssen blitzschnell reagieren und oft 60 Bilder pro Sekunde mit teilweise Millionen von Pixeln berechnen, um einen hochwertigen Eindruck zu vermitteln. Dies stellt besonders Embedded Systeme auf die Probe. Dieser Artikel basiert auf der Optimierung einer 2D-Anwendung unter Linux, die die Grafikbibliothek SDL verwendet hat. Die Konzepte sind [&hellip;]","og_url":"https:\/\/medtech-ingenieur.de\/en\/performanceoptimierung-fuer-2d-anwendungen\/","og_site_name":"MEDtech Ingenieur GmbH","article_publisher":"https:\/\/www.facebook.com\/medtechIngenieur","article_published_time":"2022-01-21T11:56:55+00:00","author":"Falke Stephan","twitter_card":"summary_large_image","twitter_creator":"@MedtechIng","twitter_site":"@MedtechIng","twitter_misc":{"Written by":"Falke Stephan","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/#article","isPartOf":{"@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/"},"author":{"name":"Falke Stephan","@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/person\/7662ccc10a058bcb56a7887d14c97726"},"headline":"Performanceoptimierung f\u00fcr 2D-Anwendungen","datePublished":"2022-01-21T11:56:55+00:00","mainEntityOfPage":{"@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/"},"wordCount":1143,"commentCount":0,"publisher":{"@id":"https:\/\/medtech-ingenieur.de\/#organization"},"image":{"@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/#primaryimage"},"thumbnailUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2022\/01\/Anonymous-Time-icon.svg","keywords":["Grafik","Performance","Profiling","Software"],"articleSection":["Software","Tools"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/","url":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/","name":"Performanceoptimierung f\u00fcr 2D-Anwendungen - MEDtech Ingenieur GmbH","isPartOf":{"@id":"https:\/\/medtech-ingenieur.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/#primaryimage"},"image":{"@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/#primaryimage"},"thumbnailUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2022\/01\/Anonymous-Time-icon.svg","datePublished":"2022-01-21T11:56:55+00:00","breadcrumb":{"@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/#primaryimage","url":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2022\/01\/Anonymous-Time-icon.svg","contentUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2022\/01\/Anonymous-Time-icon.svg","width":187,"height":187},{"@type":"BreadcrumbList","@id":"https:\/\/medtech-ingenieur.de\/performanceoptimierung-fuer-2d-anwendungen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/medtech-ingenieur.de\/"},{"@type":"ListItem","position":2,"name":"Performanceoptimierung f\u00fcr 2D-Anwendungen"}]},{"@type":"WebSite","@id":"https:\/\/medtech-ingenieur.de\/#website","url":"https:\/\/medtech-ingenieur.de\/","name":"MEDtech Ingenieur GmbH","description":"Engineering service provider for medical technology","publisher":{"@id":"https:\/\/medtech-ingenieur.de\/#organization"},"alternateName":"MEDtech","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/medtech-ingenieur.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/medtech-ingenieur.de\/#organization","name":"MEDtech Engineer","alternateName":"MEDtech","url":"https:\/\/medtech-ingenieur.de\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/logo\/image\/","url":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2024\/01\/logo-700x700-1.png","contentUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2024\/01\/logo-700x700-1.png","width":700,"height":700,"caption":"MEDtech Ingenieur"},"image":{"@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/medtechIngenieur","https:\/\/x.com\/MedtechIng","https:\/\/www.instagram.com\/medtech.ingenieure\/","https:\/\/www.linkedin.com\/company\/37871229\/"]},{"@type":"Person","@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/person\/7662ccc10a058bcb56a7887d14c97726","name":"Falke Stephan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7393cdd5f8d6bcfd16c02dd5e7a7691516f8901753a4ac05907e45934ccf4167?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7393cdd5f8d6bcfd16c02dd5e7a7691516f8901753a4ac05907e45934ccf4167?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7393cdd5f8d6bcfd16c02dd5e7a7691516f8901753a4ac05907e45934ccf4167?s=96&d=mm&r=g","caption":"Falke Stephan"},"description":"Falke Stephan has been working as a software developer at MEDtech Ingenieur since 2020. His responsibilities include the development of medical devices based on embedded Linux.","url":"https:\/\/medtech-ingenieur.de\/en\/author\/fstephan\/"}]}},"_links":{"self":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts\/6099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/comments?post=6099"}],"version-history":[{"count":44,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts\/6099\/revisions"}],"predecessor-version":[{"id":6454,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts\/6099\/revisions\/6454"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/media\/6439"}],"wp:attachment":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/media?parent=6099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/categories?post=6099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/tags?post=6099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}