JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla takaisinkutsumenetelmän yleisyys ja ongelmat

JavaScript on hyvin paljon käytetty ohjelmointikieli ja verkkosivuilla vallitsevassa asemassa. JavaScript-kieliset ohjelmat sisältävät kuitenkin paljon virheitä. Verkkokeskusteluissa ”takaisinkutsuhelvetti”, eli tilanne jossa ohjelmakoodi on monien sisäkkäisten takaisinkutsullisten funktioiden vuoks...

Täydet tiedot

Bibliografiset tiedot
Päätekijä: Tarvainen, Riia
Muut tekijät: Informaatioteknologian tiedekunta, Faculty of Information Technology, Tietojenkäsittelytieteiden laitos, Department of Computer Science and Information Systems, University of Jyväskylä, Jyväskylän yliopisto
Aineistotyyppi: Pro gradu
Kieli:fin
Julkaistu: 2016
Aiheet:
Linkit: https://jyx.jyu.fi/handle/123456789/51631
_version_ 1828193107572686848
author Tarvainen, Riia
author2 Informaatioteknologian tiedekunta Faculty of Information Technology Tietojenkäsittelytieteiden laitos Department of Computer Science and Information Systems University of Jyväskylä Jyväskylän yliopisto
author_facet Tarvainen, Riia Informaatioteknologian tiedekunta Faculty of Information Technology Tietojenkäsittelytieteiden laitos Department of Computer Science and Information Systems University of Jyväskylä Jyväskylän yliopisto Tarvainen, Riia Informaatioteknologian tiedekunta Faculty of Information Technology Tietojenkäsittelytieteiden laitos Department of Computer Science and Information Systems University of Jyväskylä Jyväskylän yliopisto
author_sort Tarvainen, Riia
datasource_str_mv jyx
description JavaScript on hyvin paljon käytetty ohjelmointikieli ja verkkosivuilla vallitsevassa asemassa. JavaScript-kieliset ohjelmat sisältävät kuitenkin paljon virheitä. Verkkokeskusteluissa ”takaisinkutsuhelvetti”, eli tilanne jossa ohjelmakoodi on monien sisäkkäisten takaisinkutsullisten funktioiden vuoksi hyvin vaikesti ymmärrettävä ja hallittava, nostetaan yhdeksi kielen kipupisteistä. Tässä tutkimuksessa tutkittiin kirjallisuudesta JavaScriptin takaisinkutsumenetelmään liitettyjä ongelmia sekä sitä korvaavia asynkronisen toiminnan menetelmiä. Empiirisessä tutkimuksessa kartoitettiin suomalaisten verkkosivujen JavaScript-ohjelmakoodia. Ohjelmakoodin määriä, sijaintia ja ominaisuuksia mitattiin. Erityisesti tutkittiin takaisinkutsumenetelmän hyödyntämistä ja siihen liittyvien sisäkkäisyyksien syvyyksiä. Tutkimusta varten kehitettiin mittausohjelmisto, jonka avulla tutkimus suoritettiin. Tiedostot haettiin sivustoittain, tiedot mitattiin ja havainnot kirjattiin havaintomatriisiin. Tutkimukseen valittiin suomalaisia verkkopalvelun sisältäviä verkkosivustoja jaoteltuina tarkoituksen mukaan viiteen ryhmään ja tutkittuja sivustoja oli yhteensä 134. Tutkimus osoitti, että suomalaisten verkkosivujen sisältämän JavaScript-ohjelmakoodin ominaisuudet vaihtelevat sivuston tarkoituksen mukaan. Tutkimuksessa havaittiin myös, että sivustoilla hyödynnetään erittäin paljon sekä yleensä HTML-tiedostoihin sisällytettyä JavaScriptiä että asynkronisen toiminnan menetelmää, jossa HTML-elementtien attribuuteiksi asetetaan JavaScriptiä. Tutkimusaineistosta oli löydettävissä monitasoisia sisäkkäisyyksiä ja takaisinkutsumenetelmän hyödyntäminen muutenkin oli yleistä. Sen sijaan tutkitut takaisinkutsuja korvaavat asynkronisen toiminnan menetelmät olivat aineistossa vähäisiä. Tästä huolimatta tutkimuksessa havaittiin sivustoryhmittäin tarkasteltuna viitteitä riippuvuudesta lupausabstraktion löytymisen ja vähäisemmän sisäkkäisyyden välillä. Tuloksia vertailtiin julkaistuun tutkimukseen, jossa joitakin samoja asioita oli tutkittu avoimen lähdekoodin projekteista. Julkaistun tutkimuksen tulosten havaittiin olevan osin kyseenalaisia ja jopa virheellisiä. Vertailukelpoisten tietojen osalta tulokset olivat varsin yhteneviä. JavaScript is a very widely used programming language. It is used in almost all websites and all modern web browsers support it. However, applications developed with JavaScript contain a lot of errors. Callback functions have been generally considered to cause errors. Callback hell is a situation where there are deeply nested, usually anonymous and asynchronously called, callback functions. This makes the program code hard to understand and to maintain. In this study we performed a literature review of problems related to JavaScript callback mechanisms and also some surrogate asynchronous methods. An empirical study was performed to analyze JavaScript code used in Finnish websites. Code characteristics, usage of callback mechanism and depth of nested functions were measured. A measurement tool was created to collect measurements from selected web sites. For each site all necessary files were first downloaded, then analyzed, and the results were saved to a data matrix. The total number of analyzed web sites was 134 in five different categories. Our research indicates that the style of JavaScript code varies between the categories. We also found that many web sites embed JavaScript directly in HTML and also within HTML attributes. Frequent usage of callback functions was found from the collected data set as well as deep nesting of these functions. Only few surrogate methods were used. Despite this, we found indication of correlation between use of the promise abstraction and shallower levels of nesting. Results were also compared with a published research where same things were analyzed from Open Source -projects. We found that some of their results were questionable or even incorrect. For comparable parts the results were similar.
first_indexed 2023-03-22T09:58:25Z
format Pro gradu
free_online_boolean 1
fullrecord [{"key": "dc.contributor.advisor", "value": "Sakkinen, Markku", "language": "", "element": "contributor", "qualifier": "advisor", "schema": "dc"}, {"key": "dc.contributor.author", "value": "Tarvainen, Riia", "language": null, "element": "contributor", "qualifier": "author", "schema": "dc"}, {"key": "dc.date.accessioned", "value": "2016-10-14T13:41:26Z", "language": "", "element": "date", "qualifier": "accessioned", "schema": "dc"}, {"key": "dc.date.available", "value": "2016-10-14T13:41:26Z", "language": "", "element": "date", "qualifier": "available", "schema": "dc"}, {"key": "dc.date.issued", "value": "2016", "language": null, "element": "date", "qualifier": "issued", "schema": "dc"}, {"key": "dc.identifier.other", "value": "oai:jykdok.linneanet.fi:1575533", "language": null, "element": "identifier", "qualifier": "other", "schema": "dc"}, {"key": "dc.identifier.uri", "value": "https://jyx.jyu.fi/handle/123456789/51631", "language": "", "element": "identifier", "qualifier": "uri", "schema": "dc"}, {"key": "dc.description.abstract", "value": "JavaScript on hyvin paljon k\u00e4ytetty ohjelmointikieli ja verkkosivuilla vallitsevassa asemassa. JavaScript-kieliset ohjelmat sis\u00e4lt\u00e4v\u00e4t kuitenkin paljon virheit\u00e4. Verkkokeskusteluissa \u201dtakaisinkutsuhelvetti\u201d, eli tilanne jossa ohjelmakoodi on monien sis\u00e4kk\u00e4isten takaisinkutsullisten funktioiden vuoksi hyvin vaikesti ymm\u00e4rrett\u00e4v\u00e4 ja hallittava, nostetaan yhdeksi kielen kipupisteist\u00e4. T\u00e4ss\u00e4 tutkimuksessa tutkittiin kirjallisuudesta JavaScriptin takaisinkutsumenetelm\u00e4\u00e4n liitettyj\u00e4 ongelmia sek\u00e4 sit\u00e4 korvaavia asynkronisen toiminnan menetelmi\u00e4. Empiirisess\u00e4 tutkimuksessa kartoitettiin suomalaisten verkkosivujen JavaScript-ohjelmakoodia. Ohjelmakoodin m\u00e4\u00e4ri\u00e4, sijaintia ja ominaisuuksia mitattiin. Erityisesti tutkittiin takaisinkutsumenetelm\u00e4n hy\u00f6dynt\u00e4mist\u00e4 ja siihen liittyvien sis\u00e4kk\u00e4isyyksien syvyyksi\u00e4. Tutkimusta varten kehitettiin mittausohjelmisto, jonka avulla tutkimus suoritettiin. Tiedostot haettiin sivustoittain, tiedot mitattiin ja havainnot kirjattiin havaintomatriisiin. Tutkimukseen valittiin suomalaisia verkkopalvelun sis\u00e4lt\u00e4vi\u00e4 verkkosivustoja jaoteltuina tarkoituksen mukaan viiteen ryhm\u00e4\u00e4n ja tutkittuja sivustoja oli yhteens\u00e4 134. Tutkimus osoitti, ett\u00e4 suomalaisten verkkosivujen sis\u00e4lt\u00e4m\u00e4n JavaScript-ohjelmakoodin ominaisuudet vaihtelevat sivuston tarkoituksen mukaan. Tutkimuksessa havaittiin my\u00f6s, ett\u00e4 sivustoilla hy\u00f6dynnet\u00e4\u00e4n eritt\u00e4in paljon sek\u00e4 yleens\u00e4 HTML-tiedostoihin sis\u00e4llytetty\u00e4 JavaScripti\u00e4 ett\u00e4 asynkronisen toiminnan menetelm\u00e4\u00e4, jossa HTML-elementtien attribuuteiksi asetetaan JavaScripti\u00e4. Tutkimusaineistosta oli l\u00f6ydett\u00e4viss\u00e4 monitasoisia sis\u00e4kk\u00e4isyyksi\u00e4 ja takaisinkutsumenetelm\u00e4n hy\u00f6dynt\u00e4minen muutenkin oli yleist\u00e4. Sen sijaan tutkitut takaisinkutsuja korvaavat asynkronisen toiminnan menetelm\u00e4t olivat aineistossa v\u00e4h\u00e4isi\u00e4. T\u00e4st\u00e4 huolimatta tutkimuksessa havaittiin sivustoryhmitt\u00e4in tarkasteltuna viitteit\u00e4 riippuvuudesta lupausabstraktion l\u00f6ytymisen ja v\u00e4h\u00e4isemm\u00e4n sis\u00e4kk\u00e4isyyden v\u00e4lill\u00e4. Tuloksia vertailtiin julkaistuun tutkimukseen, jossa joitakin samoja asioita oli tutkittu avoimen l\u00e4hdekoodin projekteista. Julkaistun tutkimuksen tulosten havaittiin olevan osin kyseenalaisia ja jopa virheellisi\u00e4. Vertailukelpoisten tietojen osalta tulokset olivat varsin yhtenevi\u00e4.", "language": "fi", "element": "description", "qualifier": "abstract", "schema": "dc"}, {"key": "dc.description.abstract", "value": "JavaScript is a very widely used programming language. It is used in almost all websites\r\nand all modern web browsers support it. However, applications developed with JavaScript\r\ncontain a lot of errors. Callback functions have been generally considered to cause\r\nerrors. Callback hell is a situation where there are deeply nested, usually anonymous and asynchronously called, callback functions. This makes the program code hard to understand and to maintain. In this study we performed a literature review of problems related to JavaScript callback mechanisms and also some surrogate asynchronous methods. An empirical study was performed to analyze JavaScript code used in Finnish websites. Code characteristics, usage of callback mechanism and depth of nested functions were measured. A measurement tool was created to collect measurements from selected web sites. For each site all necessary files were first downloaded, then analyzed, and the results were saved to a data matrix. The total number of analyzed web sites was 134 in five different categories. Our research indicates that the style of JavaScript code varies between the categories. We also found that many web sites embed JavaScript directly in HTML and also within HTML attributes. Frequent usage of callback functions was found from the collected data set as well as deep nesting of these functions. Only few surrogate methods were used. Despite this, we found indication of correlation between use of the promise abstraction and shallower levels of nesting. Results were also compared with a published research where same things were analyzed from Open Source -projects. We found that some of their results were questionable or even incorrect. For comparable parts the results were similar.", "language": "en", "element": "description", "qualifier": "abstract", "schema": "dc"}, {"key": "dc.description.provenance", "value": "Submitted using Plone Publishing form by Riia Tarvainen (riia) on 2016-10-14 13:41:25.280393. Form: Pro gradu -lomake (https://kirjasto.jyu.fi/julkaisut/julkaisulomakkeet/pro-gradu-lomake). JyX data: [jyx_publishing-allowed (fi) =True]", "language": "en", "element": "description", "qualifier": "provenance", "schema": "dc"}, {"key": "dc.description.provenance", "value": "Submitted by jyx lomake-julkaisija (jyx-julkaisija.group@korppi.jyu.fi) on 2016-10-14T13:41:25Z\r\nNo. of bitstreams: 2\r\nURN:NBN:fi:jyu-201610144371.pdf: 940222 bytes, checksum: 23abcf21a5cb5384b7230788d5ff2456 (MD5)\r\nlicense.html: 4864 bytes, checksum: b4bb1ad1a2e30b5d67285cae36123e62 (MD5)", "language": "en", "element": "description", "qualifier": "provenance", "schema": "dc"}, {"key": "dc.description.provenance", "value": "Made available in DSpace on 2016-10-14T13:41:26Z (GMT). No. of bitstreams: 2\r\nURN:NBN:fi:jyu-201610144371.pdf: 940222 bytes, checksum: 23abcf21a5cb5384b7230788d5ff2456 (MD5)\r\nlicense.html: 4864 bytes, checksum: b4bb1ad1a2e30b5d67285cae36123e62 (MD5)\r\n Previous issue date: 2016", "language": "en", "element": "description", "qualifier": "provenance", "schema": "dc"}, {"key": "dc.format.extent", "value": "1 verkkoaineisto (72 sivua)", "language": null, "element": "format", "qualifier": "extent", "schema": "dc"}, {"key": "dc.format.mimetype", "value": "application/pdf", "language": null, "element": "format", "qualifier": "mimetype", "schema": "dc"}, {"key": "dc.language.iso", "value": "fin", "language": null, "element": "language", "qualifier": "iso", "schema": "dc"}, {"key": "dc.rights", "value": "In Copyright", "language": "en", "element": "rights", "qualifier": null, "schema": "dc"}, {"key": "dc.subject.other", "value": "takaisinkutsu", "language": null, "element": "subject", "qualifier": "other", "schema": "dc"}, {"key": "dc.subject.other", "value": "asynkronisuus", "language": null, "element": "subject", "qualifier": "other", "schema": "dc"}, {"key": "dc.subject.other", "value": "takaisinkutsuhelvetti", "language": null, "element": "subject", "qualifier": "other", "schema": "dc"}, {"key": "dc.subject.other", "value": "callback", "language": null, "element": "subject", "qualifier": "other", "schema": "dc"}, {"key": "dc.subject.other", "value": "callback-hell", "language": null, "element": "subject", "qualifier": "other", "schema": "dc"}, {"key": "dc.title", "value": "JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla : takaisinkutsumenetelm\u00e4n yleisyys ja ongelmat", "language": null, "element": "title", "qualifier": null, "schema": "dc"}, {"key": "dc.type", "value": "master thesis", "language": null, "element": "type", "qualifier": null, "schema": "dc"}, {"key": "dc.identifier.urn", "value": "URN:NBN:fi:jyu-201610144371", "language": null, "element": "identifier", "qualifier": "urn", "schema": "dc"}, {"key": "dc.type.ontasot", "value": "Pro gradu -tutkielma", "language": "fi", "element": "type", "qualifier": "ontasot", "schema": "dc"}, {"key": "dc.type.ontasot", "value": "Master\u2019s thesis", "language": "en", "element": "type", "qualifier": "ontasot", "schema": "dc"}, {"key": "dc.contributor.faculty", "value": "Informaatioteknologian tiedekunta", "language": "fi", "element": "contributor", "qualifier": "faculty", "schema": "dc"}, {"key": "dc.contributor.faculty", "value": "Faculty of Information Technology", "language": "en", "element": "contributor", "qualifier": "faculty", "schema": "dc"}, {"key": "dc.contributor.department", "value": "Tietojenk\u00e4sittelytieteiden laitos", "language": "fi", "element": "contributor", "qualifier": "department", "schema": "dc"}, {"key": "dc.contributor.department", "value": "Department of Computer Science and Information Systems", "language": "en", "element": "contributor", "qualifier": "department", "schema": "dc"}, {"key": "dc.contributor.organization", "value": "University of Jyv\u00e4skyl\u00e4", "language": "en", "element": "contributor", "qualifier": "organization", "schema": "dc"}, {"key": "dc.contributor.organization", "value": "Jyv\u00e4skyl\u00e4n yliopisto", "language": "fi", "element": "contributor", "qualifier": "organization", "schema": "dc"}, {"key": "dc.subject.discipline", "value": "Tietojenk\u00e4sittelytiede", "language": "fi", "element": "subject", "qualifier": "discipline", "schema": "dc"}, {"key": "dc.date.updated", "value": "2016-10-14T13:41:26Z", "language": "", "element": "date", "qualifier": "updated", "schema": "dc"}, {"key": "yvv.contractresearch.funding", "value": "0", "language": "", "element": "contractresearch", "qualifier": "funding", "schema": "yvv"}, {"key": "dc.type.coar", "value": "http://purl.org/coar/resource_type/c_bdcc", "language": null, "element": "type", "qualifier": "coar", "schema": "dc"}, {"key": "dc.rights.accesslevel", "value": "openAccess", "language": "fi", "element": "rights", "qualifier": "accesslevel", "schema": "dc"}, {"key": "dc.type.publication", "value": "masterThesis", "language": null, "element": "type", "qualifier": "publication", "schema": "dc"}, {"key": "dc.subject.oppiainekoodi", "value": "601", "language": null, "element": "subject", "qualifier": "oppiainekoodi", "schema": "dc"}, {"key": "dc.subject.yso", "value": "JavaScript", "language": null, "element": "subject", "qualifier": "yso", "schema": "dc"}, {"key": "dc.subject.yso", "value": "verkkopalvelut", "language": null, "element": "subject", "qualifier": "yso", "schema": "dc"}, {"key": "dc.format.content", "value": "fulltext", "language": null, "element": "format", "qualifier": "content", "schema": "dc"}, {"key": "dc.rights.url", "value": "https://rightsstatements.org/page/InC/1.0/", "language": null, "element": "rights", "qualifier": "url", "schema": "dc"}, {"key": "dc.type.okm", "value": "G2", "language": null, "element": "type", "qualifier": "okm", "schema": "dc"}]
id jyx.123456789_51631
language fin
last_indexed 2025-03-31T20:01:38Z
main_date 2016-01-01T00:00:00Z
main_date_str 2016
online_boolean 1
online_urls_str_mv {"url":"https:\/\/jyx.jyu.fi\/bitstreams\/d81a3c99-7eba-4c2d-bb83-342e49fdca8e\/download","text":"URN:NBN:fi:jyu-201610144371.pdf","source":"jyx","mediaType":"application\/pdf"}
publishDate 2016
record_format qdc
source_str_mv jyx
spellingShingle Tarvainen, Riia JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla : takaisinkutsumenetelmän yleisyys ja ongelmat takaisinkutsu asynkronisuus takaisinkutsuhelvetti callback callback-hell Tietojenkäsittelytiede 601 JavaScript verkkopalvelut
title JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla : takaisinkutsumenetelmän yleisyys ja ongelmat
title_full JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla : takaisinkutsumenetelmän yleisyys ja ongelmat
title_fullStr JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla : takaisinkutsumenetelmän yleisyys ja ongelmat JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla : takaisinkutsumenetelmän yleisyys ja ongelmat
title_full_unstemmed JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla : takaisinkutsumenetelmän yleisyys ja ongelmat JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla : takaisinkutsumenetelmän yleisyys ja ongelmat
title_short JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla
title_sort javascript ja takaisinkutsut suomalaisilla verkkosivuilla takaisinkutsumenetelmän yleisyys ja ongelmat
title_sub takaisinkutsumenetelmän yleisyys ja ongelmat
title_txtP JavaScript ja takaisinkutsut suomalaisilla verkkosivuilla : takaisinkutsumenetelmän yleisyys ja ongelmat
topic takaisinkutsu asynkronisuus takaisinkutsuhelvetti callback callback-hell Tietojenkäsittelytiede 601 JavaScript verkkopalvelut
topic_facet 601 JavaScript Tietojenkäsittelytiede asynkronisuus callback callback-hell takaisinkutsu takaisinkutsuhelvetti verkkopalvelut
url https://jyx.jyu.fi/handle/123456789/51631 http://www.urn.fi/URN:NBN:fi:jyu-201610144371
work_keys_str_mv AT tarvainenriia javascriptjatakaisinkutsutsuomalaisillaverkkosivuillatakaisinkutsumenetelmänyleisy